From 373092553491bc163ec6e977ae60b0d3f9bd6dcf Mon Sep 17 00:00:00 2001
From: oyang
Date: Fri, 15 Apr 2011 17:06:38 -0700
Subject: [PATCH] Release 6.2.0beta4
---
HandleAjaxCall.php | 56 +
LICENSE.txt | 661 +
ModuleInstall/ModuleInstaller.php | 2351 ++
ModuleInstall/ModuleScanner.php | 436 +
.../PackageManager/ListViewPackages.php | 72 +
.../PackageManager/PackageController.php | 356 +
.../PackageManager/PackageManager.php | 878 +
.../PackageManager/PackageManagerComm.php | 309 +
.../PackageManager/PackageManagerDisplay.php | 606 +
.../PackageManagerDownloader.php | 72 +
.../PackageManager/metadata/listviewdefs.php | 64 +
.../tpls/ModuleLoaderListView.tpl | 97 +
.../PackageManager/tpls/PackageForm.tpl | 106 +
.../tpls/PackageManagerLicense.tpl | 51 +
.../tpls/PackageManagerScripts.tpl | 1085 +
SugarSecurity.php | 167 +
TreeData.php | 146 +
WebToLeadCapture.php | 47 +
XTemplate/LICENSE | 502 +
XTemplate/xtpl.php | 567 +
Zend/Crypt.php | 167 +
Zend/Crypt/DiffieHellman.php | 380 +
Zend/Crypt/DiffieHellman/Exception.php | 36 +
Zend/Crypt/Exception.php | 35 +
Zend/Crypt/Hmac.php | 181 +
Zend/Crypt/Hmac/Exception.php | 36 +
Zend/Crypt/Math.php | 102 +
Zend/Crypt/Math/BigInteger.php | 117 +
Zend/Crypt/Math/BigInteger/Bcmath.php | 203 +
Zend/Crypt/Math/BigInteger/Exception.php | 36 +
Zend/Crypt/Math/BigInteger/Gmp.php | 196 +
Zend/Crypt/Math/BigInteger/Interface.php | 51 +
Zend/Crypt/Math/Exception.php | 36 +
Zend/Crypt/Rsa.php | 309 +
Zend/Crypt/Rsa/Key.php | 95 +
Zend/Crypt/Rsa/Key/Private.php | 75 +
Zend/Crypt/Rsa/Key/Public.php | 74 +
Zend/Exception.php | 95 +
Zend/Gdata.php | 241 +
Zend/Gdata/App.php | 1234 +
Zend/Gdata/App/AuthException.php | 41 +
Zend/Gdata/App/BadMethodCallException.php | 42 +
Zend/Gdata/App/Base.php | 572 +
Zend/Gdata/App/BaseMediaSource.php | 179 +
Zend/Gdata/App/CaptchaRequiredException.php | 94 +
Zend/Gdata/App/Entry.php | 389 +
Zend/Gdata/App/Exception.php | 43 +
Zend/Gdata/App/Extension.php | 40 +
Zend/Gdata/App/Extension/Author.php | 43 +
Zend/Gdata/App/Extension/Category.php | 140 +
Zend/Gdata/App/Extension/Content.php | 88 +
Zend/Gdata/App/Extension/Contributor.php | 43 +
Zend/Gdata/App/Extension/Control.php | 98 +
Zend/Gdata/App/Extension/Draft.php | 50 +
Zend/Gdata/App/Extension/Edited.php | 49 +
Zend/Gdata/App/Extension/Element.php | 58 +
Zend/Gdata/App/Extension/Email.php | 49 +
Zend/Gdata/App/Extension/Generator.php | 115 +
Zend/Gdata/App/Extension/Icon.php | 49 +
Zend/Gdata/App/Extension/Id.php | 49 +
Zend/Gdata/App/Extension/Link.php | 219 +
Zend/Gdata/App/Extension/Logo.php | 49 +
Zend/Gdata/App/Extension/Name.php | 48 +
Zend/Gdata/App/Extension/Person.php | 163 +
Zend/Gdata/App/Extension/Published.php | 49 +
Zend/Gdata/App/Extension/Rights.php | 49 +
Zend/Gdata/App/Extension/Source.php | 46 +
Zend/Gdata/App/Extension/Subtitle.php | 43 +
Zend/Gdata/App/Extension/Summary.php | 43 +
Zend/Gdata/App/Extension/Text.php | 90 +
Zend/Gdata/App/Extension/Title.php | 43 +
Zend/Gdata/App/Extension/Updated.php | 49 +
Zend/Gdata/App/Extension/Uri.php | 49 +
Zend/Gdata/App/Feed.php | 352 +
Zend/Gdata/App/FeedEntryParent.php | 681 +
Zend/Gdata/App/FeedSourceParent.php | 267 +
Zend/Gdata/App/HttpException.php | 121 +
Zend/Gdata/App/IOException.php | 43 +
Zend/Gdata/App/InvalidArgumentException.php | 42 +
.../App/LoggingHttpClientAdapterSocket.php | 119 +
Zend/Gdata/App/MediaEntry.php | 119 +
Zend/Gdata/App/MediaFileSource.php | 146 +
Zend/Gdata/App/MediaSource.php | 73 +
Zend/Gdata/App/Util.php | 112 +
Zend/Gdata/App/VersionException.php | 42 +
Zend/Gdata/AuthSub.php | 246 +
Zend/Gdata/Books.php | 204 +
Zend/Gdata/Books/CollectionEntry.php | 56 +
Zend/Gdata/Books/CollectionFeed.php | 62 +
Zend/Gdata/Books/Extension/AnnotationLink.php | 63 +
Zend/Gdata/Books/Extension/BooksCategory.php | 59 +
Zend/Gdata/Books/Extension/BooksLink.php | 61 +
Zend/Gdata/Books/Extension/Embeddability.php | 122 +
Zend/Gdata/Books/Extension/InfoLink.php | 59 +
Zend/Gdata/Books/Extension/PreviewLink.php | 60 +
Zend/Gdata/Books/Extension/Review.php | 152 +
Zend/Gdata/Books/Extension/ThumbnailLink.php | 60 +
Zend/Gdata/Books/Extension/Viewability.php | 123 +
Zend/Gdata/Books/VolumeEntry.php | 687 +
Zend/Gdata/Books/VolumeFeed.php | 62 +
Zend/Gdata/Books/VolumeQuery.php | 112 +
Zend/Gdata/Calendar.php | 169 +
Zend/Gdata/Calendar/EventEntry.php | 164 +
Zend/Gdata/Calendar/EventFeed.php | 106 +
Zend/Gdata/Calendar/EventQuery.php | 491 +
Zend/Gdata/Calendar/Extension/AccessLevel.php | 125 +
Zend/Gdata/Calendar/Extension/Color.php | 125 +
Zend/Gdata/Calendar/Extension/Hidden.php | 134 +
Zend/Gdata/Calendar/Extension/Link.php | 125 +
Zend/Gdata/Calendar/Extension/QuickAdd.php | 132 +
Zend/Gdata/Calendar/Extension/Selected.php | 133 +
.../Extension/SendEventNotifications.php | 132 +
Zend/Gdata/Calendar/Extension/Timezone.php | 124 +
Zend/Gdata/Calendar/Extension/WebContent.php | 177 +
Zend/Gdata/Calendar/ListEntry.php | 246 +
Zend/Gdata/Calendar/ListFeed.php | 106 +
Zend/Gdata/ClientLogin.php | 182 +
Zend/Gdata/Docs.php | 319 +
Zend/Gdata/Docs/DocumentListEntry.php | 54 +
Zend/Gdata/Docs/DocumentListFeed.php | 68 +
Zend/Gdata/Docs/Query.php | 228 +
Zend/Gdata/DublinCore.php | 65 +
Zend/Gdata/DublinCore/Extension/Creator.php | 58 +
Zend/Gdata/DublinCore/Extension/Date.php | 60 +
.../DublinCore/Extension/Description.php | 58 +
Zend/Gdata/DublinCore/Extension/Format.php | 58 +
.../Gdata/DublinCore/Extension/Identifier.php | 58 +
Zend/Gdata/DublinCore/Extension/Language.php | 58 +
Zend/Gdata/DublinCore/Extension/Publisher.php | 58 +
Zend/Gdata/DublinCore/Extension/Rights.php | 58 +
Zend/Gdata/DublinCore/Extension/Subject.php | 58 +
Zend/Gdata/DublinCore/Extension/Title.php | 58 +
Zend/Gdata/Entry.php | 132 +
Zend/Gdata/Exif.php | 65 +
Zend/Gdata/Exif/Entry.php | 145 +
Zend/Gdata/Exif/Extension/Distance.php | 61 +
Zend/Gdata/Exif/Extension/Exposure.php | 61 +
Zend/Gdata/Exif/Extension/FStop.php | 61 +
Zend/Gdata/Exif/Extension/Flash.php | 61 +
Zend/Gdata/Exif/Extension/FocalLength.php | 61 +
Zend/Gdata/Exif/Extension/ImageUniqueId.php | 61 +
Zend/Gdata/Exif/Extension/Iso.php | 61 +
Zend/Gdata/Exif/Extension/Make.php | 61 +
Zend/Gdata/Exif/Extension/Model.php | 61 +
Zend/Gdata/Exif/Extension/Tags.php | 549 +
Zend/Gdata/Exif/Extension/Time.php | 61 +
Zend/Gdata/Exif/Feed.php | 70 +
Zend/Gdata/Extension.php | 58 +
Zend/Gdata/Extension/AttendeeStatus.php | 123 +
Zend/Gdata/Extension/AttendeeType.php | 123 +
Zend/Gdata/Extension/Comments.php | 117 +
Zend/Gdata/Extension/EntryLink.php | 167 +
Zend/Gdata/Extension/EventStatus.php | 101 +
Zend/Gdata/Extension/ExtendedProperty.php | 106 +
Zend/Gdata/Extension/FeedLink.php | 175 +
.../Extension/OpenSearchItemsPerPage.php | 50 +
Zend/Gdata/Extension/OpenSearchStartIndex.php | 50 +
.../Extension/OpenSearchTotalResults.php | 50 +
Zend/Gdata/Extension/OriginalEvent.php | 142 +
Zend/Gdata/Extension/Rating.php | 240 +
Zend/Gdata/Extension/Recurrence.php | 49 +
Zend/Gdata/Extension/RecurrenceException.php | 215 +
Zend/Gdata/Extension/Reminder.php | 171 +
Zend/Gdata/Extension/Transparency.php | 123 +
Zend/Gdata/Extension/Visibility.php | 123 +
Zend/Gdata/Extension/When.php | 169 +
Zend/Gdata/Extension/Where.php | 171 +
Zend/Gdata/Extension/Who.php | 299 +
Zend/Gdata/Feed.php | 251 +
Zend/Gdata/Gapps.php | 1683 +
Zend/Gdata/Gapps/EmailListEntry.php | 214 +
Zend/Gdata/Gapps/EmailListFeed.php | 53 +
Zend/Gdata/Gapps/EmailListQuery.php | 187 +
Zend/Gdata/Gapps/EmailListRecipientEntry.php | 146 +
Zend/Gdata/Gapps/EmailListRecipientFeed.php | 53 +
Zend/Gdata/Gapps/EmailListRecipientQuery.php | 153 +
Zend/Gdata/Gapps/Error.php | 233 +
Zend/Gdata/Gapps/Extension/EmailList.php | 144 +
Zend/Gdata/Gapps/Extension/Login.php | 485 +
Zend/Gdata/Gapps/Extension/Name.php | 181 +
Zend/Gdata/Gapps/Extension/Nickname.php | 142 +
Zend/Gdata/Gapps/Extension/Property.php | 180 +
Zend/Gdata/Gapps/Extension/Quota.php | 142 +
Zend/Gdata/Gapps/GroupEntry.php | 158 +
Zend/Gdata/Gapps/GroupFeed.php | 53 +
Zend/Gdata/Gapps/GroupQuery.php | 226 +
Zend/Gdata/Gapps/MemberEntry.php | 159 +
Zend/Gdata/Gapps/MemberFeed.php | 53 +
Zend/Gdata/Gapps/MemberQuery.php | 194 +
Zend/Gdata/Gapps/NicknameEntry.php | 189 +
Zend/Gdata/Gapps/NicknameFeed.php | 53 +
Zend/Gdata/Gapps/NicknameQuery.php | 186 +
Zend/Gdata/Gapps/OwnerEntry.php | 158 +
Zend/Gdata/Gapps/OwnerFeed.php | 53 +
Zend/Gdata/Gapps/OwnerQuery.php | 147 +
Zend/Gdata/Gapps/Query.php | 123 +
Zend/Gdata/Gapps/ServiceException.php | 208 +
Zend/Gdata/Gapps/UserEntry.php | 295 +
Zend/Gdata/Gapps/UserFeed.php | 53 +
Zend/Gdata/Gapps/UserQuery.php | 147 +
Zend/Gdata/Gbase.php | 209 +
Zend/Gdata/Gbase/Entry.php | 151 +
Zend/Gdata/Gbase/Extension/BaseAttribute.php | 115 +
Zend/Gdata/Gbase/Feed.php | 60 +
Zend/Gdata/Gbase/ItemEntry.php | 161 +
Zend/Gdata/Gbase/ItemFeed.php | 48 +
Zend/Gdata/Gbase/ItemQuery.php | 101 +
Zend/Gdata/Gbase/Query.php | 268 +
Zend/Gdata/Gbase/SnippetEntry.php | 48 +
Zend/Gdata/Gbase/SnippetFeed.php | 48 +
Zend/Gdata/Gbase/SnippetQuery.php | 74 +
Zend/Gdata/Geo.php | 70 +
Zend/Gdata/Geo/Entry.php | 97 +
Zend/Gdata/Geo/Extension/GeoRssWhere.php | 135 +
Zend/Gdata/Geo/Extension/GmlPoint.php | 136 +
Zend/Gdata/Geo/Extension/GmlPos.php | 61 +
Zend/Gdata/Geo/Feed.php | 64 +
Zend/Gdata/Health.php | 274 +
Zend/Gdata/Health/Extension/Ccr.php | 124 +
Zend/Gdata/Health/ProfileEntry.php | 135 +
Zend/Gdata/Health/ProfileFeed.php | 67 +
Zend/Gdata/Health/ProfileListEntry.php | 100 +
Zend/Gdata/Health/ProfileListFeed.php | 53 +
Zend/Gdata/Health/Query.php | 285 +
Zend/Gdata/HttpAdapterStreamingProxy.php | 127 +
Zend/Gdata/HttpAdapterStreamingSocket.php | 111 +
Zend/Gdata/HttpClient.php | 352 +
Zend/Gdata/Kind/EventEntry.php | 428 +
Zend/Gdata/Media.php | 65 +
Zend/Gdata/Media/Entry.php | 134 +
Zend/Gdata/Media/Extension/MediaCategory.php | 148 +
Zend/Gdata/Media/Extension/MediaContent.php | 522 +
Zend/Gdata/Media/Extension/MediaCopyright.php | 116 +
Zend/Gdata/Media/Extension/MediaCredit.php | 149 +
.../Media/Extension/MediaDescription.php | 116 +
Zend/Gdata/Media/Extension/MediaGroup.php | 566 +
Zend/Gdata/Media/Extension/MediaHash.php | 115 +
Zend/Gdata/Media/Extension/MediaKeywords.php | 52 +
Zend/Gdata/Media/Extension/MediaPlayer.php | 178 +
Zend/Gdata/Media/Extension/MediaRating.php | 118 +
.../Media/Extension/MediaRestriction.php | 149 +
Zend/Gdata/Media/Extension/MediaText.php | 211 +
Zend/Gdata/Media/Extension/MediaThumbnail.php | 210 +
Zend/Gdata/Media/Extension/MediaTitle.php | 118 +
Zend/Gdata/Media/Feed.php | 70 +
Zend/Gdata/MediaMimeStream.php | 190 +
Zend/Gdata/MimeBodyString.php | 92 +
Zend/Gdata/MimeFile.php | 66 +
Zend/Gdata/Photos.php | 576 +
Zend/Gdata/Photos/AlbumEntry.php | 610 +
Zend/Gdata/Photos/AlbumFeed.php | 509 +
Zend/Gdata/Photos/AlbumQuery.php | 149 +
Zend/Gdata/Photos/CommentEntry.php | 195 +
Zend/Gdata/Photos/Extension/Access.php | 63 +
Zend/Gdata/Photos/Extension/AlbumId.php | 63 +
Zend/Gdata/Photos/Extension/BytesUsed.php | 62 +
Zend/Gdata/Photos/Extension/Checksum.php | 63 +
Zend/Gdata/Photos/Extension/Client.php | 63 +
Zend/Gdata/Photos/Extension/CommentCount.php | 63 +
.../Photos/Extension/CommentingEnabled.php | 64 +
Zend/Gdata/Photos/Extension/Height.php | 62 +
Zend/Gdata/Photos/Extension/Id.php | 62 +
Zend/Gdata/Photos/Extension/Location.php | 62 +
.../Photos/Extension/MaxPhotosPerAlbum.php | 63 +
Zend/Gdata/Photos/Extension/Name.php | 62 +
Zend/Gdata/Photos/Extension/Nickname.php | 62 +
Zend/Gdata/Photos/Extension/NumPhotos.php | 62 +
.../Photos/Extension/NumPhotosRemaining.php | 62 +
Zend/Gdata/Photos/Extension/PhotoId.php | 61 +
Zend/Gdata/Photos/Extension/Position.php | 62 +
Zend/Gdata/Photos/Extension/QuotaCurrent.php | 62 +
Zend/Gdata/Photos/Extension/QuotaLimit.php | 63 +
Zend/Gdata/Photos/Extension/Rotation.php | 63 +
Zend/Gdata/Photos/Extension/Size.php | 62 +
Zend/Gdata/Photos/Extension/Thumbnail.php | 62 +
Zend/Gdata/Photos/Extension/Timestamp.php | 63 +
Zend/Gdata/Photos/Extension/User.php | 62 +
Zend/Gdata/Photos/Extension/Version.php | 63 +
Zend/Gdata/Photos/Extension/Weight.php | 63 +
Zend/Gdata/Photos/Extension/Width.php | 62 +
Zend/Gdata/Photos/PhotoEntry.php | 691 +
Zend/Gdata/Photos/PhotoFeed.php | 559 +
Zend/Gdata/Photos/PhotoQuery.php | 98 +
Zend/Gdata/Photos/TagEntry.php | 140 +
Zend/Gdata/Photos/UserEntry.php | 366 +
Zend/Gdata/Photos/UserFeed.php | 247 +
Zend/Gdata/Photos/UserQuery.php | 355 +
Zend/Gdata/Query.php | 418 +
Zend/Gdata/Spreadsheets.php | 445 +
Zend/Gdata/Spreadsheets/CellEntry.php | 103 +
Zend/Gdata/Spreadsheets/CellFeed.php | 158 +
Zend/Gdata/Spreadsheets/CellQuery.php | 417 +
Zend/Gdata/Spreadsheets/DocumentQuery.php | 288 +
Zend/Gdata/Spreadsheets/Extension/Cell.php | 201 +
.../Gdata/Spreadsheets/Extension/ColCount.php | 59 +
Zend/Gdata/Spreadsheets/Extension/Custom.php | 100 +
.../Gdata/Spreadsheets/Extension/RowCount.php | 60 +
Zend/Gdata/Spreadsheets/ListEntry.php | 208 +
Zend/Gdata/Spreadsheets/ListFeed.php | 64 +
Zend/Gdata/Spreadsheets/ListQuery.php | 305 +
Zend/Gdata/Spreadsheets/SpreadsheetEntry.php | 64 +
Zend/Gdata/Spreadsheets/SpreadsheetFeed.php | 64 +
Zend/Gdata/Spreadsheets/WorksheetEntry.php | 187 +
Zend/Gdata/Spreadsheets/WorksheetFeed.php | 64 +
Zend/Gdata/YouTube.php | 874 +
Zend/Gdata/YouTube/ActivityEntry.php | 232 +
Zend/Gdata/YouTube/ActivityFeed.php | 66 +
Zend/Gdata/YouTube/CommentEntry.php | 59 +
Zend/Gdata/YouTube/CommentFeed.php | 66 +
Zend/Gdata/YouTube/ContactEntry.php | 136 +
Zend/Gdata/YouTube/ContactFeed.php | 68 +
Zend/Gdata/YouTube/Extension/AboutMe.php | 51 +
Zend/Gdata/YouTube/Extension/Age.php | 51 +
Zend/Gdata/YouTube/Extension/Books.php | 51 +
Zend/Gdata/YouTube/Extension/Company.php | 51 +
Zend/Gdata/YouTube/Extension/Control.php | 133 +
Zend/Gdata/YouTube/Extension/CountHint.php | 51 +
Zend/Gdata/YouTube/Extension/Description.php | 51 +
Zend/Gdata/YouTube/Extension/Duration.php | 126 +
Zend/Gdata/YouTube/Extension/FirstName.php | 51 +
Zend/Gdata/YouTube/Extension/Gender.php | 51 +
Zend/Gdata/YouTube/Extension/Hobbies.php | 51 +
Zend/Gdata/YouTube/Extension/Hometown.php | 51 +
Zend/Gdata/YouTube/Extension/LastName.php | 51 +
Zend/Gdata/YouTube/Extension/Link.php | 133 +
Zend/Gdata/YouTube/Extension/Location.php | 51 +
Zend/Gdata/YouTube/Extension/MediaContent.php | 120 +
Zend/Gdata/YouTube/Extension/MediaCredit.php | 189 +
Zend/Gdata/YouTube/Extension/MediaGroup.php | 336 +
Zend/Gdata/YouTube/Extension/MediaRating.php | 150 +
Zend/Gdata/YouTube/Extension/Movies.php | 51 +
Zend/Gdata/YouTube/Extension/Music.php | 51 +
Zend/Gdata/YouTube/Extension/NoEmbed.php | 54 +
Zend/Gdata/YouTube/Extension/Occupation.php | 51 +
Zend/Gdata/YouTube/Extension/PlaylistId.php | 51 +
.../Gdata/YouTube/Extension/PlaylistTitle.php | 51 +
Zend/Gdata/YouTube/Extension/Position.php | 90 +
Zend/Gdata/YouTube/Extension/Private.php | 81 +
Zend/Gdata/YouTube/Extension/QueryString.php | 51 +
Zend/Gdata/YouTube/Extension/Racy.php | 124 +
Zend/Gdata/YouTube/Extension/Recorded.php | 51 +
Zend/Gdata/YouTube/Extension/Relationship.php | 51 +
Zend/Gdata/YouTube/Extension/ReleaseDate.php | 51 +
Zend/Gdata/YouTube/Extension/School.php | 51 +
Zend/Gdata/YouTube/Extension/State.php | 193 +
Zend/Gdata/YouTube/Extension/Statistics.php | 309 +
Zend/Gdata/YouTube/Extension/Status.php | 51 +
Zend/Gdata/YouTube/Extension/Token.php | 70 +
Zend/Gdata/YouTube/Extension/Uploaded.php | 51 +
Zend/Gdata/YouTube/Extension/Username.php | 51 +
Zend/Gdata/YouTube/Extension/VideoId.php | 51 +
Zend/Gdata/YouTube/InboxEntry.php | 281 +
Zend/Gdata/YouTube/InboxFeed.php | 68 +
Zend/Gdata/YouTube/MediaEntry.php | 81 +
Zend/Gdata/YouTube/PlaylistListEntry.php | 300 +
Zend/Gdata/YouTube/PlaylistListFeed.php | 68 +
Zend/Gdata/YouTube/PlaylistVideoEntry.php | 132 +
Zend/Gdata/YouTube/PlaylistVideoFeed.php | 68 +
Zend/Gdata/YouTube/SubscriptionEntry.php | 446 +
Zend/Gdata/YouTube/SubscriptionFeed.php | 68 +
Zend/Gdata/YouTube/UserProfileEntry.php | 1041 +
Zend/Gdata/YouTube/VideoEntry.php | 1095 +
Zend/Gdata/YouTube/VideoFeed.php | 65 +
Zend/Gdata/YouTube/VideoQuery.php | 540 +
Zend/Http/Client.php | 1453 +
Zend/Http/Client/Adapter/Curl.php | 507 +
Zend/Http/Client/Adapter/Exception.php | 38 +
Zend/Http/Client/Adapter/Interface.php | 78 +
Zend/Http/Client/Adapter/Proxy.php | 284 +
Zend/Http/Client/Adapter/Socket.php | 544 +
Zend/Http/Client/Adapter/Stream.php | 46 +
Zend/Http/Client/Adapter/Test.php | 238 +
Zend/Http/Client/Exception.php | 36 +
Zend/Http/Exception.php | 36 +
Zend/Http/Response.php | 667 +
Zend/Http/Response/Stream.php | 235 +
Zend/Loader.php | 329 +
Zend/Oauth.php | 89 +
Zend/Oauth/Client.php | 336 +
Zend/Oauth/Config.php | 658 +
Zend/Oauth/Config/ConfigInterface.php | 75 +
Zend/Oauth/Consumer.php | 273 +
Zend/Oauth/Exception.php | 33 +
Zend/Oauth/Http.php | 266 +
Zend/Oauth/Http/AccessToken.php | 189 +
Zend/Oauth/Http/RequestToken.php | 162 +
Zend/Oauth/Http/UserAuthorization.php | 78 +
Zend/Oauth/Http/Utility.php | 217 +
Zend/Oauth/Signature/Hmac.php | 54 +
Zend/Oauth/Signature/Plaintext.php | 49 +
Zend/Oauth/Signature/Rsa.php | 65 +
Zend/Oauth/Signature/SignatureAbstract.php | 183 +
Zend/Oauth/Token.php | 285 +
Zend/Oauth/Token/Access.php | 99 +
Zend/Oauth/Token/AuthorizedRequest.php | 102 +
Zend/Oauth/Token/Request.php | 50 +
Zend/Registry.php | 209 +
Zend/Uri.php | 202 +
Zend/Uri/Exception.php | 37 +
Zend/Uri/Http.php | 769 +
Zend/Validate/Abstract.php | 456 +
Zend/Validate/Hostname.php | 740 +
Zend/Validate/Hostname/Biz.php | 2917 ++
Zend/Validate/Hostname/Cn.php | 2199 ++
Zend/Validate/Hostname/Com.php | 198 +
Zend/Validate/Hostname/Jp.php | 739 +
Zend/Validate/Interface.php | 54 +
Zend/Validate/Ip.php | 191 +
Zend/Version.php | 53 +
acceptDecline.php | 46 +
cache/csv/index.html | 1 +
cache/feeds/index.html | 1 +
cache/images/index.html | 1 +
cache/import/index.html | 1 +
cache/index.html | 1 +
cache/layout/index.html | 1 +
cache/pdf/index.html | 1 +
cache/upload/index.html | 1 +
cache/xml/index.html | 1 +
campaign_tracker.php | 83 +
campaign_trackerv2.php | 46 +
config.php | 0
cron.php | 112 +
custom/index.html | 5 +
data/Link.php | 1094 +
data/SugarBean.php | 5467 +++
data/Tracker.php | 50 +
data/upload/index.html | 1 +
dictionary.php | 42 +
download.php | 180 +
emailmandelivery.php | 41 +
examples/EXAMPLES_README.txt | 7 +
examples/ExampleLeadCapture.php | 70 +
examples/FormValidationTest.php | 61 +
examples/ProgressBarTest.php | 48 +
examples/SoapTest.php | 122 +
examples/SoapTestPortal.php | 262 +
examples/SoapTestPortal2.php | 105 +
export.php | 78 +
files.md5 | 5781 +++
image.php | 46 +
include/Dashlets/Dashlet.php | 378 +
include/Dashlets/DashletCacheBuilder.php | 88 +
include/Dashlets/DashletGeneric.php | 506 +
.../Dashlets/DashletGenericAutoRefresh.tpl | 58 +
.../DashletGenericAutoRefreshDynamic.tpl | 64 +
include/Dashlets/DashletGenericChart.php | 354 +
.../Dashlets/DashletGenericChartConfigure.tpl | 95 +
include/Dashlets/DashletGenericConfigure.tpl | 134 +
include/Dashlets/DashletGenericDisplay.tpl | 191 +
include/DetailView/DetailView.php | 451 +
include/DetailView/DetailView.tpl | 175 +
include/DetailView/DetailView2.php | 104 +
include/DetailView/footer.tpl | 38 +
include/DetailView/header.tpl | 119 +
include/EditView/EditView.php | 96 +
include/EditView/EditView.tpl | 215 +
include/EditView/EditView2.php | 716 +
include/EditView/PopupQuickCreate.php | 54 +
include/EditView/QuickCreate.php | 77 +
include/EditView/QuickCreate.tpl | 38 +
include/EditView/SubpanelQuickCreate.php | 121 +
include/EditView/SugarVCR.php | 187 +
include/EditView/footer.tpl | 64 +
include/EditView/header.tpl | 91 +
include/GroupedTabs/GroupedTabStructure.php | 149 +
include/HTTP_WebDAV_Server/README | 10 +
include/HTTP_WebDAV_Server/Server.php | 1873 +
.../Tools/_parse_lockinfo.php | 237 +
.../Tools/_parse_propfind.php | 178 +
.../Tools/_parse_proppatch.php | 214 +
include/HTTP_WebDAV_Server/dav.txt | 229 +
include/HTTP_WebDAV_Server/license.txt | 68 +
include/JSON.js | 44 +
include/JSON.php | 104 +
include/ListView/ListView.php | 1757 +
include/ListView/ListViewDCMenu.tpl | 189 +
include/ListView/ListViewData.php | 577 +
include/ListView/ListViewDisplay.php | 615 +
include/ListView/ListViewFacade.php | 177 +
include/ListView/ListViewGeneric.tpl | 168 +
include/ListView/ListViewNoMassUpdate.tpl | 133 +
include/ListView/ListViewPagination.tpl | 91 +
include/ListView/ListViewSmarty.php | 231 +
include/ListView/ListViewXTPL.php | 221 +
include/Localization/Localization.php | 694 +
include/MVC/Controller/ControllerFactory.php | 82 +
include/MVC/Controller/SugarController.php | 833 +
include/MVC/Controller/action_file_map.php | 50 +
include/MVC/Controller/action_view_map.php | 65 +
.../MVC/Controller/entry_point_registry.php | 74 +
.../Controller/file_access_control_map.php | 71 +
include/MVC/SugarApplication.php | 582 +
include/MVC/SugarModule.php | 120 +
include/MVC/View/SugarView.php | 1248 +
include/MVC/View/ViewFactory.php | 248 +
include/MVC/View/tpls/Importvcard.tpl | 69 +
include/MVC/View/tpls/modulelistmenu.tpl | 42 +
include/MVC/View/tpls/xsrf.tpl | 61 +
include/MVC/View/views/view.ajax.php | 57 +
.../MVC/View/views/view.classic.config.php | 68 +
include/MVC/View/views/view.classic.php | 71 +
include/MVC/View/views/view.config.php | 120 +
include/MVC/View/views/view.detail.php | 71 +
include/MVC/View/views/view.edit.php | 68 +
include/MVC/View/views/view.html.php | 49 +
include/MVC/View/views/view.importvcard.php | 79 +
.../MVC/View/views/view.importvcardsave.php | 70 +
include/MVC/View/views/view.json.php | 65 +
include/MVC/View/views/view.list.php | 293 +
.../MVC/View/views/view.modulelistmenu.php | 66 +
include/MVC/View/views/view.multiedit.php | 85 +
include/MVC/View/views/view.noaccess.php | 49 +
include/MVC/View/views/view.popup.php | 173 +
include/MVC/View/views/view.quick.php | 68 +
include/MVC/View/views/view.quickcreate.php | 168 +
include/MVC/View/views/view.serialized.php | 49 +
.../MVC/View/views/view.sugarpdf.config.php | 56 +
include/MVC/View/views/view.sugarpdf.php | 86 +
include/MVC/View/views/view.vcard.php | 62 +
include/MVC/View/views/view.xml.php | 47 +
include/MassUpdate.php | 1277 +
.../MySugar/DashletsDialog/DashletsDialog.php | 191 +
include/MySugar/MySugar.php | 425 +
include/MySugar/javascript/MySugar.js | 74 +
include/MySugar/tpls/MySugar.tpl | 186 +
include/MySugar/tpls/addDashletsDialog.tpl | 154 +
.../tpls/chartDashletsSearchResults.tpl | 49 +
.../MySugar/tpls/dashletsSearchResults.tpl | 55 +
include/MySugar/tpls/retrievePage.tpl | 92 +
include/MySugar/tpls/retrieveReportCharts.tpl | 44 +
include/OutboundEmail/OutboundEmail.php | 615 +
include/Pear/Crypt_Blowfish/Blowfish.php | 325 +
.../Crypt_Blowfish/Blowfish/DefaultKey.php | 327 +
include/Pear/Crypt_Blowfish/license.txt | 68 +
include/Pear/HTML_Safe/Safe.php | 672 +
include/Pear/HTML_Safe/license.txt | 27 +
include/Pear/XML_HTMLSax3/HTMLSax3.php | 685 +
.../Pear/XML_HTMLSax3/HTMLSax3/Decorators.php | 363 +
include/Pear/XML_HTMLSax3/HTMLSax3/States.php | 287 +
include/Pear/XML_HTMLSax3/LICENSE | 68 +
include/Popups/PopupSmarty.php | 521 +
include/Popups/Popup_picker.php | 344 +
include/Popups/tpls/PopupGeneric.tpl | 265 +
include/Popups/tpls/footer.tpl | 52 +
include/Popups/tpls/header.tpl | 132 +
include/QuickSearchDefaults.php | 200 +
include/SearchForm/SearchForm.php | 715 +
include/SearchForm/SearchForm2.php | 1083 +
include/SearchForm/SugarSpot.php | 429 +
include/SearchForm/tpls/SearchFormGeneric.tpl | 83 +
.../tpls/SearchFormGenericAdvanced.tpl | 100 +
include/SearchForm/tpls/footer.tpl | 58 +
include/SearchForm/tpls/header.tpl | 54 +
include/Smarty/COPYING.lib | 502 +
include/Smarty/Config_File.class.php | 413 +
include/Smarty/LICENSE | 502 +
include/Smarty/README | 80 +
include/Smarty/Smarty.class.php | 1940 +
include/Smarty/Smarty_Compiler.class.php | 2318 ++
include/Smarty/debug.tpl | 87 +
.../core.assemble_plugin_filepath.php | 92 +
.../core.assign_smarty_interface.php | 68 +
.../internals/core.create_dir_structure.php | 106 +
.../internals/core.display_debug_console.php | 86 +
.../internals/core.get_include_path.php | 69 +
.../Smarty/internals/core.get_microtime.php | 48 +
.../internals/core.get_php_resource.php | 105 +
include/Smarty/internals/core.is_secure.php | 86 +
include/Smarty/internals/core.is_trusted.php | 74 +
.../Smarty/internals/core.load_plugins.php | 150 +
.../internals/core.load_resource_plugin.php | 99 +
.../internals/core.process_cached_inserts.php | 98 +
.../core.process_compiled_include.php | 62 +
.../Smarty/internals/core.read_cache_file.php | 126 +
include/Smarty/internals/core.rm_auto.php | 96 +
include/Smarty/internals/core.rmdir.php | 79 +
.../internals/core.run_insert_handler.php | 96 +
.../internals/core.smarty_include_php.php | 75 +
.../internals/core.write_cache_file.php | 121 +
.../internals/core.write_compiled_include.php | 91 +
.../core.write_compiled_resource.php | 60 +
include/Smarty/internals/core.write_file.php | 79 +
include/Smarty/plugins/block.textformat.php | 130 +
include/Smarty/plugins/compiler.assign.php | 67 +
.../plugins/function.assign_debug_info.php | 67 +
.../Smarty/plugins/function.config_load.php | 223 +
include/Smarty/plugins/function.counter.php | 107 +
include/Smarty/plugins/function.cycle.php | 127 +
include/Smarty/plugins/function.debug.php | 60 +
include/Smarty/plugins/function.eval.php | 76 +
.../Smarty/plugins/function.ext_includes.php | 61 +
include/Smarty/plugins/function.fetch.php | 253 +
.../plugins/function.html_checkboxes.php | 168 +
.../Smarty/plugins/function.html_image.php | 169 +
.../Smarty/plugins/function.html_options.php | 162 +
.../Smarty/plugins/function.html_radios.php | 187 +
.../plugins/function.html_select_date.php | 350 +
.../plugins/function.html_select_time.php | 221 +
.../Smarty/plugins/function.html_table.php | 162 +
include/Smarty/plugins/function.mailto.php | 188 +
include/Smarty/plugins/function.math.php | 111 +
.../plugins/function.multienum_to_array.php | 93 +
.../plugins/function.overlib_includes.php | 58 +
include/Smarty/plugins/function.popup.php | 146 +
.../Smarty/plugins/function.popup_init.php | 69 +
.../Smarty/plugins/function.sugar_button.php | 385 +
.../plugins/function.sugar_button_slider.php | 70 +
.../function.sugar_connector_display.php | 112 +
.../function.sugar_currency_format.php | 90 +
.../plugins/function.sugar_evalcolumn.php | 108 +
.../plugins/function.sugar_evalcolumn_old.php | 94 +
.../Smarty/plugins/function.sugar_fetch.php | 61 +
.../Smarty/plugins/function.sugar_field.php | 92 +
.../plugins/function.sugar_getimagepath.php | 62 +
.../plugins/function.sugar_getjspath.php | 53 +
.../plugins/function.sugar_getwebpath.php | 53 +
.../Smarty/plugins/function.sugar_help.php | 94 +
.../Smarty/plugins/function.sugar_image.php | 53 +
.../Smarty/plugins/function.sugar_include.php | 89 +
.../Smarty/plugins/function.sugar_link.php | 115 +
.../plugins/function.sugar_number_format.php | 57 +
.../Smarty/plugins/function.sugar_phone.php | 116 +
.../plugins/function.sugar_replace_vars.php | 73 +
.../plugins/function.sugar_run_helper.php | 72 +
.../plugins/function.sugar_translate.php | 91 +
.../function.sugar_variable_constructor.php | 68 +
include/Smarty/plugins/function.sugarvar.php | 114 +
.../plugins/function.sugarvar_connector.php | 84 +
.../Smarty/plugins/modifier.capitalize.php | 70 +
include/Smarty/plugins/modifier.cat.php | 58 +
.../plugins/modifier.count_characters.php | 59 +
.../plugins/modifier.count_paragraphs.php | 56 +
.../plugins/modifier.count_sentences.php | 56 +
.../Smarty/plugins/modifier.count_words.php | 60 +
.../Smarty/plugins/modifier.date_format.php | 76 +
.../plugins/modifier.debug_print_var.php | 84 +
include/Smarty/plugins/modifier.default.php | 59 +
.../plugins/modifier.default_date_value.php | 211 +
include/Smarty/plugins/modifier.escape.php | 125 +
include/Smarty/plugins/modifier.in_array.php | 54 +
include/Smarty/plugins/modifier.indent.php | 55 +
include/Smarty/plugins/modifier.lower.php | 53 +
include/Smarty/plugins/modifier.nl2br.php | 60 +
.../Smarty/plugins/modifier.regex_replace.php | 61 +
include/Smarty/plugins/modifier.replace.php | 57 +
include/Smarty/plugins/modifier.spacify.php | 57 +
.../Smarty/plugins/modifier.string_format.php | 56 +
include/Smarty/plugins/modifier.strip.php | 64 +
.../plugins/modifier.strip_semicolon.php | 59 +
.../Smarty/plugins/modifier.strip_tags.php | 59 +
include/Smarty/plugins/modifier.to_url.php | 83 +
include/Smarty/plugins/modifier.truncate.php | 77 +
include/Smarty/plugins/modifier.upper.php | 53 +
include/Smarty/plugins/modifier.wordwrap.php | 56 +
.../plugins/outputfilter.trimwhitespace.php | 108 +
.../plugins/shared.escape_special_chars.php | 58 +
.../Smarty/plugins/shared.make_timestamp.php | 73 +
include/SubPanel/SubPanel.php | 383 +
include/SubPanel/SubPanelDefinitions.php | 787 +
include/SubPanel/SubPanelDynamic.html | 66 +
include/SubPanel/SubPanelTiles.js | 124 +
include/SubPanel/SubPanelTiles.php | 443 +
include/SubPanel/SubPanelTilesTabs.php | 267 +
include/SubPanel/SubPanelViewer.php | 92 +
include/SubPanel/SugarTab.php | 91 +
include/SubPanel/registered_layout_defs.php | 53 +
include/SubPanel/subpanels.txt | 471 +
include/SubPanel/tpls/singletabmenu.tpl | 142 +
include/SugarCache/SugarCache.php | 181 +
include/SugarCache/SugarCacheAPC.php | 104 +
include/SugarCache/SugarCacheAbstract.php | 315 +
include/SugarCache/SugarCacheFile.php | 149 +
include/SugarCache/SugarCacheMemcache.php | 143 +
include/SugarCache/SugarCacheMemcached.php | 143 +
include/SugarCache/SugarCacheMemory.php | 98 +
include/SugarCache/SugarCacheRedis.php | 175 +
include/SugarCache/SugarCacheWincache.php | 104 +
include/SugarCache/SugarCacheZend.php | 103 +
include/SugarCache/SugarCachesMash.php | 100 +
.../SugarCharts/Jit/FlashCanvas/canvas2png.js | 9 +
.../Jit/FlashCanvas/flashcanvas.js | 8 +
.../Jit/FlashCanvas/flashcanvas.swf | Bin 0 -> 21235 bytes
include/SugarCharts/Jit/FlashCanvas/proxy.php | 73 +
include/SugarCharts/Jit/FlashCanvas/save.php | 49 +
include/SugarCharts/Jit/Jit.php | 88 +
include/SugarCharts/Jit/JitReports.php | 215 +
include/SugarCharts/Jit/css/base.css | 110 +
include/SugarCharts/Jit/js/Jit/jit.js | 496 +
include/SugarCharts/Jit/js/mySugarCharts.js | 39 +
include/SugarCharts/Jit/js/sugarCharts.js | 76 +
.../Jit/tpls/DashletGenericChartScript.tpl | 51 +
include/SugarCharts/Jit/tpls/chart.tpl | 76 +
include/SugarCharts/JsChart.php | 675 +
include/SugarCharts/SugarChart.php | 841 +
include/SugarCharts/SugarChartFactory.php | 93 +
include/SugarCharts/swf/barChart.swf | Bin 0 -> 11828 bytes
include/SugarCharts/swf/chart.swf | Bin 0 -> 11243 bytes
include/SugarCharts/swf/groupByChart.swf | Bin 0 -> 12327 bytes
.../SugarCharts/swf/horizontalBarChart.swf | Bin 0 -> 11926 bytes
.../swf/horizontalGroupByChart.swf | Bin 0 -> 12451 bytes
include/SugarCharts/swf/lineChart.swf | Bin 0 -> 11780 bytes
include/SugarCharts/swf/pieChart.swf | Bin 0 -> 12168 bytes
.../SugarCharts/swf/stackedGroupByChart.swf | Bin 0 -> 12211 bytes
include/SugarDateTime.php | 584 +
.../SugarDependentDropdown.php | 334 +
.../javascript/SugarDependentDropdown.js | 52 +
.../metadata/dependentDropdown.php | 343 +
.../SugarEmailAddress/SugarEmailAddress.js | 69 +
.../SugarEmailAddress/SugarEmailAddress.php | 990 +
.../templates/forDetailView.tpl | 73 +
.../templates/forDuplicatesView.tpl | 63 +
.../templates/forEditView.tpl | 123 +
.../templates/forWideFormBodyView.tpl | 105 +
.../SugarFields/Fields/Address/DetailView.tpl | 58 +
.../SugarFields/Fields/Address/EditView.tpl | 138 +
.../Fields/Address/SugarFieldAddress.js | 41 +
.../Fields/Address/SugarFieldAddress.php | 105 +
.../Fields/Address/en_us.DetailView.tpl | 63 +
.../Fields/Address/en_us.EditView.tpl | 138 +
.../Assigned_user_name/EditViewFunction.tpl | 38 +
.../Fields/Assigned_user_name/SearchView.tpl | 40 +
.../SugarFieldAssigned_user_name.php | 51 +
.../SugarFields/Fields/Base/DetailView.tpl | 48 +
.../Fields/Base/DetailViewFunction.tpl | 41 +
include/SugarFields/Fields/Base/EditView.tpl | 46 +
.../Fields/Base/EditViewFunction.tpl | 38 +
.../Fields/Base/ImportViewFunction.tpl | 38 +
.../SugarFields/Fields/Base/InlineEdit.tpl | 39 +
.../Fields/Base/InlineEditView.tpl | 39 +
include/SugarFields/Fields/Base/ListView.tpl | 39 +
.../SugarFields/Fields/Base/SearchForm.tpl | 38 +
.../Fields/Base/SugarFieldBase.php | 393 +
.../SugarFields/Fields/Bool/DetailView.tpl | 46 +
include/SugarFields/Fields/Bool/EditView.tpl | 46 +
.../SugarFields/Fields/Bool/InlineEdit.tpl | 45 +
.../Fields/Bool/InlineEditView.tpl | 44 +
include/SugarFields/Fields/Bool/ListView.tpl | 44 +
.../SugarFields/Fields/Bool/SearchView.tpl | 55 +
.../Fields/Bool/SugarFieldBool.php | 113 +
.../Collection/CollectionDetailView.tpl | 61 +
.../Fields/Collection/CollectionEditView.tpl | 98 +
.../Collection/CollectionEditViewRow.tpl | 81 +
.../Fields/Collection/DetailView.tpl | 61 +
.../Fields/Collection/EditView.tpl | 67 +
.../Fields/Collection/SugarFieldCollection.js | 80 +
.../Collection/SugarFieldCollection.php | 222 +
.../Collection/ViewSugarFieldCollection.php | 543 +
.../Collection/view.sugarfieldcollection.php | 43 +
.../Fields/Currency/DetailView.tpl | 43 +
.../SugarFields/Fields/Currency/EditView.tpl | 44 +
.../SugarFields/Fields/Currency/ListView.tpl | 43 +
.../Fields/Currency/SugarFieldCurrency.php | 76 +
.../SugarFields/Fields/Datetime/EditView.tpl | 66 +
.../Fields/Datetime/SugarFieldDatetime.php | 181 +
.../Fields/Datetimecombo/Datetimecombo.js | 51 +
.../Fields/Datetimecombo/EditView.tpl | 118 +
.../Fields/Datetimecombo/RangeSearchForm.tpl | 167 +
.../Fields/Datetimecombo/SearchView.tpl | 111 +
.../Datetimecombo/SugarFieldDatetimecombo.php | 150 +
.../Fields/Download/DetailView.tpl | 46 +
.../Fields/Download/SugarFieldDownload.php | 48 +
.../SugarFields/Fields/Enum/DetailView.tpl | 49 +
.../Fields/Enum/DetailViewFunction.tpl | 41 +
include/SugarFields/Fields/Enum/EditView.tpl | 49 +
.../Fields/Enum/EditViewFunction.tpl | 42 +
.../SugarFields/Fields/Enum/SearchView.tpl | 39 +
.../Fields/Enum/SugarFieldEnum.php | 147 +
.../SugarFields/Fields/File/DetailView.tpl | 51 +
include/SugarFields/Fields/File/EditView.tpl | 221 +
include/SugarFields/Fields/File/ListView.tpl | 45 +
.../SugarFields/Fields/File/SearchView.tpl | 39 +
.../SugarFields/Fields/File/SugarFieldFile.js | 45 +
.../Fields/File/SugarFieldFile.php | 163 +
.../SugarFields/Fields/Float/DetailView.tpl | 43 +
include/SugarFields/Fields/Float/EditView.tpl | 49 +
.../Fields/Float/SugarFieldFloat.php | 85 +
.../Fields/Fullname/DetailView.tpl | 58 +
.../Fields/Fullname/SugarFieldFullname.php | 76 +
.../SugarFields/Fields/Html/DetailView.tpl | 41 +
.../Fields/Html/SugarFieldHtml.php | 73 +
.../SugarFields/Fields/Id/SugarFieldId.php | 58 +
.../SugarFields/Fields/Iframe/DetailView.tpl | 49 +
.../SugarFields/Fields/Iframe/EditView.tpl | 49 +
include/SugarFields/Fields/Int/DetailView.tpl | 48 +
include/SugarFields/Fields/Int/EditView.tpl | 44 +
.../Fields/Int/RangeSearchForm.tpl | 107 +
include/SugarFields/Fields/Int/SearchForm.tpl | 46 +
.../SugarFields/Fields/Int/SugarFieldInt.php | 103 +
.../SugarFields/Fields/Link/DetailView.tpl | 50 +
include/SugarFields/Fields/Link/EditView.tpl | 47 +
include/SugarFields/Fields/Link/ListView.tpl | 39 +
.../Fields/Multienum/DetailView.tpl | 47 +
.../SugarFields/Fields/Multienum/EditView.tpl | 45 +
.../Fields/Multienum/EditViewFunction.tpl | 41 +
.../SugarFields/Fields/Multienum/ListView.tpl | 45 +
.../Fields/Multienum/SearchView.tpl | 38 +
.../Fields/Multienum/SugarFieldMultienum.php | 117 +
.../SugarFields/Fields/Parent/DetailView.tpl | 47 +
.../SugarFields/Fields/Parent/EditView.tpl | 97 +
.../SugarFields/Fields/Parent/SearchView.tpl | 76 +
.../Fields/Parent/SugarFieldParent.php | 169 +
.../SugarFields/Fields/Password/EditView.tpl | 40 +
.../Fields/Password/SugarFieldPassword.php | 56 +
include/SugarFields/Fields/Phone/EditView.tpl | 50 +
.../Fields/Phone/SugarFieldPhone.php | 56 +
.../Fields/Radioenum/DetailView.tpl | 45 +
.../SugarFields/Fields/Radioenum/EditView.tpl | 52 +
.../Fields/Readonly/SugarFieldReadonly.php | 45 +
.../SugarFields/Fields/Relate/DetailView.tpl | 49 +
.../SugarFields/Fields/Relate/EditView.tpl | 76 +
.../SugarFields/Fields/Relate/SearchView.tpl | 50 +
.../Fields/Relate/SugarFieldRelate.php | 368 +
.../Fields/Text/ClassicEditView.tpl | 45 +
.../SugarFields/Fields/Text/DetailView.tpl | 49 +
include/SugarFields/Fields/Text/EditView.tpl | 57 +
.../Fields/Text/SugarFieldText.php | 77 +
include/SugarFields/Fields/URL/DetailView.tpl | 52 +
include/SugarFields/Fields/URL/EditView.tpl | 56 +
include/SugarFields/Fields/URL/ListView.tpl | 45 +
.../Fields/Username/DetailView.tpl | 43 +
.../Fields/Username/SugarFieldUsername.php | 46 +
.../Parsers/DetailViewMetaParser.php | 192 +
.../Parsers/EditViewMetaParser.php | 342 +
include/SugarFields/Parsers/MetaParser.php | 808 +
.../Parsers/QuickCreateMetaParser.php | 266 +
.../Parsers/Rules/AccountsParseRule.php | 68 +
.../Parsers/Rules/ActivitiesParseRule.php | 78 +
.../SugarFields/Parsers/Rules/AddressRule.php | 154 +
.../SugarFields/Parsers/Rules/BaseRule.php | 95 +
.../Parsers/Rules/BugsParseRule.php | 63 +
.../Parsers/Rules/CallsParseRule.php | 69 +
.../Parsers/Rules/CampaignsParseRule.php | 75 +
.../Parsers/Rules/ContactsParseRule.php | 82 +
.../Parsers/Rules/ContractsParseRule.php | 63 +
.../Parsers/Rules/DocumentsParseRule.php | 97 +
.../Parsers/Rules/EmailAddressRule.php | 122 +
.../Parsers/Rules/EmptyRowRule.php | 91 +
.../Parsers/Rules/LeadsParseRule.php | 66 +
.../Parsers/Rules/MeetingsParseRule.php | 65 +
.../Parsers/Rules/NotesParseRule.php | 65 +
.../Parsers/Rules/OpportunitiesParseRule.php | 63 +
.../SugarFields/Parsers/Rules/ParseRules.php | 71 +
.../Parsers/Rules/ProductsParseRule.php | 69 +
.../Parsers/Rules/QuotesParseRule.php | 131 +
.../Parsers/Rules/UndefinedVardefRule.php | 75 +
.../Parsers/Rules/VariableCleanupRule.php | 106 +
.../Rules/VariableSubstitutionRule.php | 137 +
.../Parsers/SearchFormMetaParser.php | 270 +
include/SugarFields/SugarFieldHandler.php | 151 +
include/SugarFolders/SugarFolders.php | 985 +
include/SugarLogger/LoggerManager.php | 208 +
include/SugarLogger/LoggerTemplate.php | 59 +
include/SugarLogger/SugarLogger.php | 231 +
include/SugarOauth.php | 153 +
include/SugarObjects/LanguageManager.php | 262 +
include/SugarObjects/SugarConfig.php | 78 +
include/SugarObjects/SugarRegistry.php | 77 +
include/SugarObjects/SugarSession.php | 101 +
include/SugarObjects/VardefManager.php | 284 +
.../assignable/language/en_us.lang.php | 40 +
.../implements/assignable/vardefs.php | 92 +
.../team_security/language/en_us.lang.php | 40 +
.../implements/team_security/vardefs.php | 75 +
.../SugarObjects/templates/basic/Basic.php | 55 +
.../Dashlets/Dashlet/m-n-Dashlet.meta.php | 52 +
.../basic/Dashlets/Dashlet/m-n-Dashlet.php | 63 +
.../templates/basic/icons/Createbasic.gif | Bin 0 -> 637 bytes
.../templates/basic/icons/basic.gif | Bin 0 -> 654 bytes
.../templates/basic/icons/basic_32.gif | Bin 0 -> 1107 bytes
.../templates/basic/language/en_us.lang.php | 55 +
.../templates/basic/metadata/SearchFields.php | 54 +
.../basic/metadata/dashletviewdefs.php | 60 +
.../basic/metadata/detailviewdefs.php | 73 +
.../templates/basic/metadata/editviewdefs.php | 64 +
.../templates/basic/metadata/listviewdefs.php | 56 +
.../templates/basic/metadata/metafiles.php | 52 +
.../templates/basic/metadata/popupdefs.php | 52 +
.../basic/metadata/quickcreatedefs.php | 60 +
.../templates/basic/metadata/searchdefs.php | 60 +
.../basic/metadata/subpanels/default.php | 71 +
.../SugarObjects/templates/basic/vardefs.php | 195 +
.../templates/company/Company.php | 83 +
.../SugarObjects/templates/company/config.php | 44 +
.../templates/company/icons/Createcompany.gif | Bin 0 -> 624 bytes
.../templates/company/icons/company.gif | Bin 0 -> 642 bytes
.../templates/company/icons/company_32.gif | Bin 0 -> 1146 bytes
.../language/application/en_us.lang.php | 62 +
.../templates/company/language/en_us.lang.php | 136 +
.../company/metadata/SearchFields.php | 84 +
.../company/metadata/dashletviewdefs.php | 59 +
.../company/metadata/detailviewdefs.php | 86 +
.../company/metadata/editviewdefs.php | 98 +
.../company/metadata/listviewdefs.php | 124 +
.../templates/company/metadata/metafiles.php | 52 +
.../templates/company/metadata/popupdefs.php | 65 +
.../company/metadata/quickcreatedefs.php | 74 +
.../templates/company/metadata/searchdefs.php | 78 +
.../company/metadata/subpanels/default.php | 83 +
.../templates/company/vardefs.php | 365 +
include/SugarObjects/templates/file/File.php | 108 +
.../templates/file/controller.php | 71 +
.../templates/file/icons/Createfile.gif | Bin 0 -> 610 bytes
.../templates/file/icons/file.gif | Bin 0 -> 616 bytes
.../templates/file/icons/file_32.gif | Bin 0 -> 1012 bytes
.../file/language/application/en_us.lang.php | 72 +
.../templates/file/language/en_us.lang.php | 123 +
.../templates/file/metadata/SearchFields.php | 66 +
.../file/metadata/dashletviewdefs.php | 60 +
.../file/metadata/detailviewdefs.php | 100 +
.../templates/file/metadata/editviewdefs.php | 101 +
.../templates/file/metadata/listviewdefs.php | 86 +
.../templates/file/metadata/metafiles.php | 53 +
.../file/metadata/quickcreatedefs.php | 100 +
.../templates/file/metadata/searchdefs.php | 65 +
.../file/metadata/subpanels/default.php | 91 +
.../SugarObjects/templates/file/vardefs.php | 158 +
.../templates/file/views/view.edit.php | 63 +
.../SugarObjects/templates/issue/Issue.php | 45 +
.../SugarObjects/templates/issue/config.php | 39 +
.../templates/issue/icons/Createissue.gif | Bin 0 -> 560 bytes
.../templates/issue/icons/issue.gif | Bin 0 -> 574 bytes
.../templates/issue/icons/issue_32.gif | Bin 0 -> 932 bytes
.../issue/language/application/en_us.lang.php | 77 +
.../templates/issue/language/en_us.lang.php | 69 +
.../templates/issue/metadata/SearchFields.php | 65 +
.../issue/metadata/dashletviewdefs.php | 59 +
.../issue/metadata/detailviewdefs.php | 94 +
.../templates/issue/metadata/editviewdefs.php | 87 +
.../templates/issue/metadata/listviewdefs.php | 74 +
.../templates/issue/metadata/metafiles.php | 52 +
.../templates/issue/metadata/popupdefs.php | 53 +
.../issue/metadata/quickcreatedefs.php | 82 +
.../templates/issue/metadata/searchdefs.php | 66 +
.../issue/metadata/subpanels/default.php | 93 +
.../SugarObjects/templates/issue/vardefs.php | 130 +
.../SugarObjects/templates/person/Person.php | 147 +
.../SugarObjects/templates/person/config.php | 39 +
.../templates/person/icons/Createperson.gif | Bin 0 -> 595 bytes
.../templates/person/icons/person.gif | Bin 0 -> 607 bytes
.../templates/person/icons/person_32.gif | Bin 0 -> 989 bytes
.../templates/person/language/en_us.lang.php | 83 +
.../person/metadata/SearchFields.php | 71 +
.../person/metadata/dashletviewdefs.php | 59 +
.../person/metadata/detailviewdefs.php | 135 +
.../person/metadata/editviewdefs.php | 114 +
.../person/metadata/listviewdefs.php | 100 +
.../templates/person/metadata/metafiles.php | 52 +
.../templates/person/metadata/popupdefs.php | 51 +
.../person/metadata/quickcreatedefs.php | 84 +
.../templates/person/metadata/searchdefs.php | 62 +
.../person/metadata/subpanels/default.php | 95 +
.../SugarObjects/templates/person/vardefs.php | 420 +
.../SugarObjects/templates/sale/Chance.php | 55 +
include/SugarObjects/templates/sale/Sale.php | 104 +
.../SugarObjects/templates/sale/config.php | 45 +
.../templates/sale/icons/Createchance.gif | Bin 0 -> 599 bytes
.../templates/sale/icons/Createsale.gif | Bin 0 -> 579 bytes
.../templates/sale/icons/chance.gif | Bin 0 -> 617 bytes
.../templates/sale/icons/chance_32.gif | Bin 0 -> 1180 bytes
.../templates/sale/icons/sale.gif | Bin 0 -> 583 bytes
.../templates/sale/icons/sale_32.gif | Bin 0 -> 834 bytes
.../sale/language/application/en_us.lang.php | 56 +
.../templates/sale/language/en_us.lang.php | 139 +
.../templates/sale/metadata/SearchFields.php | 79 +
.../sale/metadata/dashletviewdefs.php | 60 +
.../sale/metadata/detailviewdefs.php | 68 +
.../templates/sale/metadata/editviewdefs.php | 88 +
.../templates/sale/metadata/listviewdefs.php | 98 +
.../templates/sale/metadata/metafiles.php | 56 +
.../templates/sale/metadata/popupdefs.php | 62 +
.../sale/metadata/quickcreatedefs.php | 83 +
.../templates/sale/metadata/searchdefs.php | 71 +
.../sale/metadata/subpanels/default.php | 100 +
.../SugarObjects/templates/sale/vardefs.php | 189 +
include/SugarPHPMailer.php | 401 +
include/SugarTheme/SugarTheme.php | 1157 +
include/SugarTheme/cssmin.php | 208 +
include/SugarTheme/getImage.php | 99 +
include/SugarTinyMCE.php | 220 +
include/Sugar_Smarty.php | 66 +
include/Sugarpdf/FontManager.php | 430 +
include/Sugarpdf/Sugarpdf.php | 658 +
include/Sugarpdf/SugarpdfFactory.php | 146 +
include/Sugarpdf/SugarpdfHelper.php | 193 +
include/Sugarpdf/sugarpdf/sugarpdf.smarty.php | 108 +
include/Sugarpdf/sugarpdf_config.php | 341 +
include/Sugarpdf/sugarpdf_default.php | 110 +
include/TemplateHandler/TemplateHandler.php | 462 +
include/TimeDate.php | 1809 +
include/VarDefHandler/VarDefHandler.php | 228 +
include/VarDefHandler/listvardefoverride.php | 89 +
include/VarDefHandler/vardef_meta_arrays.php | 317 +
include/connectors/ConnectorFactory.php | 81 +
include/connectors/component.php | 344 +
include/connectors/filters/FilterFactory.php | 81 +
include/connectors/filters/default/filter.php | 56 +
.../formatters/FormatterFactory.php | 96 +
.../formatters/default/company_detail.js | 42 +
.../formatters/default/formatter.php | 149 +
.../formatters/ext/rest/tpls/default.tpl | 37 +
.../formatters/ext/soap/tpls/default.tpl | 84 +
include/connectors/sources/SourceFactory.php | 74 +
include/connectors/sources/default/source.php | 355 +
include/connectors/sources/ext/rest/rest.php | 70 +
include/connectors/sources/ext/soap/soap.php | 88 +
include/connectors/sources/loc/xml.php | 55 +
include/connectors/utils/ConnectorUtils.php | 957 +
include/contextMenus/contextMenu.php | 107 +
.../contextMenus/menuDefs/sugarAccount.php | 73 +
include/contextMenus/menuDefs/sugarObject.php | 45 +
include/contextMenus/menuDefs/sugarPerson.php | 61 +
include/controller/Controller.php | 338 +
include/database/DBHelper.php | 1358 +
include/database/DBManager.php | 1923 +
include/database/DBManagerFactory.php | 149 +
include/database/FreeTDSHelper.php | 180 +
include/database/FreeTDSManager.php | 169 +
include/database/MssqlHelper.php | 777 +
include/database/MssqlManager.php | 1309 +
include/database/MysqlHelper.php | 522 +
include/database/MysqlManager.php | 558 +
include/database/MysqliHelper.php | 55 +
include/database/MysqliManager.php | 316 +
include/database/PearDatabase.php | 133 +
include/database/SqlsrvHelper.php | 323 +
include/database/SqlsrvManager.php | 459 +
include/dir_inc.php | 248 +
include/entryPoint.php | 226 +
include/export_utils.php | 330 +
include/externalAPI/Base/ExternalAPIBase.php | 233 +
.../externalAPI/Base/ExternalAPIPlugin.php | 61 +
.../Base/ExternalOAuthAPIPlugin.php | 59 +
include/externalAPI/Base/OAuthPluginBase.php | 199 +
include/externalAPI/Base/WebDocument.php | 44 +
include/externalAPI/Base/WebFeed.php | 40 +
include/externalAPI/Base/WebMeeting.php | 45 +
include/externalAPI/ExternalAPIFactory.php | 291 +
include/fonts/Courier-Bold.afm | 342 +
include/fonts/Courier-BoldOblique.afm | 342 +
include/fonts/Courier-Oblique.afm | 342 +
include/fonts/Courier.afm | 342 +
include/fonts/Helvetica-Bold.afm | 2827 ++
include/fonts/Helvetica-BoldOblique.afm | 2827 ++
include/fonts/Helvetica-Oblique.afm | 3051 ++
include/fonts/Helvetica.afm | 3051 ++
include/fonts/License.html | 1 +
include/fonts/Times-Bold.afm | 2588 ++
include/fonts/Times-BoldItalic.afm | 2384 ++
include/fonts/Times-Italic.afm | 2667 ++
include/fonts/Times-Roman.afm | 2419 ++
include/formbase.php | 291 +
include/generic/DeleteRelationship.php | 131 +
include/generic/LayoutManager.php | 343 +
include/generic/Save2.php | 284 +
include/generic/SugarWidgets/SugarWidget.php | 92 +
.../generic/SugarWidgets/SugarWidgetField.php | 235 +
.../SugarWidgets/SugarWidgetFieldbool.php | 120 +
.../SugarWidgets/SugarWidgetFieldchar.php | 45 +
.../SugarWidgets/SugarWidgetFieldcurrency.php | 185 +
.../SugarWidgets/SugarWidgetFielddate.php | 434 +
.../SugarWidgetFielddatepicker.php | 65 +
.../SugarWidgets/SugarWidgetFielddatetime.php | 818 +
.../SugarWidgetFielddatetimecombo.php | 123 +
.../SugarWidgets/SugarWidgetFielddecimal.php | 49 +
.../SugarWidgets/SugarWidgetFielddouble.php | 47 +
.../SugarWidgets/SugarWidgetFieldemail.php | 45 +
.../SugarWidgets/SugarWidgetFieldenum.php | 224 +
.../SugarWidgets/SugarWidgetFieldfile.php | 45 +
.../SugarWidgets/SugarWidgetFieldfloat.php | 86 +
.../SugarWidgets/SugarWidgetFieldfullname.php | 52 +
.../SugarWidgets/SugarWidgetFieldid.php | 50 +
.../SugarWidgets/SugarWidgetFieldimage.php | 47 +
.../SugarWidgets/SugarWidgetFieldint.php | 86 +
.../SugarWidgets/SugarWidgetFieldlongtext.php | 46 +
.../SugarWidgetFieldmultienum.php | 92 +
.../SugarWidgets/SugarWidgetFieldname.php | 310 +
.../SugarWidgets/SugarWidgetFieldnum.php | 44 +
.../SugarWidgetFieldparent_type.php | 60 +
.../SugarWidgets/SugarWidgetFieldphone.php | 45 +
.../SugarWidgetFieldradioenum.php | 44 +
.../SugarWidgets/SugarWidgetFieldrelate.php | 78 +
.../SugarWidgetFieldsingleenum.php | 71 +
.../SugarWidgets/SugarWidgetFieldtext.php | 86 +
.../SugarWidgets/SugarWidgetFieldtime.php | 71 +
.../SugarWidgets/SugarWidgetFieldurl.php | 44 +
.../SugarWidgetFielduser_name.php | 51 +
.../SugarWidgets/SugarWidgetFieldvarchar.php | 90 +
.../SugarWidgets/SugarWidgetReportField.php | 353 +
...garWidgetSubPanelActivitiesStatusField.php | 69 +
.../SugarWidgetSubPanelCloseButton.php | 69 +
.../SugarWidgetSubPanelConcat.php | 62 +
.../SugarWidgetSubPanelDetailViewLink.php | 137 +
.../SugarWidgetSubPanelEditButton.php | 69 +
.../SugarWidgetSubPanelEditRoleButton.php | 73 +
.../SugarWidgetSubPanelEmailLink.php | 135 +
.../SugarWidgetSubPanelGetLatestButton.php | 83 +
.../SugarWidgets/SugarWidgetSubPanelIcon.php | 163 +
.../SugarWidgetSubPanelLoadSignedButton.php | 80 +
.../SugarWidgetSubPanelRemoveButton.php | 121 +
...ugarWidgetSubPanelRemoveButtonMeetings.php | 121 +
...ugarWidgetSubPanelRemoveButtonProjects.php | 125 +
...garWidgetSubPanelTopArchiveEmailButton.php | 81 +
.../SugarWidgetSubPanelTopButton.php | 351 +
...ugarWidgetSubPanelTopButtonQuickCreate.php | 192 +
...garWidgetSubPanelTopComposeEmailButton.php | 88 +
...dgetSubPanelTopCreateAccountNameButton.php | 82 +
...ubPanelTopCreateCampaignLogEntryButton.php | 152 +
...rWidgetSubPanelTopCreateLeadNameButton.php | 120 +
...SugarWidgetSubPanelTopCreateNoteButton.php | 161 +
...SugarWidgetSubPanelTopCreateTaskButton.php | 161 +
...garWidgetSubPanelTopScheduleCallButton.php | 160 +
...WidgetSubPanelTopScheduleMeetingButton.php | 165 +
.../SugarWidgetSubPanelTopSelectButton.php | 165 +
...rWidgetSubPanelTopSelectContactsButton.php | 175 +
...ugarWidgetSubPanelTopSelectUsersButton.php | 180 +
.../SugarWidgetSubPanelTopSummaryButton.php | 80 +
include/globalControlLinks.php | 88 +
include/images/1.gif | Bin 0 -> 2603 bytes
include/images/SugarPlanet.swf | Bin 0 -> 444571 bytes
include/images/blank.gif | Bin 0 -> 43 bytes
include/images/cube_bg.gif | Bin 0 -> 4954 bytes
include/images/default_user_feed_picture.png | Bin 0 -> 3821 bytes
include/images/docs.png | Bin 0 -> 1956 bytes
include/images/forums.png | Bin 0 -> 3689 bytes
include/images/install_themes.jpg | Bin 0 -> 115308 bytes
include/images/iphone-listArrow.png | Bin 0 -> 259 bytes
include/images/iphone-toolbar.png | Bin 0 -> 171 bytes
include/images/kb.png | Bin 0 -> 2880 bytes
include/images/options.gif | Bin 0 -> 125 bytes
include/images/options_up.gif | Bin 0 -> 125 bytes
include/images/powered_by_sugarcrm.gif | Bin 0 -> 1242 bytes
include/images/poweredby_sugarcrm.png | Bin 0 -> 4579 bytes
include/images/rss_xml.gif | Bin 0 -> 121 bytes
include/images/seed_chris_id.gif | Bin 0 -> 3037 bytes
include/images/seed_jim_id.gif | Bin 0 -> 2885 bytes
include/images/seed_max_id.gif | Bin 0 -> 3090 bytes
include/images/seed_sally_id.gif | Bin 0 -> 3315 bytes
include/images/seed_sarah_id.gif | Bin 0 -> 3015 bytes
include/images/seed_will_id.gif | Bin 0 -> 3210 bytes
include/images/spacer.png | Bin 0 -> 3596 bytes
include/images/sugar_icon.ico | Bin 0 -> 894 bytes
include/images/sugar_md_open.png | Bin 0 -> 2169 bytes
include/images/sugar_wizard_welcome.jpg | Bin 0 -> 106330 bytes
include/images/sugarcrm_about_logo.gif | Bin 0 -> 2000 bytes
include/images/sugarcrm_copyright_logo.jpg | Bin 0 -> 4860 bytes
include/images/sugarcrm_login.png | Bin 0 -> 1548 bytes
include/images/sugarsales_myarea.png | Bin 0 -> 2846 bytes
include/images/university.png | Bin 0 -> 3933 bytes
include/images/wiki.png | Bin 0 -> 3698 bytes
include/javascript/calendar.js | 58 +
include/javascript/cookie.js | 56 +
include/javascript/dashlets.js | 38 +
include/javascript/getYUIComboFile.php | 97 +
include/javascript/include.js | 18 +
include/javascript/iscroll.js | 66 +
include/javascript/javascript.php | 265 +
include/javascript/jsAlerts.php | 218 +
include/javascript/jsclass_async.js | 68 +
include/javascript/jsclass_base.js | 149 +
include/javascript/menu.js | 85 +
include/javascript/overlibmws.js | 289 +
include/javascript/overlibmws_iframe.js | 93 +
include/javascript/popup_helper.js | 69 +
include/javascript/popup_parent_helper.js | 84 +
include/javascript/quickCompose.js | 22 +
include/javascript/quicksearch.js | 57 +
include/javascript/report_additionals.js | 402 +
include/javascript/sugar_3.js | 611 +
.../sugar_connection_event_listener.js | 37 +
include/javascript/sugar_grp1.js | 849 +
include/javascript/sugar_grp1_yui.js | 7714 ++++
include/javascript/sugar_grp_emails.js | 9985 +++++
include/javascript/sugar_grp_overlib.js | 384 +
include/javascript/sugar_grp_quickcomp.js | 5458 +++
include/javascript/sugar_grp_yui2.js | 31 +
include/javascript/sugar_grp_yui_widgets.css | 55 +
include/javascript/sugar_grp_yui_widgets.js | 173 +
.../javascript/sugarwidgets/SugarYUILoader.js | 36 +
.../sugarwidgets/SugarYUIWidgets.js | 80 +
include/javascript/swfobject.js | 45 +
include/javascript/tiny_mce/langs/en.js | 154 +
include/javascript/tiny_mce/license.txt | 504 +
.../tiny_mce/plugins/advhr/css/advhr.css | 5 +
.../tiny_mce/plugins/advhr/editor_plugin.js | 1 +
.../plugins/advhr/editor_plugin_src.js | 54 +
.../tiny_mce/plugins/advhr/js/rule.js | 43 +
.../tiny_mce/plugins/advhr/langs/en_dlg.js | 5 +
.../tiny_mce/plugins/advhr/rule.htm | 63 +
.../plugins/advimage/css/advimage.css | 13 +
.../plugins/advimage/editor_plugin.js | 1 +
.../plugins/advimage/editor_plugin_src.js | 47 +
.../tiny_mce/plugins/advimage/image.htm | 238 +
.../tiny_mce/plugins/advimage/img/sample.gif | Bin 0 -> 1624 bytes
.../tiny_mce/plugins/advimage/js/image.js | 441 +
.../tiny_mce/plugins/advimage/langs/en_dlg.js | 43 +
.../tiny_mce/plugins/advlink/css/advlink.css | 8 +
.../tiny_mce/plugins/advlink/editor_plugin.js | 1 +
.../plugins/advlink/editor_plugin_src.js | 58 +
.../tiny_mce/plugins/advlink/js/advlink.js | 527 +
.../tiny_mce/plugins/advlink/langs/en_dlg.js | 52 +
.../tiny_mce/plugins/advlink/link.htm | 339 +
.../plugins/autosave/editor_plugin.js | 1 +
.../plugins/autosave/editor_plugin_src.js | 51 +
.../tiny_mce/plugins/bbcode/editor_plugin.js | 1 +
.../plugins/bbcode/editor_plugin_src.js | 117 +
.../plugins/compat2x/editor_plugin.js | 1 +
.../plugins/compat2x/editor_plugin_src.js | 616 +
.../plugins/contextmenu/editor_plugin.js | 1 +
.../plugins/contextmenu/editor_plugin_src.js | 95 +
.../plugins/directionality/editor_plugin.js | 1 +
.../directionality/editor_plugin_src.js | 79 +
.../plugins/emotions/editor_plugin.js | 1 +
.../plugins/emotions/editor_plugin_src.js | 40 +
.../tiny_mce/plugins/emotions/emotions.htm | 41 +
.../plugins/emotions/img/smiley-cool.gif | Bin 0 -> 354 bytes
.../plugins/emotions/img/smiley-cry.gif | Bin 0 -> 329 bytes
.../emotions/img/smiley-embarassed.gif | Bin 0 -> 331 bytes
.../emotions/img/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes
.../plugins/emotions/img/smiley-frown.gif | Bin 0 -> 340 bytes
.../plugins/emotions/img/smiley-innocent.gif | Bin 0 -> 336 bytes
.../plugins/emotions/img/smiley-kiss.gif | Bin 0 -> 338 bytes
.../plugins/emotions/img/smiley-laughing.gif | Bin 0 -> 344 bytes
.../emotions/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes
.../plugins/emotions/img/smiley-sealed.gif | Bin 0 -> 325 bytes
.../plugins/emotions/img/smiley-smile.gif | Bin 0 -> 345 bytes
.../plugins/emotions/img/smiley-surprised.gif | Bin 0 -> 342 bytes
.../emotions/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes
.../plugins/emotions/img/smiley-undecided.gif | Bin 0 -> 337 bytes
.../plugins/emotions/img/smiley-wink.gif | Bin 0 -> 351 bytes
.../plugins/emotions/img/smiley-yell.gif | Bin 0 -> 336 bytes
.../tiny_mce/plugins/emotions/js/emotions.js | 22 +
.../tiny_mce/plugins/emotions/langs/en_dlg.js | 20 +
.../tiny_mce/plugins/example/dialog.htm | 27 +
.../tiny_mce/plugins/example/editor_plugin.js | 1 +
.../plugins/example/editor_plugin_src.js | 81 +
.../tiny_mce/plugins/example/img/example.gif | Bin 0 -> 87 bytes
.../tiny_mce/plugins/example/js/dialog.js | 19 +
.../tiny_mce/plugins/example/langs/en.js | 3 +
.../tiny_mce/plugins/example/langs/en_dlg.js | 3 +
.../plugins/fullpage/css/fullpage.css | 182 +
.../plugins/fullpage/editor_plugin.js | 1 +
.../plugins/fullpage/editor_plugin_src.js | 142 +
.../tiny_mce/plugins/fullpage/fullpage.htm | 577 +
.../tiny_mce/plugins/fullpage/js/fullpage.js | 461 +
.../tiny_mce/plugins/fullpage/langs/en_dlg.js | 85 +
.../plugins/fullscreen/editor_plugin.js | 1 +
.../plugins/fullscreen/editor_plugin_src.js | 145 +
.../plugins/fullscreen/fullscreen.htm | 111 +
.../tiny_mce/plugins/iespell/editor_plugin.js | 1 +
.../plugins/iespell/editor_plugin_src.js | 51 +
.../plugins/inlinepopups/editor_plugin.js | 1 +
.../plugins/inlinepopups/editor_plugin_src.js | 632 +
.../skins/clearlooks2/img/alert.gif | Bin 0 -> 818 bytes
.../skins/clearlooks2/img/button.gif | Bin 0 -> 280 bytes
.../skins/clearlooks2/img/buttons.gif | Bin 0 -> 1195 bytes
.../skins/clearlooks2/img/confirm.gif | Bin 0 -> 915 bytes
.../skins/clearlooks2/img/corners.gif | Bin 0 -> 911 bytes
.../skins/clearlooks2/img/horizontal.gif | Bin 0 -> 769 bytes
.../skins/clearlooks2/img/vertical.gif | Bin 0 -> 92 bytes
.../inlinepopups/skins/clearlooks2/window.css | 90 +
.../plugins/inlinepopups/template.htm | 387 +
.../plugins/insertdatetime/editor_plugin.js | 1 +
.../insertdatetime/editor_plugin_src.js | 80 +
.../tiny_mce/plugins/layer/editor_plugin.js | 1 +
.../plugins/layer/editor_plugin_src.js | 209 +
.../tiny_mce/plugins/media/css/content.css | 6 +
.../tiny_mce/plugins/media/css/media.css | 16 +
.../tiny_mce/plugins/media/editor_plugin.js | 1 +
.../plugins/media/editor_plugin_src.js | 400 +
.../tiny_mce/plugins/media/img/flash.gif | Bin 0 -> 241 bytes
.../tiny_mce/plugins/media/img/flv_player.swf | Bin 0 -> 11668 bytes
.../tiny_mce/plugins/media/img/quicktime.gif | Bin 0 -> 303 bytes
.../tiny_mce/plugins/media/img/realmedia.gif | Bin 0 -> 439 bytes
.../tiny_mce/plugins/media/img/shockwave.gif | Bin 0 -> 387 bytes
.../tiny_mce/plugins/media/img/trans.gif | Bin 0 -> 43 bytes
.../plugins/media/img/windowsmedia.gif | Bin 0 -> 415 bytes
.../tiny_mce/plugins/media/js/embed.js | 73 +
.../tiny_mce/plugins/media/js/media.js | 630 +
.../tiny_mce/plugins/media/langs/en_dlg.js | 103 +
.../tiny_mce/plugins/media/media.htm | 824 +
.../plugins/nonbreaking/editor_plugin.js | 1 +
.../plugins/nonbreaking/editor_plugin_src.js | 50 +
.../plugins/noneditable/editor_plugin.js | 1 +
.../plugins/noneditable/editor_plugin_src.js | 87 +
.../plugins/pagebreak/css/content.css | 1 +
.../plugins/pagebreak/editor_plugin.js | 1 +
.../plugins/pagebreak/editor_plugin_src.js | 74 +
.../plugins/pagebreak/img/pagebreak.gif | Bin 0 -> 325 bytes
.../tiny_mce/plugins/pagebreak/img/trans.gif | Bin 0 -> 43 bytes
.../tiny_mce/plugins/paste/blank.htm | 22 +
.../tiny_mce/plugins/paste/css/blank.css | 14 +
.../tiny_mce/plugins/paste/css/pasteword.css | 3 +
.../tiny_mce/plugins/paste/editor_plugin.js | 1 +
.../plugins/paste/editor_plugin_src.js | 394 +
.../tiny_mce/plugins/paste/js/pastetext.js | 42 +
.../tiny_mce/plugins/paste/js/pasteword.js | 56 +
.../tiny_mce/plugins/paste/langs/en_dlg.js | 5 +
.../tiny_mce/plugins/paste/pastetext.htm | 34 +
.../tiny_mce/plugins/paste/pasteword.htm | 29 +
.../tiny_mce/plugins/preview/editor_plugin.js | 1 +
.../plugins/preview/editor_plugin_src.js | 50 +
.../tiny_mce/plugins/preview/example.html | 28 +
.../plugins/preview/jscripts/embed.js | 73 +
.../tiny_mce/plugins/preview/preview.html | 19 +
.../tiny_mce/plugins/print/editor_plugin.js | 1 +
.../plugins/print/editor_plugin_src.js | 31 +
.../tiny_mce/plugins/safari/blank.htm | 1 +
.../tiny_mce/plugins/safari/editor_plugin.js | 1 +
.../plugins/safari/editor_plugin_src.js | 514 +
.../tiny_mce/plugins/save/editor_plugin.js | 1 +
.../plugins/save/editor_plugin_src.js | 98 +
.../searchreplace/css/searchreplace.css | 6 +
.../plugins/searchreplace/editor_plugin.js | 1 +
.../searchreplace/editor_plugin_src.js | 54 +
.../plugins/searchreplace/js/searchreplace.js | 126 +
.../plugins/searchreplace/langs/en_dlg.js | 16 +
.../plugins/searchreplace/searchreplace.htm | 105 +
.../plugins/spellchecker/css/content.css | 1 +
.../plugins/spellchecker/editor_plugin.js | 1 +
.../plugins/spellchecker/editor_plugin_src.js | 338 +
.../plugins/spellchecker/img/wline.gif | Bin 0 -> 46 bytes
.../tiny_mce/plugins/style/css/props.css | 13 +
.../tiny_mce/plugins/style/editor_plugin.js | 1 +
.../plugins/style/editor_plugin_src.js | 52 +
.../tiny_mce/plugins/style/js/props.js | 641 +
.../tiny_mce/plugins/style/langs/en_dlg.js | 63 +
.../tiny_mce/plugins/style/props.htm | 731 +
.../tiny_mce/plugins/table/cell.htm | 184 +
.../tiny_mce/plugins/table/css/cell.css | 17 +
.../tiny_mce/plugins/table/css/row.css | 25 +
.../tiny_mce/plugins/table/css/table.css | 13 +
.../tiny_mce/plugins/table/editor_plugin.js | 1 +
.../plugins/table/editor_plugin_src.js | 1136 +
.../tiny_mce/plugins/table/js/cell.js | 269 +
.../tiny_mce/plugins/table/js/merge_cells.js | 29 +
.../tiny_mce/plugins/table/js/row.js | 212 +
.../tiny_mce/plugins/table/js/table.js | 413 +
.../tiny_mce/plugins/table/langs/en_dlg.js | 74 +
.../tiny_mce/plugins/table/merge_cells.htm | 38 +
.../javascript/tiny_mce/plugins/table/row.htm | 161 +
.../tiny_mce/plugins/table/table.htm | 193 +
.../tiny_mce/plugins/template/blank.htm | 12 +
.../plugins/template/css/template.css | 23 +
.../plugins/template/editor_plugin.js | 1 +
.../plugins/template/editor_plugin_src.js | 156 +
.../tiny_mce/plugins/template/js/template.js | 106 +
.../tiny_mce/plugins/template/langs/en_dlg.js | 15 +
.../tiny_mce/plugins/template/template.htm | 39 +
.../plugins/visualchars/editor_plugin.js | 1 +
.../plugins/visualchars/editor_plugin_src.js | 73 +
.../tiny_mce/plugins/xhtmlxtras/abbr.htm | 149 +
.../tiny_mce/plugins/xhtmlxtras/acronym.htm | 149 +
.../plugins/xhtmlxtras/attributes.htm | 154 +
.../tiny_mce/plugins/xhtmlxtras/cite.htm | 149 +
.../plugins/xhtmlxtras/css/attributes.css | 11 +
.../tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 +
.../tiny_mce/plugins/xhtmlxtras/del.htm | 170 +
.../plugins/xhtmlxtras/editor_plugin.js | 1 +
.../plugins/xhtmlxtras/editor_plugin_src.js | 136 +
.../tiny_mce/plugins/xhtmlxtras/ins.htm | 170 +
.../tiny_mce/plugins/xhtmlxtras/js/abbr.js | 25 +
.../tiny_mce/plugins/xhtmlxtras/js/acronym.js | 25 +
.../plugins/xhtmlxtras/js/attributes.js | 123 +
.../tiny_mce/plugins/xhtmlxtras/js/cite.js | 25 +
.../tiny_mce/plugins/xhtmlxtras/js/del.js | 60 +
.../plugins/xhtmlxtras/js/element_common.js | 231 +
.../tiny_mce/plugins/xhtmlxtras/js/ins.js | 59 +
.../plugins/xhtmlxtras/langs/en_dlg.js | 32 +
.../tiny_mce/themes/advanced/about.htm | 56 +
.../tiny_mce/themes/advanced/anchor.htm | 32 +
.../tiny_mce/themes/advanced/charmap.htm | 54 +
.../tiny_mce/themes/advanced/color_picker.htm | 76 +
.../themes/advanced/editor_template.js | 1 +
.../themes/advanced/editor_template_src.js | 1153 +
.../tiny_mce/themes/advanced/image.htm | 86 +
.../themes/advanced/img/colorpicker.jpg | Bin 0 -> 3189 bytes
.../tiny_mce/themes/advanced/img/icons.gif | Bin 0 -> 11505 bytes
.../tiny_mce/themes/advanced/js/about.js | 72 +
.../tiny_mce/themes/advanced/js/anchor.js | 37 +
.../tiny_mce/themes/advanced/js/charmap.js | 325 +
.../themes/advanced/js/color_picker.js | 253 +
.../tiny_mce/themes/advanced/js/image.js | 245 +
.../tiny_mce/themes/advanced/js/link.js | 155 +
.../themes/advanced/js/source_editor.js | 62 +
.../tiny_mce/themes/advanced/langs/en.js | 62 +
.../tiny_mce/themes/advanced/langs/en_dlg.js | 51 +
.../tiny_mce/themes/advanced/link.htm | 64 +
.../themes/advanced/skins/default/content.css | 32 +
.../themes/advanced/skins/default/dialog.css | 114 +
.../advanced/skins/default/img/buttons.png | Bin 0 -> 3274 bytes
.../advanced/skins/default/img/items.gif | Bin 0 -> 70 bytes
.../advanced/skins/default/img/menu_arrow.gif | Bin 0 -> 68 bytes
.../advanced/skins/default/img/menu_check.gif | Bin 0 -> 70 bytes
.../advanced/skins/default/img/progress.gif | Bin 0 -> 1787 bytes
.../advanced/skins/default/img/tabs.gif | Bin 0 -> 1326 bytes
.../themes/advanced/skins/default/ui.css | 214 +
.../themes/advanced/skins/o2k7/content.css | 32 +
.../themes/advanced/skins/o2k7/dialog.css | 113 +
.../advanced/skins/o2k7/img/button_bg.png | Bin 0 -> 5859 bytes
.../skins/o2k7/img/button_bg_black.png | Bin 0 -> 3736 bytes
.../skins/o2k7/img/button_bg_silver.png | Bin 0 -> 5358 bytes
.../themes/advanced/skins/o2k7/ui.css | 215 +
.../themes/advanced/skins/o2k7/ui_black.css | 8 +
.../themes/advanced/skins/o2k7/ui_silver.css | 5 +
.../themes/advanced/source_editor.htm | 32 +
.../tiny_mce/themes/simple/editor_template.js | 1 +
.../themes/simple/editor_template_src.js | 85 +
.../tiny_mce/themes/simple/img/icons.gif | Bin 0 -> 1440 bytes
.../tiny_mce/themes/simple/langs/en.js | 11 +
.../themes/simple/skins/default/content.css | 25 +
.../themes/simple/skins/default/ui.css | 32 +
.../themes/simple/skins/o2k7/content.css | 17 +
.../simple/skins/o2k7/img/button_bg.png | Bin 0 -> 5102 bytes
.../tiny_mce/themes/simple/skins/o2k7/ui.css | 35 +
include/javascript/tiny_mce/tiny_mce.js | 1 +
include/javascript/tiny_mce/tiny_mce_popup.js | 294 +
include/javascript/tiny_mce/tiny_mce_src.js | 11101 ++++++
.../tiny_mce/utils/editable_selects.js | 69 +
.../javascript/tiny_mce/utils/form_utils.js | 199 +
include/javascript/tiny_mce/utils/mctabs.js | 76 +
include/javascript/tiny_mce/utils/validate.js | 219 +
include/javascript/yui/LICENSE.txt | 10 +
include/javascript/yui/README | 338 +
.../yui/build/animation/animation-min.js | 23 +
.../yui/build/animation/animation.js | 1392 +
.../build/assets/skins/sam/ajax-loader.gif | Bin 0 -> 3208 bytes
.../yui/build/assets/skins/sam/asc.gif | Bin 0 -> 177 bytes
.../build/assets/skins/sam/autocomplete.css | 7 +
.../yui/build/assets/skins/sam/back-h.png | Bin 0 -> 334 bytes
.../yui/build/assets/skins/sam/back-v.png | Bin 0 -> 338 bytes
.../yui/build/assets/skins/sam/bar-h.png | Bin 0 -> 365 bytes
.../yui/build/assets/skins/sam/bar-v.png | Bin 0 -> 387 bytes
.../yui/build/assets/skins/sam/bg-h.gif | Bin 0 -> 212 bytes
.../yui/build/assets/skins/sam/bg-v.gif | Bin 0 -> 481 bytes
.../yui/build/assets/skins/sam/blankimage.png | Bin 0 -> 2314 bytes
.../yui/build/assets/skins/sam/button.css | 7 +
.../yui/build/assets/skins/sam/calendar.css | 8 +
.../yui/build/assets/skins/sam/carousel.css | 7 +
.../yui/build/assets/skins/sam/check0.gif | Bin 0 -> 608 bytes
.../yui/build/assets/skins/sam/check1.gif | Bin 0 -> 622 bytes
.../yui/build/assets/skins/sam/check2.gif | Bin 0 -> 609 bytes
.../build/assets/skins/sam/colorpicker.css | 7 +
.../yui/build/assets/skins/sam/container.css | 7 +
.../yui/build/assets/skins/sam/datatable.css | 8 +
.../yui/build/assets/skins/sam/desc.gif | Bin 0 -> 177 bytes
.../build/assets/skins/sam/dt-arrow-dn.png | Bin 0 -> 116 bytes
.../build/assets/skins/sam/dt-arrow-up.png | Bin 0 -> 116 bytes
.../build/assets/skins/sam/editor-knob.gif | Bin 0 -> 138 bytes
.../assets/skins/sam/editor-sprite-active.gif | Bin 0 -> 5614 bytes
.../build/assets/skins/sam/editor-sprite.gif | Bin 0 -> 5690 bytes
.../yui/build/assets/skins/sam/editor.css | 10 +
.../assets/skins/sam/header_background.png | Bin 0 -> 158 bytes
.../yui/build/assets/skins/sam/hue_bg.png | Bin 0 -> 1120 bytes
.../build/assets/skins/sam/imagecropper.css | 7 +
.../yui/build/assets/skins/sam/layout.css | 7 +
.../build/assets/skins/sam/layout_sprite.png | Bin 0 -> 1409 bytes
.../yui/build/assets/skins/sam/loading.gif | Bin 0 -> 2673 bytes
.../yui/build/assets/skins/sam/logger.css | 7 +
.../skins/sam/menu-button-arrow-disabled.png | Bin 0 -> 173 bytes
.../assets/skins/sam/menu-button-arrow.png | Bin 0 -> 173 bytes
.../yui/build/assets/skins/sam/menu.css | 7 +
.../sam/menubaritem_submenuindicator.png | Bin 0 -> 3618 bytes
.../menubaritem_submenuindicator_disabled.png | Bin 0 -> 3618 bytes
.../assets/skins/sam/menuitem_checkbox.png | Bin 0 -> 3625 bytes
.../skins/sam/menuitem_checkbox_disabled.png | Bin 0 -> 3625 bytes
.../skins/sam/menuitem_submenuindicator.png | Bin 0 -> 3617 bytes
.../menuitem_submenuindicator_disabled.png | Bin 0 -> 3617 bytes
.../yui/build/assets/skins/sam/paginator.css | 7 +
.../build/assets/skins/sam/picker_mask.png | Bin 0 -> 12174 bytes
.../build/assets/skins/sam/profilerviewer.css | 7 +
.../build/assets/skins/sam/progressbar.css | 7 +
.../yui/build/assets/skins/sam/resize.css | 7 +
.../build/assets/skins/sam/simpleeditor.css | 10 +
.../yui/build/assets/skins/sam/skin.css | 36 +
.../yui/build/assets/skins/sam/slider.css | 7 +
.../skins/sam/split-button-arrow-active.png | Bin 0 -> 280 bytes
.../skins/sam/split-button-arrow-disabled.png | Bin 0 -> 185 bytes
.../skins/sam/split-button-arrow-focus.png | Bin 0 -> 185 bytes
.../skins/sam/split-button-arrow-hover.png | Bin 0 -> 185 bytes
.../assets/skins/sam/split-button-arrow.png | Bin 0 -> 185 bytes
.../yui/build/assets/skins/sam/sprite.png | Bin 0 -> 3745 bytes
.../yui/build/assets/skins/sam/sprite.psd | Bin 0 -> 118162 bytes
.../yui/build/assets/skins/sam/tabview.css | 8 +
.../assets/skins/sam/treeview-loading.gif | Bin 0 -> 2673 bytes
.../assets/skins/sam/treeview-sprite.gif | Bin 0 -> 4326 bytes
.../yui/build/assets/skins/sam/treeview.css | 7 +
.../yui/build/assets/skins/sam/wait.gif | Bin 0 -> 1100 bytes
.../yui/build/assets/skins/sam/yuitest.css | 7 +
.../autocomplete/assets/autocomplete-core.css | 7 +
.../assets/skins/sam/autocomplete-skin.css | 57 +
.../assets/skins/sam/autocomplete.css | 7 +
.../build/autocomplete/autocomplete-min.js | 12 +
.../yui/build/autocomplete/autocomplete.js | 2966 ++
.../javascript/yui/build/base/base-min.css | 7 +
include/javascript/yui/build/base/base.css | 131 +
.../yui/build/button/assets/button-core.css | 44 +
.../button/assets/skins/sam/button-skin.css | 219 +
.../build/button/assets/skins/sam/button.css | 7 +
.../skins/sam/menu-button-arrow-disabled.png | Bin 0 -> 173 bytes
.../assets/skins/sam/menu-button-arrow.png | Bin 0 -> 173 bytes
.../skins/sam/split-button-arrow-active.png | Bin 0 -> 280 bytes
.../skins/sam/split-button-arrow-disabled.png | Bin 0 -> 185 bytes
.../skins/sam/split-button-arrow-focus.png | Bin 0 -> 185 bytes
.../skins/sam/split-button-arrow-hover.png | Bin 0 -> 185 bytes
.../assets/skins/sam/split-button-arrow.png | Bin 0 -> 185 bytes
.../javascript/yui/build/button/button-min.js | 11 +
include/javascript/yui/build/button/button.js | 4633 +++
.../build/calendar/assets/calendar-core.css | 132 +
.../yui/build/calendar/assets/calendar.css | 319 +
.../yui/build/calendar/assets/calgrad.png | Bin 0 -> 497 bytes
.../yui/build/calendar/assets/callt.gif | Bin 0 -> 93 bytes
.../yui/build/calendar/assets/calrt.gif | Bin 0 -> 94 bytes
.../yui/build/calendar/assets/calx.gif | Bin 0 -> 88 bytes
.../assets/skins/sam/calendar-skin.css | 362 +
.../calendar/assets/skins/sam/calendar.css | 8 +
.../yui/build/calendar/calendar-min.js | 18 +
.../javascript/yui/build/calendar/calendar.js | 7294 ++++
.../yui/build/carousel/assets/ajax-loader.gif | Bin 0 -> 3208 bytes
.../build/carousel/assets/carousel-core.css | 88 +
.../carousel/assets/skins/sam/ajax-loader.gif | Bin 0 -> 3208 bytes
.../assets/skins/sam/carousel-skin.css | 142 +
.../carousel/assets/skins/sam/carousel.css | 7 +
.../yui/build/carousel/carousel-min.js | 12 +
.../javascript/yui/build/carousel/carousel.js | 4349 +++
.../yui/build/charts/assets/charts.swf | Bin 0 -> 81768 bytes
.../javascript/yui/build/charts/charts-min.js | 9 +
include/javascript/yui/build/charts/charts.js | 2060 ++
.../colorpicker/assets/colorpicker-core.css | 6 +
.../build/colorpicker/assets/hue_thumb.png | Bin 0 -> 195 bytes
.../build/colorpicker/assets/picker_mask.png | Bin 0 -> 12174 bytes
.../build/colorpicker/assets/picker_thumb.png | Bin 0 -> 192 bytes
.../assets/skins/sam/colorpicker-skin.css | 105 +
.../assets/skins/sam/colorpicker.css | 7 +
.../colorpicker/assets/skins/sam/hue_bg.png | Bin 0 -> 1120 bytes
.../assets/skins/sam/picker_mask.png | Bin 0 -> 12174 bytes
.../yui/build/colorpicker/colorpicker-min.js | 9 +
.../yui/build/colorpicker/colorpicker.js | 1763 +
.../yui/build/connection/connection-min.js | 9 +
.../yui/build/connection/connection.js | 1546 +
.../yui/build/connection/connection.swf | Bin 0 -> 2423 bytes
.../build/connection/connection_core-debug.js | 980 +
.../build/connection/connection_core-min.js | 8 +
.../yui/build/connection/connection_core.js | 957 +
.../yui/build/container/assets/alrt16_1.gif | Bin 0 -> 971 bytes
.../yui/build/container/assets/blck16_1.gif | Bin 0 -> 591 bytes
.../yui/build/container/assets/close12_1.gif | Bin 0 -> 85 bytes
.../build/container/assets/container-core.css | 176 +
.../yui/build/container/assets/container.css | 324 +
.../yui/build/container/assets/hlp16_1.gif | Bin 0 -> 928 bytes
.../yui/build/container/assets/info16_1.gif | Bin 0 -> 601 bytes
.../assets/skins/sam/container-skin.css | 242 +
.../container/assets/skins/sam/container.css | 7 +
.../yui/build/container/assets/tip16_1.gif | Bin 0 -> 552 bytes
.../yui/build/container/assets/warn16_1.gif | Bin 0 -> 580 bytes
.../yui/build/container/container-min.js | 19 +
.../yui/build/container/container.js | 9052 +++++
.../yui/build/container/container_core-min.js | 14 +
.../javascript/yui/build/cookie/cookie-min.js | 7 +
include/javascript/yui/build/cookie/cookie.js | 482 +
.../yui/build/datasource/datasource-min.js | 12 +
.../yui/build/datasource/datasource.js | 2996 ++
.../build/datatable/assets/datatable-core.css | 93 +
.../yui/build/datatable/assets/datatable.css | 49 +
.../assets/skins/sam/datatable-skin.css | 240 +
.../datatable/assets/skins/sam/datatable.css | 8 +
.../assets/skins/sam/dt-arrow-dn.png | Bin 0 -> 116 bytes
.../assets/skins/sam/dt-arrow-up.png | Bin 0 -> 116 bytes
.../yui/build/datatable/datatable-min.js | 29 +
.../yui/build/datatable/datatable.js | 17122 +++++++++
.../yui/build/datemath/datemath-debug.js | 408 +
.../yui/build/datemath/datemath-min.js | 7 +
.../javascript/yui/build/datemath/datemath.js | 408 +
include/javascript/yui/build/dom/dom-min.js | 9 +
include/javascript/yui/build/dom/dom.js | 1832 +
.../yui/build/dragdrop/dragdrop-min.js | 10 +
.../javascript/yui/build/dragdrop/dragdrop.js | 3601 ++
.../yui/build/editor/assets/editor-core.css | 602 +
.../build/editor/assets/simpleeditor-core.css | 602 +
.../editor/assets/skins/sam/blankimage.png | Bin 0 -> 2314 bytes
.../editor/assets/skins/sam/editor-knob.gif | Bin 0 -> 138 bytes
.../editor/assets/skins/sam/editor-skin.css | 711 +
.../assets/skins/sam/editor-sprite-active.gif | Bin 0 -> 5614 bytes
.../editor/assets/skins/sam/editor-sprite.gif | Bin 0 -> 5690 bytes
.../build/editor/assets/skins/sam/editor.css | 10 +
.../assets/skins/sam/simpleeditor-skin.css | 711 +
.../editor/assets/skins/sam/simpleeditor.css | 10 +
.../javascript/yui/build/editor/editor-min.js | 30 +
include/javascript/yui/build/editor/editor.js | 9447 +++++
.../yui/build/editor/simpleeditor-min.js | 24 +
.../yui/build/editor/simpleeditor.js | 7406 ++++
.../element-delegate-debug.js | 141 +
.../element-delegate/element-delegate-min.js | 7 +
.../element-delegate/element-delegate.js | 138 +
.../yui/build/element/element-min.js | 8 +
.../javascript/yui/build/element/element.js | 1090 +
.../event-delegate/event-delegate-debug.js | 283 +
.../event-delegate/event-delegate-min.js | 7 +
.../build/event-delegate/event-delegate.js | 281 +
.../event-mouseenter-debug.js | 219 +
.../event-mouseenter/event-mouseenter-min.js | 7 +
.../event-mouseenter/event-mouseenter.js | 219 +
.../event-simulate/event-simulate-debug.js | 622 +
.../event-simulate/event-simulate-min.js | 7 +
.../build/event-simulate/event-simulate.js | 622 +
.../javascript/yui/build/event/event-min.js | 11 +
include/javascript/yui/build/event/event.js | 2500 ++
.../javascript/yui/build/fonts/fonts-min.css | 7 +
include/javascript/yui/build/fonts/fonts.css | 56 +
include/javascript/yui/build/get/get-min.js | 7 +
include/javascript/yui/build/get/get.js | 755 +
.../javascript/yui/build/grids/grids-min.css | 7 +
include/javascript/yui/build/grids/grids.css | 467 +
.../yui/build/history/assets/blank.html | 1 +
.../yui/build/history/history-min.js | 7 +
.../javascript/yui/build/history/history.js | 803 +
.../imagecropper/assets/imagecropper-core.css | 33 +
.../assets/skins/sam/imagecropper-skin.css | 16 +
.../assets/skins/sam/imagecropper.css | 7 +
.../build/imagecropper/imagecropper-min.js | 8 +
.../yui/build/imagecropper/imagecropper.js | 889 +
.../yui/build/imageloader/imageloader-min.js | 7 +
.../yui/build/imageloader/imageloader.js | 481 +
include/javascript/yui/build/json/json-min.js | 7 +
include/javascript/yui/build/json/json.js | 538 +
.../yui/build/layout/assets/layout-core.css | 158 +
.../layout/assets/skins/sam/layout-skin.css | 207 +
.../build/layout/assets/skins/sam/layout.css | 7 +
.../layout/assets/skins/sam/layout_sprite.png | Bin 0 -> 1409 bytes
.../javascript/yui/build/layout/layout-min.js | 11 +
include/javascript/yui/build/layout/layout.js | 2290 ++
.../yui/build/logger/assets/logger-core.css | 7 +
.../yui/build/logger/assets/logger.css | 57 +
.../logger/assets/skins/sam/logger-skin.css | 55 +
.../build/logger/assets/skins/sam/logger.css | 7 +
.../javascript/yui/build/logger/logger-min.js | 9 +
include/javascript/yui/build/logger/logger.js | 2104 ++
.../yui/build/menu/assets/menu-core.css | 242 +
.../javascript/yui/build/menu/assets/menu.css | 503 +
.../yui/build/menu/assets/menu_down_arrow.png | Bin 0 -> 3624 bytes
.../menu/assets/menu_down_arrow_disabled.png | Bin 0 -> 3621 bytes
.../yui/build/menu/assets/menu_up_arrow.png | Bin 0 -> 936 bytes
.../menu/assets/menu_up_arrow_disabled.png | Bin 0 -> 936 bytes
.../assets/menubaritem_submenuindicator.png | Bin 0 -> 3623 bytes
.../menubaritem_submenuindicator_disabled.png | Bin 0 -> 3623 bytes
.../menubaritem_submenuindicator_selected.png | Bin 0 -> 3623 bytes
.../build/menu/assets/menuitem_checkbox.png | Bin 0 -> 956 bytes
.../assets/menuitem_checkbox_disabled.png | Bin 0 -> 956 bytes
.../assets/menuitem_checkbox_selected.png | Bin 0 -> 956 bytes
.../menu/assets/menuitem_submenuindicator.png | Bin 0 -> 942 bytes
.../menuitem_submenuindicator_disabled.png | Bin 0 -> 942 bytes
.../menuitem_submenuindicator_selected.png | Bin 0 -> 942 bytes
.../build/menu/assets/skins/sam/menu-skin.css | 339 +
.../yui/build/menu/assets/skins/sam/menu.css | 7 +
.../sam/menubaritem_submenuindicator.png | Bin 0 -> 3618 bytes
.../menubaritem_submenuindicator_disabled.png | Bin 0 -> 3618 bytes
.../assets/skins/sam/menuitem_checkbox.png | Bin 0 -> 3625 bytes
.../skins/sam/menuitem_checkbox_disabled.png | Bin 0 -> 3625 bytes
.../skins/sam/menuitem_submenuindicator.png | Bin 0 -> 3617 bytes
.../menuitem_submenuindicator_disabled.png | Bin 0 -> 3617 bytes
include/javascript/yui/build/menu/menu-min.js | 16 +
include/javascript/yui/build/menu/menu.js | 9823 +++++
.../build/paginator/assets/paginator-core.css | 6 +
.../assets/skins/sam/paginator-skin.css | 78 +
.../paginator/assets/skins/sam/paginator.css | 7 +
.../yui/build/paginator/paginator-min.js | 10 +
.../yui/build/paginator/paginator.js | 2393 ++
.../yui/build/profiler/profiler-min.js | 7 +
.../javascript/yui/build/profiler/profiler.js | 557 +
.../assets/profilerviewer-core.css | 6 +
.../profilerviewer/assets/skins/sam/asc.gif | Bin 0 -> 177 bytes
.../profilerviewer/assets/skins/sam/desc.gif | Bin 0 -> 177 bytes
.../assets/skins/sam/header_background.png | Bin 0 -> 158 bytes
.../assets/skins/sam/profilerviewer-skin.css | 167 +
.../assets/skins/sam/profilerviewer.css | 7 +
.../profilerviewer/assets/skins/sam/wait.gif | Bin 0 -> 1100 bytes
.../profilerviewer/profilerviewer-min.js | 9 +
.../build/profilerviewer/profilerviewer.js | 1192 +
.../progressbar/assets/progressbar-core.css | 85 +
.../progressbar/assets/skins/sam/back-h.png | Bin 0 -> 334 bytes
.../progressbar/assets/skins/sam/back-v.png | Bin 0 -> 338 bytes
.../progressbar/assets/skins/sam/bar-h.png | Bin 0 -> 365 bytes
.../progressbar/assets/skins/sam/bar-v.png | Bin 0 -> 387 bytes
.../assets/skins/sam/progressbar-skin.css | 56 +
.../assets/skins/sam/progressbar.css | 7 +
.../build/progressbar/progressbar-debug.js | 691 +
.../yui/build/progressbar/progressbar-min.js | 8 +
.../yui/build/progressbar/progressbar.js | 677 +
.../reset-fonts-grids/reset-fonts-grids.css | 7 +
.../yui/build/reset-fonts/reset-fonts.css | 7 +
.../javascript/yui/build/reset/reset-min.css | 7 +
include/javascript/yui/build/reset/reset.css | 142 +
.../yui/build/resize/assets/resize-core.css | 173 +
.../resize/assets/skins/sam/layout_sprite.png | Bin 0 -> 1409 bytes
.../resize/assets/skins/sam/resize-skin.css | 142 +
.../build/resize/assets/skins/sam/resize.css | 7 +
.../javascript/yui/build/resize/resize-min.js | 10 +
include/javascript/yui/build/resize/resize.js | 1689 +
.../yui/build/selector/selector-min.js | 8 +
.../javascript/yui/build/selector/selector.js | 644 +
.../yui/build/slider/assets/bg-fader.gif | Bin 0 -> 433 bytes
.../yui/build/slider/assets/bg-h.gif | Bin 0 -> 212 bytes
.../yui/build/slider/assets/bg-v-e.gif | Bin 0 -> 476 bytes
.../yui/build/slider/assets/bg-v.gif | Bin 0 -> 481 bytes
.../yui/build/slider/assets/left-thumb.png | Bin 0 -> 348 bytes
.../yui/build/slider/assets/right-thumb.png | Bin 0 -> 356 bytes
.../build/slider/assets/skins/sam/bg-h.gif | Bin 0 -> 212 bytes
.../build/slider/assets/skins/sam/bg-v.gif | Bin 0 -> 481 bytes
.../slider/assets/skins/sam/slider-skin.css | 24 +
.../build/slider/assets/skins/sam/slider.css | 7 +
.../yui/build/slider/assets/slider-core.css | 17 +
.../yui/build/slider/assets/slider-skin.css | 20 +
.../yui/build/slider/assets/thumb-bar.gif | Bin 0 -> 580 bytes
.../yui/build/slider/assets/thumb-e.gif | Bin 0 -> 340 bytes
.../yui/build/slider/assets/thumb-fader.gif | Bin 0 -> 645 bytes
.../yui/build/slider/assets/thumb-n.gif | Bin 0 -> 612 bytes
.../yui/build/slider/assets/thumb-s.gif | Bin 0 -> 615 bytes
.../yui/build/slider/assets/thumb-w.gif | Bin 0 -> 340 bytes
.../javascript/yui/build/slider/slider-min.js | 9 +
include/javascript/yui/build/slider/slider.js | 2068 ++
.../yui/build/storage/storage-debug.js | 1185 +
.../yui/build/storage/storage-min.js | 8 +
.../javascript/yui/build/storage/storage.js | 1183 +
.../yui/build/stylesheet/stylesheet-debug.js | 648 +
.../yui/build/stylesheet/stylesheet-min.js | 7 +
.../yui/build/stylesheet/stylesheet.js | 645 +
include/javascript/yui/build/swf/swf-debug.js | 269 +
include/javascript/yui/build/swf/swf-min.js | 7 +
include/javascript/yui/build/swf/swf.js | 268 +
.../yui/build/swfdetect/swfdetect-debug.js | 93 +
.../yui/build/swfdetect/swfdetect-min.js | 7 +
.../yui/build/swfdetect/swfdetect.js | 93 +
include/javascript/yui/build/swfstore/swf.js | 238 +
.../yui/build/swfstore/swfstore-debug.js | 470 +
.../yui/build/swfstore/swfstore-min.js | 7 +
.../javascript/yui/build/swfstore/swfstore.js | 453 +
.../yui/build/swfstore/swfstore.swf | Bin 0 -> 4819 bytes
.../yui/build/tabview/assets/border_tabs.css | 54 +
.../yui/build/tabview/assets/loading.gif | Bin 0 -> 729 bytes
.../yui/build/tabview/assets/skin-sam.css | 77 +
.../tabview/assets/skins/sam/tabview-skin.css | 186 +
.../tabview/assets/skins/sam/tabview.css | 8 +
.../yui/build/tabview/assets/tabview-core.css | 133 +
.../yui/build/tabview/assets/tabview.css | 77 +
.../yui/build/tabview/tabview-min.js | 8 +
.../javascript/yui/build/tabview/tabview.js | 987 +
.../treeview/assets/skins/sam/check0.gif | Bin 0 -> 608 bytes
.../treeview/assets/skins/sam/check1.gif | Bin 0 -> 622 bytes
.../treeview/assets/skins/sam/check2.gif | Bin 0 -> 609 bytes
.../treeview/assets/skins/sam/loading.gif | Bin 0 -> 2673 bytes
.../assets/skins/sam/treeview-loading.gif | Bin 0 -> 2673 bytes
.../assets/skins/sam/treeview-skin.css | 249 +
.../assets/skins/sam/treeview-sprite.gif | Bin 0 -> 4326 bytes
.../treeview/assets/skins/sam/treeview.css | 7 +
.../build/treeview/assets/treeview-core.css | 6 +
.../yui/build/treeview/treeview-min.js | 12 +
.../javascript/yui/build/treeview/treeview.js | 3989 ++
.../yui/build/uploader/assets/uploader.swf | Bin 0 -> 7098 bytes
.../yui/build/uploader/uploader-min.js | 15 +
.../javascript/yui/build/uploader/uploader.js | 1069 +
.../yui/build/utilities/utilities.js | 39 +
.../build/yahoo-dom-event/yahoo-dom-event.js | 14 +
.../javascript/yui/build/yahoo/yahoo-min.js | 7 +
include/javascript/yui/build/yahoo/yahoo.js | 1075 +
.../yuiloader-dom-event.js | 17 +
.../yui/build/yuiloader/yuiloader-min.js | 10 +
.../yui/build/yuiloader/yuiloader.js | 3879 ++
.../yuitest/assets/skins/sam/yuitest-skin.css | 7 +
.../yuitest/assets/skins/sam/yuitest.css | 7 +
.../yui/build/yuitest/assets/testlogger.css | 7 +
.../yui/build/yuitest/assets/yuitest-core.css | 7 +
.../yui/build/yuitest/yuitest-min.js | 10 +
.../javascript/yui/build/yuitest/yuitest.js | 2741 ++
.../yui/build/yuitest/yuitest_core-min.js | 9 +
.../yui/build/yuitest/yuitest_core.js | 1976 +
include/javascript/yui/ext/yui-ext.js | 13509 +++++++
include/javascript/yui/index.html | 171 +
include/javascript/yui/ygDDList.js | 154 +
include/javascript/yui3/README | 50 +
include/javascript/yui3/assets/bg_hd.gif | Bin 0 -> 96 bytes
.../javascript/yui3/assets/bullet-box6x6.gif | Bin 0 -> 51 bytes
include/javascript/yui3/assets/bullet4x4.png | Bin 0 -> 126 bytes
.../yui3/assets/cheatsheet-shadow.jpg | Bin 0 -> 11796 bytes
.../yui3/assets/cheatsheet-thumbnail.png | Bin 0 -> 36189 bytes
.../javascript/yui3/assets/download-arrow.png | Bin 0 -> 327 bytes
.../yui3/assets/dpSyntaxHighlighter.css | 190 +
.../yui3/assets/dpSyntaxHighlighter.js | 166 +
.../javascript/yui3/assets/example-hd-bg.gif | Bin 0 -> 1487 bytes
.../yui3/assets/gradient-ex-box.png | Bin 0 -> 482 bytes
.../javascript/yui3/assets/gradient-mod.png | Bin 0 -> 207 bytes
.../javascript/yui3/assets/gradient-promo.png | Bin 0 -> 480 bytes
include/javascript/yui3/assets/logo.gif | Bin 0 -> 5901 bytes
include/javascript/yui3/assets/syntax.js | 3 +
include/javascript/yui3/assets/title_h_bg.gif | Bin 0 -> 91 bytes
include/javascript/yui3/assets/yui-candy.jpg | Bin 0 -> 11389 bytes
include/javascript/yui3/assets/yui.css | 719 +
include/javascript/yui3/assets/yui.gif | Bin 0 -> 2425 bytes
.../yui3/assets/yuiDistribution.css | 0
.../yui3/build/anim/anim-base-min.js | 8 +
.../javascript/yui3/build/anim/anim-base.js | 25 +
.../yui3/build/anim/anim-color-min.js | 8 +
.../javascript/yui3/build/anim/anim-color.js | 9 +
.../yui3/build/anim/anim-curve-min.js | 8 +
.../javascript/yui3/build/anim/anim-curve.js | 10 +
.../yui3/build/anim/anim-easing-min.js | 8 +
.../javascript/yui3/build/anim/anim-easing.js | 33 +
.../javascript/yui3/build/anim/anim-min.js | 8 +
.../yui3/build/anim/anim-node-plugin-min.js | 8 +
.../yui3/build/anim/anim-node-plugin.js | 8 +
.../yui3/build/anim/anim-scroll-min.js | 8 +
.../javascript/yui3/build/anim/anim-scroll.js | 10 +
.../javascript/yui3/build/anim/anim-xy-min.js | 8 +
include/javascript/yui3/build/anim/anim-xy.js | 8 +
include/javascript/yui3/build/anim/anim.js | 55 +
.../yui3/build/assets/skins/sam/bg.png | Bin 0 -> 219 bytes
.../assets/skins/sam/console-filters.css | 8 +
.../yui3/build/assets/skins/sam/console.css | 8 +
.../sam/horizontal-menu-submenu-indicator.png | Bin 0 -> 879 bytes
.../sam/horizontal-menu-submenu-toggle.png | Bin 0 -> 206 bytes
.../build/assets/skins/sam/node-menunav.css | 8 +
.../yui3/build/assets/skins/sam/overlay.css | 9 +
.../build/assets/skins/sam/rail-classic-x.png | Bin 0 -> 92 bytes
.../build/assets/skins/sam/rail-classic-y.png | Bin 0 -> 90 bytes
.../yui3/build/assets/skins/sam/skin.css | 14 +
.../yui3/build/assets/skins/sam/slider.css | 8 +
.../yui3/build/assets/skins/sam/sprite.png | Bin 0 -> 3123 bytes
.../assets/skins/sam/thumb-classic-x.png | Bin 0 -> 374 bytes
.../assets/skins/sam/thumb-classic-y.png | Bin 0 -> 341 bytes
.../sam/vertical-menu-submenu-indicator.png | Bin 0 -> 880 bytes
.../build/assets/skins/sam/warn_error.png | Bin 0 -> 703 bytes
.../build/assets/skins/sam/widget-stack.css | 8 +
.../yui3/build/assets/skins/sam/widget.css | 8 +
.../yui3/build/async-queue/async-queue-min.js | 8 +
.../yui3/build/async-queue/async-queue.js | 19 +
.../build/attribute/attribute-base-min.js | 8 +
.../yui3/build/attribute/attribute-base.js | 37 +
.../build/attribute/attribute-complex-min.js | 8 +
.../yui3/build/attribute/attribute-complex.js | 11 +
.../yui3/build/attribute/attribute-min.js | 8 +
.../yui3/build/attribute/attribute.js | 40 +
.../yui3/build/base/base-base-min.js | 8 +
.../javascript/yui3/build/base/base-base.js | 24 +
.../yui3/build/base/base-build-min.js | 8 +
.../javascript/yui3/build/base/base-build.js | 19 +
.../javascript/yui3/build/base/base-min.js | 8 +
.../yui3/build/base/base-pluginhost-min.js | 8 +
.../yui3/build/base/base-pluginhost.js | 8 +
include/javascript/yui3/build/base/base.js | 35 +
.../javascript/yui3/build/cache/cache-min.js | 8 +
include/javascript/yui3/build/cache/cache.js | 15 +
.../classnamemanager/classnamemanager-min.js | 8 +
.../classnamemanager/classnamemanager.js | 9 +
.../yui3/build/collection/collection-min.js | 8 +
.../yui3/build/collection/collection.js | 14 +
.../yui3/build/compat/compat-min.js | 8 +
.../javascript/yui3/build/compat/compat.js | 45 +
.../build/console/assets/console-core.css | 7 +
.../console/assets/console-filters-core.css | 7 +
.../build/console/assets/skins/sam/bg.png | Bin 0 -> 219 bytes
.../assets/skins/sam/console-filters-skin.css | 34 +
.../assets/skins/sam/console-filters.css | 8 +
.../console/assets/skins/sam/console-skin.css | 192 +
.../console/assets/skins/sam/console.css | 8 +
.../console/assets/skins/sam/warn_error.png | Bin 0 -> 703 bytes
.../yui3/build/console/assets/warn_error.png | Bin 0 -> 703 bytes
.../yui3/build/console/console-filters-min.js | 8 +
.../yui3/build/console/console-filters.js | 19 +
.../yui3/build/console/console-min.js | 8 +
.../javascript/yui3/build/console/console.js | 28 +
.../yui3/build/cookie/cookie-min.js | 8 +
.../javascript/yui3/build/cookie/cookie.js | 28 +
.../yui3/build/cssbase/base-context-min.css | 8 +
.../yui3/build/cssbase/base-context.css | 80 +
.../yui3/build/cssbase/base-min.css | 8 +
.../javascript/yui3/build/cssbase/base.css | 80 +
.../yui3/build/cssfonts/fonts-context-min.css | 8 +
.../yui3/build/cssfonts/fonts-context.css | 47 +
.../yui3/build/cssfonts/fonts-min.css | 8 +
.../javascript/yui3/build/cssfonts/fonts.css | 47 +
.../yui3/build/cssgrids/grids-context-min.css | 8 +
.../yui3/build/cssgrids/grids-context.css | 491 +
.../yui3/build/cssgrids/grids-min.css | 8 +
.../javascript/yui3/build/cssgrids/grids.css | 481 +
.../yui3/build/cssreset/reset-context-min.css | 8 +
.../yui3/build/cssreset/reset-context.css | 126 +
.../yui3/build/cssreset/reset-min.css | 8 +
.../javascript/yui3/build/cssreset/reset.css | 126 +
.../build/dataschema/dataschema-array-min.js | 8 +
.../yui3/build/dataschema/dataschema-array.js | 15 +
.../build/dataschema/dataschema-base-min.js | 8 +
.../yui3/build/dataschema/dataschema-base.js | 10 +
.../build/dataschema/dataschema-json-min.js | 8 +
.../yui3/build/dataschema/dataschema-json.js | 30 +
.../yui3/build/dataschema/dataschema-min.js | 8 +
.../build/dataschema/dataschema-text-min.js | 8 +
.../yui3/build/dataschema/dataschema-text.js | 14 +
.../build/dataschema/dataschema-xml-min.js | 8 +
.../yui3/build/dataschema/dataschema-xml.js | 18 +
.../yui3/build/dataschema/dataschema.js | 55 +
.../datasource/datasource-arrayschema-min.js | 8 +
.../datasource/datasource-arrayschema.js | 9 +
.../build/datasource/datasource-cache-min.js | 8 +
.../yui3/build/datasource/datasource-cache.js | 8 +
.../datasource/datasource-function-min.js | 8 +
.../build/datasource/datasource-function.js | 11 +
.../build/datasource/datasource-get-min.js | 8 +
.../yui3/build/datasource/datasource-get.js | 10 +
.../build/datasource/datasource-io-min.js | 8 +
.../yui3/build/datasource/datasource-io.js | 10 +
.../datasource/datasource-jsonschema-min.js | 8 +
.../build/datasource/datasource-jsonschema.js | 9 +
.../build/datasource/datasource-local-min.js | 8 +
.../yui3/build/datasource/datasource-local.js | 10 +
.../yui3/build/datasource/datasource-min.js | 8 +
.../datasource/datasource-polling-min.js | 8 +
.../build/datasource/datasource-polling.js | 8 +
.../datasource/datasource-textschema-min.js | 8 +
.../build/datasource/datasource-textschema.js | 9 +
.../datasource/datasource-xmlschema-min.js | 8 +
.../build/datasource/datasource-xmlschema.js | 9 +
.../yui3/build/datasource/datasource.js | 21 +
.../datatype/datatype-date-format-min.js | 8 +
.../build/datatype/datatype-date-format.js | 22 +
.../yui3/build/datatype/datatype-date-min.js | 8 +
.../build/datatype/datatype-date-parse-min.js | 8 +
.../build/datatype/datatype-date-parse.js | 11 +
.../yui3/build/datatype/datatype-date.js | 25 +
.../yui3/build/datatype/datatype-min.js | 8 +
.../datatype/datatype-number-format-min.js | 8 +
.../build/datatype/datatype-number-format.js | 14 +
.../build/datatype/datatype-number-min.js | 8 +
.../datatype/datatype-number-parse-min.js | 8 +
.../build/datatype/datatype-number-parse.js | 9 +
.../yui3/build/datatype/datatype-number.js | 15 +
.../build/datatype/datatype-xml-format-min.js | 8 +
.../build/datatype/datatype-xml-format.js | 10 +
.../yui3/build/datatype/datatype-xml-min.js | 8 +
.../build/datatype/datatype-xml-parse-min.js | 8 +
.../yui3/build/datatype/datatype-xml-parse.js | 12 +
.../yui3/build/datatype/datatype-xml.js | 14 +
.../yui3/build/datatype/datatype.js | 38 +
.../yui3/build/dd/dd-constrain-min.js | 8 +
.../javascript/yui3/build/dd/dd-constrain.js | 29 +
.../yui3/build/dd/dd-ddm-base-min.js | 8 +
.../javascript/yui3/build/dd/dd-ddm-base.js | 15 +
.../yui3/build/dd/dd-ddm-drop-min.js | 8 +
.../javascript/yui3/build/dd/dd-ddm-drop.js | 13 +
.../javascript/yui3/build/dd/dd-ddm-min.js | 8 +
include/javascript/yui3/build/dd/dd-ddm.js | 11 +
.../javascript/yui3/build/dd/dd-drag-min.js | 8 +
include/javascript/yui3/build/dd/dd-drag.js | 35 +
.../javascript/yui3/build/dd/dd-drop-min.js | 8 +
.../yui3/build/dd/dd-drop-plugin-min.js | 8 +
.../yui3/build/dd/dd-drop-plugin.js | 8 +
include/javascript/yui3/build/dd/dd-drop.js | 24 +
include/javascript/yui3/build/dd/dd-min.js | 8 +
.../javascript/yui3/build/dd/dd-plugin-min.js | 8 +
include/javascript/yui3/build/dd/dd-plugin.js | 8 +
.../javascript/yui3/build/dd/dd-proxy-min.js | 8 +
include/javascript/yui3/build/dd/dd-proxy.js | 16 +
.../javascript/yui3/build/dd/dd-scroll-min.js | 8 +
include/javascript/yui3/build/dd/dd-scroll.js | 20 +
include/javascript/yui3/build/dd/dd.js | 107 +
.../javascript/yui3/build/dom/dom-base-min.js | 8 +
include/javascript/yui3/build/dom/dom-base.js | 40 +
include/javascript/yui3/build/dom/dom-min.js | 8 +
.../yui3/build/dom/dom-screen-min.js | 8 +
.../javascript/yui3/build/dom/dom-screen.js | 30 +
.../yui3/build/dom/dom-style-min.js | 8 +
.../javascript/yui3/build/dom/dom-style.js | 36 +
include/javascript/yui3/build/dom/dom.js | 130 +
.../yui3/build/dom/selector-css2-min.js | 8 +
.../yui3/build/dom/selector-css2.js | 34 +
.../yui3/build/dom/selector-css3-min.js | 8 +
.../yui3/build/dom/selector-css3.js | 12 +
.../javascript/yui3/build/dom/selector-min.js | 8 +
.../yui3/build/dom/selector-native-min.js | 8 +
.../yui3/build/dom/selector-native.js | 22 +
include/javascript/yui3/build/dom/selector.js | 48 +
.../javascript/yui3/build/dump/dump-min.js | 8 +
include/javascript/yui3/build/dump/dump.js | 16 +
.../event-custom/event-custom-base-min.js | 8 +
.../build/event-custom/event-custom-base.js | 54 +
.../event-custom/event-custom-complex-min.js | 8 +
.../event-custom/event-custom-complex.js | 22 +
.../build/event-custom/event-custom-min.js | 8 +
.../yui3/build/event-custom/event-custom.js | 68 +
.../event-simulate/event-simulate-min.js | 8 +
.../build/event-simulate/event-simulate.js | 42 +
.../yui3/build/event/event-base-min.js | 8 +
.../javascript/yui3/build/event/event-base.js | 54 +
.../yui3/build/event/event-delegate-min.js | 8 +
.../yui3/build/event/event-delegate.js | 21 +
.../yui3/build/event/event-focus-min.js | 8 +
.../yui3/build/event/event-focus.js | 8 +
.../yui3/build/event/event-key-min.js | 8 +
.../javascript/yui3/build/event/event-key.js | 11 +
.../javascript/yui3/build/event/event-min.js | 8 +
.../yui3/build/event/event-mouseenter-min.js | 8 +
.../yui3/build/event/event-mouseenter.js | 10 +
.../yui3/build/event/event-mousewheel-min.js | 8 +
.../yui3/build/event/event-mousewheel.js | 10 +
.../yui3/build/event/event-resize-min.js | 8 +
.../yui3/build/event/event-resize.js | 10 +
include/javascript/yui3/build/event/event.js | 76 +
include/javascript/yui3/build/get/get-min.js | 8 +
include/javascript/yui3/build/get/get.js | 33 +
.../yui3/build/history/history-min.js | 8 +
.../javascript/yui3/build/history/history.js | 39 +
.../yui3/build/imageloader/imageloader-min.js | 8 +
.../yui3/build/imageloader/imageloader.js | 33 +
.../javascript/yui3/build/io/io-base-min.js | 8 +
include/javascript/yui3/build/io/io-base.js | 56 +
.../javascript/yui3/build/io/io-form-min.js | 8 +
include/javascript/yui3/build/io/io-form.js | 13 +
include/javascript/yui3/build/io/io-min.js | 8 +
.../javascript/yui3/build/io/io-queue-min.js | 8 +
include/javascript/yui3/build/io/io-queue.js | 15 +
.../yui3/build/io/io-upload-iframe-min.js | 8 +
.../yui3/build/io/io-upload-iframe.js | 26 +
.../javascript/yui3/build/io/io-xdr-min.js | 8 +
include/javascript/yui3/build/io/io-xdr.js | 20 +
include/javascript/yui3/build/io/io.js | 98 +
include/javascript/yui3/build/io/io.swf | Bin 0 -> 2829 bytes
.../javascript/yui3/build/json/json-min.js | 8 +
.../yui3/build/json/json-parse-min.js | 8 +
.../javascript/yui3/build/json/json-parse.js | 10 +
.../yui3/build/json/json-stringify-min.js | 8 +
.../yui3/build/json/json-stringify.js | 31 +
include/javascript/yui3/build/json/json.js | 33 +
.../yui3/build/loader/loader-min.js | 8 +
.../javascript/yui3/build/loader/loader.js | 72 +
.../node-focusmanager-min.js | 8 +
.../node-focusmanager/node-focusmanager.js | 47 +
.../node-menunav/assets/node-menunav-core.css | 176 +
.../sam/horizontal-menu-submenu-indicator.png | Bin 0 -> 879 bytes
.../sam/horizontal-menu-submenu-toggle.png | Bin 0 -> 206 bytes
.../assets/skins/sam/node-menunav-skin.css | 270 +
.../assets/skins/sam/node-menunav.css | 8 +
.../sam/vertical-menu-submenu-indicator.png | Bin 0 -> 880 bytes
.../build/node-menunav/node-menunav-min.js | 8 +
.../yui3/build/node-menunav/node-menunav.js | 74 +
.../yui3/build/node/node-aria-min.js | 8 +
.../javascript/yui3/build/node/node-aria.js | 9 +
.../yui3/build/node/node-base-min.js | 8 +
.../javascript/yui3/build/node/node-base.js | 54 +
.../build/node/node-event-delegate-min.js | 8 +
.../yui3/build/node/node-event-delegate.js | 8 +
.../build/node/node-event-simulate-min.js | 8 +
.../yui3/build/node/node-event-simulate.js | 8 +
.../javascript/yui3/build/node/node-min.js | 8 +
.../yui3/build/node/node-pluginhost-min.js | 8 +
.../yui3/build/node/node-pluginhost.js | 8 +
.../yui3/build/node/node-screen-min.js | 8 +
.../javascript/yui3/build/node/node-screen.js | 11 +
.../yui3/build/node/node-style-min.js | 8 +
.../javascript/yui3/build/node/node-style.js | 8 +
include/javascript/yui3/build/node/node.js | 57 +
include/javascript/yui3/build/oop/oop-min.js | 8 +
include/javascript/yui3/build/oop/oop.js | 20 +
.../build/overlay/assets/overlay-core.css | 14 +
.../overlay/assets/skins/sam/overlay-skin.css | 7 +
.../overlay/assets/skins/sam/overlay.css | 9 +
.../yui3/build/overlay/overlay-min.js | 8 +
.../javascript/yui3/build/overlay/overlay.js | 8 +
.../yui3/build/plugin/plugin-min.js | 8 +
.../javascript/yui3/build/plugin/plugin.js | 11 +
.../yui3/build/pluginhost/pluginhost-min.js | 8 +
.../yui3/build/pluginhost/pluginhost.js | 19 +
.../yui3/build/profiler/profiler-min.js | 8 +
.../yui3/build/profiler/profiler.js | 18 +
.../build/queue-promote/queue-promote-min.js | 8 +
.../yui3/build/queue-promote/queue-promote.js | 8 +
.../assets/skins/sam/rail-classic-x.png | Bin 0 -> 92 bytes
.../assets/skins/sam/rail-classic-y.png | Bin 0 -> 90 bytes
.../slider/assets/skins/sam/slider-skin.css | 18 +
.../build/slider/assets/skins/sam/slider.css | 8 +
.../assets/skins/sam/thumb-classic-x.png | Bin 0 -> 374 bytes
.../assets/skins/sam/thumb-classic-y.png | Bin 0 -> 341 bytes
.../yui3/build/slider/assets/slider-core.css | 42 +
.../yui3/build/slider/slider-min.js | 8 +
.../javascript/yui3/build/slider/slider.js | 23 +
.../yui3/build/stylesheet/stylesheet-min.js | 8 +
.../yui3/build/stylesheet/stylesheet.js | 36 +
.../yui3/build/substitute/substitute-min.js | 8 +
.../yui3/build/substitute/substitute.js | 16 +
.../yui3/build/test/assets/test-console.css | 34 +
.../javascript/yui3/build/test/test-min.js | 8 +
include/javascript/yui3/build/test/test.js | 62 +
.../widget/assets/skins/sam/widget-skin.css | 7 +
.../assets/skins/sam/widget-stack-skin.css | 7 +
.../widget/assets/skins/sam/widget-stack.css | 8 +
.../build/widget/assets/skins/sam/widget.css | 8 +
.../yui3/build/widget/assets/widget-core.css | 10 +
.../build/widget/assets/widget-stack-core.css | 26 +
.../yui3/build/widget/widget-min.js | 8 +
.../build/widget/widget-position-ext-min.js | 8 +
.../yui3/build/widget/widget-position-ext.js | 15 +
.../yui3/build/widget/widget-position-min.js | 8 +
.../yui3/build/widget/widget-position.js | 9 +
.../yui3/build/widget/widget-stack-min.js | 8 +
.../yui3/build/widget/widget-stack.js | 12 +
.../yui3/build/widget/widget-stdmod-min.js | 8 +
.../yui3/build/widget/widget-stdmod.js | 21 +
.../javascript/yui3/build/widget/widget.js | 36 +
.../yui3/build/yui-base/yui-base-min.js | 8 +
.../yui3/build/yui-base/yui-base.js | 65 +
include/javascript/yui3/build/yui/get-min.js | 8 +
include/javascript/yui3/build/yui/get.js | 33 +
.../javascript/yui3/build/yui/yui-base-min.js | 8 +
include/javascript/yui3/build/yui/yui-base.js | 62 +
.../yui3/build/yui/yui-later-min.js | 8 +
.../javascript/yui3/build/yui/yui-later.js | 10 +
.../javascript/yui3/build/yui/yui-log-min.js | 8 +
include/javascript/yui3/build/yui/yui-log.js | 12 +
include/javascript/yui3/build/yui/yui-min.js | 8 +
include/javascript/yui3/build/yui/yui.js | 93 +
include/javascript/yui3/index.html | 163 +
include/jsolait/LICENSE | 504 +
include/jsolait/copying.txt | 504 +
include/jsolait/init.js | 101 +
include/jsolait/lib/codecs.js | 38 +
include/jsolait/lib/crypto.js | 37 +
include/jsolait/lib/jsonrpc.js | 112 +
include/jsolait/lib/jsonrpclite.js | 96 +
include/jsolait/lib/lang.js | 75 +
include/jsolait/lib/langlite.js | 49 +
include/jsolait/lib/urllib.js | 45 +
include/jsolait/lib/xml.js | 37 +
include/jsolait/lib/xmlrpc.js | 98 +
include/jsolait/missingmixin.js | 46 +
include/json_config.php | 224 +
include/language/en_us.lang.php | 2959 ++
include/language/en_us.notify_template.html | 352 +
include/language/jsLanguage.php | 85 +
include/modules.php | 293 +
include/nusoap/changelog | 648 +
include/nusoap/class.nusoap_base.php | 1046 +
include/nusoap/class.soap_fault.php | 131 +
include/nusoap/class.soap_parser.php | 693 +
include/nusoap/class.soap_server.php | 1177 +
include/nusoap/class.soap_transport_http.php | 1359 +
include/nusoap/class.soap_val.php | 148 +
include/nusoap/class.soapclient.php | 1146 +
include/nusoap/class.wsdl.php | 1983 +
include/nusoap/class.wsdlcache.php | 251 +
include/nusoap/class.xmlschema.php | 1019 +
include/nusoap/license.txt | 531 +
include/nusoap/nusoap.php | 10058 +++++
include/nusoap/nusoapmime.php | 611 +
include/pclzip/gnu-lgpl.txt | 504 +
include/pclzip/pclzip.lib.php | 5447 +++
include/pclzip/readme.txt | 332 +
include/phpmailer/README | 193 +
include/phpmailer/class.phpmailer.php | 2010 +
include/phpmailer/class.smtp.php | 1105 +
.../phpmailer/language/phpmailer.lang-ar.php | 48 +
.../phpmailer/language/phpmailer.lang-br.php | 56 +
.../phpmailer/language/phpmailer.lang-ca.php | 55 +
.../phpmailer/language/phpmailer.lang-cz.php | 59 +
.../phpmailer/language/phpmailer.lang-de.php | 59 +
.../phpmailer/language/phpmailer.lang-dk.php | 56 +
.../phpmailer/language/phpmailer.lang-en.php | 58 +
.../phpmailer/language/phpmailer.lang-es.php | 58 +
.../phpmailer/language/phpmailer.lang-et.php | 51 +
.../phpmailer/language/phpmailer.lang-fi.php | 56 +
.../phpmailer/language/phpmailer.lang-fo.php | 58 +
.../phpmailer/language/phpmailer.lang-fr.php | 58 +
.../phpmailer/language/phpmailer.lang-hu.php | 56 +
.../phpmailer/language/phpmailer.lang-it.php | 64 +
.../phpmailer/language/phpmailer.lang-ja.php | Bin 0 -> 2670 bytes
.../phpmailer/language/phpmailer.lang-nl.php | 58 +
.../phpmailer/language/phpmailer.lang-no.php | 58 +
.../phpmailer/language/phpmailer.lang-pl.php | 56 +
.../phpmailer/language/phpmailer.lang-ro.php | 55 +
.../phpmailer/language/phpmailer.lang-ru.php | 55 +
.../phpmailer/language/phpmailer.lang-se.php | 58 +
.../phpmailer/language/phpmailer.lang-tr.php | 61 +
include/phpmailer/license.txt | 504 +
include/reCaptcha/LICENSE | 22 +
include/reCaptcha/README | 7 +
include/reCaptcha/recaptchalib.php | 278 +
.../resource/Observers/ResourceObserver.php | 66 +
.../Observers/SoapResourceObserver.php | 81 +
.../Observers/WebResourceObserver.php | 64 +
include/resource/ResourceManager.php | 154 +
include/tabConfig.php | 103 +
include/tabs.php | 130 +
include/tcpdf/2dbarcodes.php | 149 +
include/tcpdf/CHANGELOG.TXT | 1010 +
include/tcpdf/LICENSE.TXT | 504 +
include/tcpdf/README.TXT | 86 +
include/tcpdf/barcodes.php | 1999 +
include/tcpdf/config/lang/eng.php | 73 +
include/tcpdf/config/lang/ita.php | 73 +
include/tcpdf/config/tcpdf_config.php | 264 +
include/tcpdf/config/tcpdf_config_alt.php | 259 +
include/tcpdf/fonts/uni2cid_ac15.php | 23636 ++++++++++++
include/tcpdf/fonts/uni2cid_ag15.php | 30245 ++++++++++++++++
include/tcpdf/fonts/uni2cid_aj16.php | 15728 ++++++++
include/tcpdf/fonts/uni2cid_ak12.php | 17553 +++++++++
include/tcpdf/fonts/utils/enc/cp1250.map | 251 +
include/tcpdf/fonts/utils/enc/cp1251.map | 255 +
include/tcpdf/fonts/utils/enc/cp1252.map | 251 +
include/tcpdf/fonts/utils/enc/cp1253.map | 239 +
include/tcpdf/fonts/utils/enc/cp1254.map | 249 +
include/tcpdf/fonts/utils/enc/cp1255.map | 233 +
include/tcpdf/fonts/utils/enc/cp1257.map | 244 +
include/tcpdf/fonts/utils/enc/cp1258.map | 247 +
include/tcpdf/fonts/utils/enc/cp874.map | 225 +
include/tcpdf/fonts/utils/enc/iso-8859-1.map | 256 +
include/tcpdf/fonts/utils/enc/iso-8859-11.map | 248 +
include/tcpdf/fonts/utils/enc/iso-8859-15.map | 256 +
include/tcpdf/fonts/utils/enc/iso-8859-16.map | 256 +
include/tcpdf/fonts/utils/enc/iso-8859-2.map | 256 +
include/tcpdf/fonts/utils/enc/iso-8859-4.map | 256 +
include/tcpdf/fonts/utils/enc/iso-8859-5.map | 256 +
include/tcpdf/fonts/utils/enc/iso-8859-7.map | 250 +
include/tcpdf/fonts/utils/enc/iso-8859-9.map | 256 +
include/tcpdf/fonts/utils/enc/koi8-r.map | 256 +
include/tcpdf/fonts/utils/enc/koi8-u.map | 256 +
include/tcpdf/fonts/utils/makefont.php | 730 +
include/tcpdf/htmlcolors.php | 231 +
include/tcpdf/tcpdf.php | 13979 +++++++
include/tcpdf/unicode_data.php | 18383 ++++++++++
include/templates/Template.php | 51 +
include/templates/TemplateDragDropChooser.php | 282 +
include/templates/TemplateGroupChooser.php | 175 +
include/timezone/timezones.php | 2920 ++
include/upload_file.php | 359 +
include/utils.php | 4192 +++
include/utils/LogicHook.php | 168 +
include/utils/activity_utils.php | 86 +
include/utils/array_utils.php | 293 +
include/utils/autoloader.php | 97 +
include/utils/db_utils.php | 202 +
include/utils/encryption_utils.php | 104 +
include/utils/external_cache.php | 40 +
include/utils/file_utils.php | 451 +
include/utils/layout_utils.php | 367 +
include/utils/logic_utils.php | 123 +
include/utils/mvc_utils.php | 51 +
include/utils/php_zip_utils.php | 121 +
include/utils/progress_bar_utils.php | 148 +
include/utils/security_utils.php | 146 +
include/utils/sugar_file_utils.php | 328 +
include/utils/zip_utils.php | 130 +
include/vCard.php | 385 +
include/ytree/ExtNode.php | 114 +
include/ytree/Node.php | 110 +
include/ytree/Tree.php | 169 +
include/ytree/TreeView/HTMLNode.js | 6 +
include/ytree/TreeView/MenuNode.js | 3 +
include/ytree/TreeView/Node.js | 21 +
include/ytree/TreeView/RootNode.js | 2 +
include/ytree/TreeView/TaskNode.js | 28 +
include/ytree/TreeView/TextNode.js | 9 +
include/ytree/TreeView/TreeView.js | 79 +
include/ytree/TreeView/anim/TVAnim.js | 2 +
include/ytree/TreeView/anim/TVFadeIn.js | 2 +
include/ytree/TreeView/anim/TVFadeOut.js | 2 +
include/ytree/TreeView/css/check/tree.css | 1 +
include/ytree/TreeView/css/default/tree.css | 97 +
include/ytree/TreeView/css/folders/tree.css | 55 +
include/ytree/TreeView/css/forecasts/tree.css | 55 +
include/ytree/TreeView/img/bullet.gif | Bin 0 -> 172 bytes
include/ytree/TreeView/img/check/Thumbs.db | Bin 0 -> 18432 bytes
include/ytree/TreeView/img/check/check0.gif | Bin 0 -> 608 bytes
include/ytree/TreeView/img/check/check1.gif | Bin 0 -> 609 bytes
include/ytree/TreeView/img/check/check2.gif | Bin 0 -> 622 bytes
include/ytree/TreeView/img/check/lm.gif | Bin 0 -> 94 bytes
include/ytree/TreeView/img/check/lmh.gif | Bin 0 -> 106 bytes
include/ytree/TreeView/img/check/ln.gif | Bin 0 -> 142 bytes
include/ytree/TreeView/img/check/loading.gif | Bin 0 -> 2673 bytes
include/ytree/TreeView/img/check/lp.gif | Bin 0 -> 130 bytes
include/ytree/TreeView/img/check/lph.gif | Bin 0 -> 111 bytes
include/ytree/TreeView/img/check/tm.gif | Bin 0 -> 545 bytes
include/ytree/TreeView/img/check/tmh.gif | Bin 0 -> 563 bytes
include/ytree/TreeView/img/check/tn.gif | Bin 0 -> 504 bytes
include/ytree/TreeView/img/check/tp.gif | Bin 0 -> 539 bytes
include/ytree/TreeView/img/check/tph.gif | Bin 0 -> 568 bytes
include/ytree/TreeView/img/check/vline.gif | Bin 0 -> 503 bytes
include/ytree/TreeView/img/default/lm.gif | Bin 0 -> 94 bytes
include/ytree/TreeView/img/default/lmh.gif | Bin 0 -> 106 bytes
include/ytree/TreeView/img/default/ln.gif | Bin 0 -> 142 bytes
.../ytree/TreeView/img/default/loading.gif | Bin 0 -> 2673 bytes
include/ytree/TreeView/img/default/lp.gif | Bin 0 -> 130 bytes
include/ytree/TreeView/img/default/lph.gif | Bin 0 -> 111 bytes
include/ytree/TreeView/img/default/tm.gif | Bin 0 -> 545 bytes
include/ytree/TreeView/img/default/tmh.gif | Bin 0 -> 563 bytes
include/ytree/TreeView/img/default/tn.gif | Bin 0 -> 504 bytes
include/ytree/TreeView/img/default/tp.gif | Bin 0 -> 539 bytes
include/ytree/TreeView/img/default/tph.gif | Bin 0 -> 568 bytes
include/ytree/TreeView/img/default/vline.gif | Bin 0 -> 503 bytes
include/ytree/TreeView/img/folders/lm.gif | Bin 0 -> 666 bytes
include/ytree/TreeView/img/folders/lmh.gif | Bin 0 -> 677 bytes
include/ytree/TreeView/img/folders/ln.gif | Bin 0 -> 142 bytes
.../ytree/TreeView/img/folders/loading.gif | Bin 0 -> 516 bytes
include/ytree/TreeView/img/folders/lp.gif | Bin 0 -> 641 bytes
include/ytree/TreeView/img/folders/lph.gif | Bin 0 -> 651 bytes
include/ytree/TreeView/img/folders/minus.gif | Bin 0 -> 853 bytes
include/ytree/TreeView/img/folders/plus.gif | Bin 0 -> 857 bytes
include/ytree/TreeView/img/folders/tm.gif | Bin 0 -> 1281 bytes
include/ytree/TreeView/img/folders/tmh.gif | Bin 0 -> 1295 bytes
include/ytree/TreeView/img/folders/tn.gif | Bin 0 -> 504 bytes
include/ytree/TreeView/img/folders/tp.gif | Bin 0 -> 1243 bytes
include/ytree/TreeView/img/folders/tph.gif | Bin 0 -> 1263 bytes
include/ytree/TreeView/img/folders/vline.gif | Bin 0 -> 503 bytes
include/ytree/TreeView/img/greybg.png | Bin 0 -> 197 bytes
include/ytree/TreeView/img/header.gif | Bin 0 -> 203 bytes
include/ytree/TreeView/img/logo.gif | Bin 0 -> 705 bytes
include/ytree/TreeView/img/navHover2.png | Bin 0 -> 875 bytes
include/ytree/TreeView/img/qbottom.png | Bin 0 -> 1351 bytes
include/ytree/TreeView/img/qmiddle.png | Bin 0 -> 385 bytes
include/ytree/TreeView/img/qtop.png | Bin 0 -> 2030 bytes
include/ytree/TreeView/license.txt | 35 +
include/ytree/treeutil.js | 50 +
index.php | 46 +
install.php | 586 +
install/TeamDemoData.php | 191 +
install/UploadLangFileCheck.php | 87 +
install/UserDemoData.php | 188 +
install/checkDBSettings.php | 571 +
install/confirmSettings.php | 591 +
install/data/disc_client.php | 57 +
install/dbConfig.js | 40 +
install/dbConfig_a.php | 465 +
install/demoData.en_us.php | 21721 +++++++++++
install/download_modules.php | 356 +
install/download_patches.php | 316 +
install/install.css | 367 +
install/installCommon.js | 37 +
install/installDisabled.php | 93 +
install/installHelp.php | 373 +
install/installSystemCheck.php | 421 +
install/installType.php | 154 +
install/install_defaults.php | 100 +
install/install_utils.php | 2309 ++
install/language/en_us.lang.php | 564 +
install/license.js | 39 +
install/license.php | 237 +
install/licensePrint.php | 90 +
install/oc_convert.js | 35 +
install/oc_install.js | 36 +
install/performSetup.php | 565 +
install/populateSeedData.php | 503 +
install/processing.gif | Bin 0 -> 10847 bytes
install/ready.php | 166 +
install/register.js | 44 +
install/register.php | 139 +
.../seed_data/Advanced_Password_SeedData.php | 83 +
install/seed_data/quotes_SeedData.php | 174 +
install/siteConfig.js | 42 +
install/siteConfig_a.php | 210 +
install/siteConfig_b.php | 235 +
install/systemOptions.php | 174 +
install/welcome.php | 145 +
json.php | 112 +
json_server.php | 765 +
jssource/JSGroupings.php | 156 +
jssource/jsmin.php | 291 +
jssource/minify.php | 154 +
jssource/minify_utils.php | 466 +
jssource/src_files/include/JSON.js | 217 +
.../include/MySugar/javascript/MySugar.js | 610 +
.../include/SubPanel/SubPanelTiles.js | 736 +
.../SugarCharts/Jit/FlashCanvas/canvas2png.js | 42 +
.../Jit/FlashCanvas/flashcanvas.js | 28 +
.../include/SugarCharts/Jit/js/Jit/jit.js | 20674 +++++++++++
.../SugarCharts/Jit/js/mySugarCharts.js | 117 +
.../include/SugarCharts/Jit/js/sugarCharts.js | 784 +
.../javascript/SugarDependentDropdown.js | 305 +
.../SugarEmailAddress/SugarEmailAddress.js | 490 +
.../Fields/Address/SugarFieldAddress.js | 102 +
.../Fields/Collection/SugarFieldCollection.js | 637 +
.../Fields/Datetimecombo/Datetimecombo.js | 239 +
.../SugarFields/Fields/File/SugarFieldFile.js | 212 +
.../formatters/default/company_detail.js | 80 +
.../src_files/include/javascript/calendar.js | 236 +
.../src_files/include/javascript/cookie.js | 121 +
.../src_files/include/javascript/dashlets.js | 93 +
.../src_files/include/javascript/include.js | 301 +
.../src_files/include/javascript/iscroll.js | 725 +
.../include/javascript/jsclass_async.js | 224 +
.../include/javascript/jsclass_base.js | 775 +
jssource/src_files/include/javascript/menu.js | 537 +
.../include/javascript/overlibmws.js | 782 +
.../include/javascript/overlibmws_iframe.js | 169 +
.../include/javascript/popup_helper.js | 238 +
.../include/javascript/popup_parent_helper.js | 227 +
.../include/javascript/quickCompose.js | 290 +
.../include/javascript/quicksearch.js | 335 +
.../include/javascript/report_additionals.js | 2858 ++
.../src_files/include/javascript/sugar_3.js | 4136 +++
.../sugar_connection_event_listener.js | 49 +
.../javascript/sugarwidgets/SugarYUILoader.js | 51 +
.../sugarwidgets/SugarYUIWidgets.js | 681 +
.../src_files/include/javascript/swfobject.js | 265 +
.../yui3/assets/dpSyntaxHighlighter.js | 805 +
.../include/javascript/yui3/assets/syntax.js | 56 +
.../yui3/build/anim/anim-base-min.js | 8 +
.../javascript/yui3/build/anim/anim-base.js | 602 +
.../yui3/build/anim/anim-color-min.js | 8 +
.../javascript/yui3/build/anim/anim-color.js | 55 +
.../yui3/build/anim/anim-curve-min.js | 8 +
.../javascript/yui3/build/anim/anim-curve.js | 64 +
.../yui3/build/anim/anim-easing-min.js | 8 +
.../javascript/yui3/build/anim/anim-easing.js | 355 +
.../javascript/yui3/build/anim/anim-min.js | 9 +
.../yui3/build/anim/anim-node-plugin-min.js | 8 +
.../yui3/build/anim/anim-node-plugin.js | 33 +
.../yui3/build/anim/anim-scroll-min.js | 8 +
.../javascript/yui3/build/anim/anim-scroll.js | 45 +
.../javascript/yui3/build/anim/anim-xy-min.js | 8 +
.../javascript/yui3/build/anim/anim-xy.js | 33 +
.../javascript/yui3/build/anim/anim.js | 1149 +
.../yui3/build/async-queue/async-queue-min.js | 8 +
.../yui3/build/async-queue/async-queue.js | 536 +
.../build/attribute/attribute-base-min.js | 8 +
.../yui3/build/attribute/attribute-base.js | 1064 +
.../build/attribute/attribute-complex-min.js | 8 +
.../yui3/build/attribute/attribute-complex.js | 120 +
.../yui3/build/attribute/attribute-min.js | 9 +
.../yui3/build/attribute/attribute.js | 1181 +
.../yui3/build/base/base-base-min.js | 8 +
.../javascript/yui3/build/base/base-base.js | 531 +
.../yui3/build/base/base-build-min.js | 8 +
.../javascript/yui3/build/base/base-build.js | 201 +
.../javascript/yui3/build/base/base-min.js | 8 +
.../yui3/build/base/base-pluginhost-min.js | 8 +
.../yui3/build/base/base-pluginhost.js | 43 +
.../javascript/yui3/build/base/base.js | 765 +
.../javascript/yui3/build/cache/cache-min.js | 8 +
.../javascript/yui3/build/cache/cache.js | 357 +
.../classnamemanager/classnamemanager-min.js | 8 +
.../classnamemanager/classnamemanager.js | 87 +
.../yui3/build/collection/collection-min.js | 8 +
.../yui3/build/collection/collection.js | 294 +
.../yui3/build/compat/compat-min.js | 9 +
.../javascript/yui3/build/compat/compat.js | 896 +
.../yui3/build/console/console-filters-min.js | 8 +
.../yui3/build/console/console-filters.js | 710 +
.../yui3/build/console/console-min.js | 9 +
.../javascript/yui3/build/console/console.js | 1478 +
.../yui3/build/cookie/cookie-min.js | 8 +
.../javascript/yui3/build/cookie/cookie.js | 491 +
.../build/dataschema/dataschema-array-min.js | 8 +
.../yui3/build/dataschema/dataschema-array.js | 107 +
.../build/dataschema/dataschema-base-min.js | 8 +
.../yui3/build/dataschema/dataschema-base.js | 73 +
.../build/dataschema/dataschema-json-min.js | 8 +
.../yui3/build/dataschema/dataschema-json.js | 294 +
.../yui3/build/dataschema/dataschema-min.js | 8 +
.../build/dataschema/dataschema-text-min.js | 8 +
.../yui3/build/dataschema/dataschema-text.js | 116 +
.../build/dataschema/dataschema-xml-min.js | 8 +
.../yui3/build/dataschema/dataschema-xml.js | 164 +
.../yui3/build/dataschema/dataschema.js | 735 +
.../datasource/datasource-arrayschema-min.js | 8 +
.../datasource/datasource-arrayschema.js | 113 +
.../build/datasource/datasource-cache-min.js | 8 +
.../yui3/build/datasource/datasource-cache.js | 136 +
.../datasource/datasource-function-min.js | 8 +
.../build/datasource/datasource-function.js | 115 +
.../build/datasource/datasource-get-min.js | 8 +
.../yui3/build/datasource/datasource-get.js | 226 +
.../build/datasource/datasource-io-min.js | 8 +
.../yui3/build/datasource/datasource-io.js | 154 +
.../datasource/datasource-jsonschema-min.js | 8 +
.../build/datasource/datasource-jsonschema.js | 113 +
.../build/datasource/datasource-local-min.js | 8 +
.../yui3/build/datasource/datasource-local.js | 336 +
.../yui3/build/datasource/datasource-min.js | 9 +
.../datasource/datasource-polling-min.js | 8 +
.../build/datasource/datasource-polling.js | 93 +
.../datasource/datasource-textschema-min.js | 8 +
.../build/datasource/datasource-textschema.js | 113 +
.../datasource/datasource-xmlschema-min.js | 8 +
.../build/datasource/datasource-xmlschema.js | 113 +
.../yui3/build/datasource/datasource.js | 1463 +
.../datatype/datatype-date-format-min.js | 8 +
.../build/datatype/datatype-date-format.js | 443 +
.../yui3/build/datatype/datatype-date-min.js | 8 +
.../build/datatype/datatype-date-parse-min.js | 8 +
.../build/datatype/datatype-date-parse.js | 53 +
.../yui3/build/datatype/datatype-date.js | 495 +
.../yui3/build/datatype/datatype-min.js | 9 +
.../datatype/datatype-number-format-min.js | 8 +
.../build/datatype/datatype-number-format.js | 112 +
.../build/datatype/datatype-number-min.js | 8 +
.../datatype/datatype-number-parse-min.js | 8 +
.../build/datatype/datatype-number-parse.js | 45 +
.../yui3/build/datatype/datatype-number.js | 156 +
.../build/datatype/datatype-xml-format-min.js | 8 +
.../build/datatype/datatype-xml-format.js | 60 +
.../yui3/build/datatype/datatype-xml-min.js | 8 +
.../build/datatype/datatype-xml-parse-min.js | 8 +
.../yui3/build/datatype/datatype-xml-parse.js | 62 +
.../yui3/build/datatype/datatype-xml.js | 121 +
.../yui3/build/datatype/datatype.js | 765 +
.../yui3/build/dd/dd-constrain-min.js | 8 +
.../javascript/yui3/build/dd/dd-constrain.js | 425 +
.../yui3/build/dd/dd-ddm-base-min.js | 8 +
.../javascript/yui3/build/dd/dd-ddm-base.js | 289 +
.../yui3/build/dd/dd-ddm-drop-min.js | 8 +
.../javascript/yui3/build/dd/dd-ddm-drop.js | 411 +
.../javascript/yui3/build/dd/dd-ddm-min.js | 8 +
.../javascript/yui3/build/dd/dd-ddm.js | 135 +
.../javascript/yui3/build/dd/dd-drag-min.js | 9 +
.../javascript/yui3/build/dd/dd-drag.js | 1100 +
.../javascript/yui3/build/dd/dd-drop-min.js | 8 +
.../yui3/build/dd/dd-drop-plugin-min.js | 8 +
.../yui3/build/dd/dd-drop-plugin.js | 52 +
.../javascript/yui3/build/dd/dd-drop.js | 485 +
.../javascript/yui3/build/dd/dd-min.js | 12 +
.../javascript/yui3/build/dd/dd-plugin-min.js | 8 +
.../javascript/yui3/build/dd/dd-plugin.js | 53 +
.../javascript/yui3/build/dd/dd-proxy-min.js | 8 +
.../javascript/yui3/build/dd/dd-proxy.js | 225 +
.../javascript/yui3/build/dd/dd-scroll-min.js | 8 +
.../javascript/yui3/build/dd/dd-scroll.js | 413 +
.../include/javascript/yui3/build/dd/dd.js | 3529 ++
.../javascript/yui3/build/dom/dom-base-min.js | 9 +
.../javascript/yui3/build/dom/dom-base.js | 737 +
.../javascript/yui3/build/dom/dom-min.js | 11 +
.../yui3/build/dom/dom-screen-min.js | 8 +
.../javascript/yui3/build/dom/dom-screen.js | 567 +
.../yui3/build/dom/dom-style-min.js | 8 +
.../javascript/yui3/build/dom/dom-style.js | 506 +
.../include/javascript/yui3/build/dom/dom.js | 2466 ++
.../yui3/build/dom/selector-css2-min.js | 8 +
.../yui3/build/dom/selector-css2.js | 449 +
.../yui3/build/dom/selector-css3-min.js | 8 +
.../yui3/build/dom/selector-css3.js | 151 +
.../javascript/yui3/build/dom/selector-min.js | 9 +
.../yui3/build/dom/selector-native-min.js | 8 +
.../yui3/build/dom/selector-native.js | 227 +
.../javascript/yui3/build/dom/selector.js | 673 +
.../javascript/yui3/build/dump/dump-min.js | 8 +
.../javascript/yui3/build/dump/dump.js | 119 +
.../event-custom/event-custom-base-min.js | 9 +
.../build/event-custom/event-custom-base.js | 1722 +
.../event-custom/event-custom-complex-min.js | 8 +
.../event-custom/event-custom-complex.js | 363 +
.../build/event-custom/event-custom-min.js | 10 +
.../yui3/build/event-custom/event-custom.js | 2082 ++
.../event-simulate/event-simulate-min.js | 8 +
.../build/event-simulate/event-simulate.js | 490 +
.../yui3/build/event/event-base-min.js | 11 +
.../javascript/yui3/build/event/event-base.js | 1378 +
.../yui3/build/event/event-delegate-min.js | 8 +
.../yui3/build/event/event-delegate.js | 365 +
.../yui3/build/event/event-focus-min.js | 8 +
.../yui3/build/event/event-focus.js | 90 +
.../yui3/build/event/event-key-min.js | 8 +
.../javascript/yui3/build/event/event-key.js | 106 +
.../javascript/yui3/build/event/event-min.js | 12 +
.../yui3/build/event/event-mouseenter-min.js | 8 +
.../yui3/build/event/event-mouseenter.js | 191 +
.../yui3/build/event/event-mousewheel-min.js | 8 +
.../yui3/build/event/event-mousewheel.js | 57 +
.../yui3/build/event/event-resize-min.js | 8 +
.../yui3/build/event/event-resize.js | 71 +
.../javascript/yui3/build/event/event.js | 2220 ++
.../javascript/yui3/build/get/get-min.js | 8 +
.../include/javascript/yui3/build/get/get.js | 734 +
.../yui3/build/history/history-min.js | 8 +
.../javascript/yui3/build/history/history.js | 680 +
.../yui3/build/imageloader/imageloader-min.js | 8 +
.../yui3/build/imageloader/imageloader.js | 623 +
.../javascript/yui3/build/io/io-base-min.js | 8 +
.../javascript/yui3/build/io/io-base.js | 743 +
.../javascript/yui3/build/io/io-form-min.js | 8 +
.../javascript/yui3/build/io/io-form.js | 101 +
.../javascript/yui3/build/io/io-min.js | 9 +
.../javascript/yui3/build/io/io-queue-min.js | 8 +
.../javascript/yui3/build/io/io-queue.js | 222 +
.../yui3/build/io/io-upload-iframe-min.js | 8 +
.../yui3/build/io/io-upload-iframe.js | 283 +
.../javascript/yui3/build/io/io-xdr-min.js | 8 +
.../javascript/yui3/build/io/io-xdr.js | 291 +
.../include/javascript/yui3/build/io/io.js | 1621 +
.../javascript/yui3/build/json/json-min.js | 8 +
.../yui3/build/json/json-parse-min.js | 8 +
.../javascript/yui3/build/json/json-parse.js | 214 +
.../yui3/build/json/json-stringify-min.js | 8 +
.../yui3/build/json/json-stringify.js | 285 +
.../javascript/yui3/build/json/json.js | 496 +
.../yui3/build/loader/loader-min.js | 10 +
.../javascript/yui3/build/loader/loader.js | 2129 ++
.../node-focusmanager-min.js | 8 +
.../node-focusmanager/node-focusmanager.js | 1060 +
.../build/node-menunav/node-menunav-min.js | 10 +
.../yui3/build/node-menunav/node-menunav.js | 2165 ++
.../yui3/build/node/node-aria-min.js | 8 +
.../javascript/yui3/build/node/node-aria.js | 32 +
.../yui3/build/node/node-base-min.js | 9 +
.../javascript/yui3/build/node/node-base.js | 1560 +
.../build/node/node-event-delegate-min.js | 8 +
.../yui3/build/node/node-event-delegate.js | 35 +
.../build/node/node-event-simulate-min.js | 8 +
.../yui3/build/node/node-event-simulate.js | 31 +
.../javascript/yui3/build/node/node-min.js | 10 +
.../yui3/build/node/node-pluginhost-min.js | 8 +
.../yui3/build/node/node-pluginhost.js | 61 +
.../yui3/build/node/node-screen-min.js | 8 +
.../javascript/yui3/build/node/node-screen.js | 227 +
.../yui3/build/node/node-style-min.js | 8 +
.../javascript/yui3/build/node/node-style.js | 90 +
.../javascript/yui3/build/node/node.js | 1949 +
.../javascript/yui3/build/oop/oop-min.js | 8 +
.../include/javascript/yui3/build/oop/oop.js | 367 +
.../yui3/build/overlay/overlay-min.js | 8 +
.../javascript/yui3/build/overlay/overlay.js | 36 +
.../yui3/build/plugin/plugin-min.js | 8 +
.../javascript/yui3/build/plugin/plugin.js | 170 +
.../yui3/build/pluginhost/pluginhost-min.js | 8 +
.../yui3/build/pluginhost/pluginhost.js | 296 +
.../yui3/build/profiler/profiler-min.js | 8 +
.../yui3/build/profiler/profiler.js | 555 +
.../build/queue-promote/queue-promote-min.js | 8 +
.../yui3/build/queue-promote/queue-promote.js | 60 +
.../yui3/build/slider/slider-min.js | 9 +
.../javascript/yui3/build/slider/slider.js | 1472 +
.../yui3/build/stylesheet/stylesheet-min.js | 8 +
.../yui3/build/stylesheet/stylesheet.js | 633 +
.../yui3/build/substitute/substitute-min.js | 8 +
.../yui3/build/substitute/substitute.js | 139 +
.../javascript/yui3/build/test/test-min.js | 12 +
.../javascript/yui3/build/test/test.js | 2796 ++
.../yui3/build/widget/widget-min.js | 9 +
.../build/widget/widget-position-ext-min.js | 8 +
.../yui3/build/widget/widget-position-ext.js | 407 +
.../yui3/build/widget/widget-position-min.js | 8 +
.../yui3/build/widget/widget-position.js | 272 +
.../yui3/build/widget/widget-stack-min.js | 8 +
.../yui3/build/widget/widget-stack.js | 403 +
.../yui3/build/widget/widget-stdmod-min.js | 8 +
.../yui3/build/widget/widget-stdmod.js | 755 +
.../javascript/yui3/build/widget/widget.js | 1329 +
.../yui3/build/yui-base/yui-base-min.js | 9 +
.../yui3/build/yui-base/yui-base.js | 2136 ++
.../javascript/yui3/build/yui/get-min.js | 8 +
.../include/javascript/yui3/build/yui/get.js | 734 +
.../javascript/yui3/build/yui/yui-base-min.js | 9 +
.../javascript/yui3/build/yui/yui-base.js | 2149 ++
.../yui3/build/yui/yui-later-min.js | 8 +
.../javascript/yui3/build/yui/yui-later.js | 76 +
.../javascript/yui3/build/yui/yui-log-min.js | 8 +
.../javascript/yui3/build/yui/yui-log.js | 114 +
.../javascript/yui3/build/yui/yui-min.js | 10 +
.../include/javascript/yui3/build/yui/yui.js | 3056 ++
jssource/src_files/include/jsolait/init.js | 755 +
.../src_files/include/jsolait/lib/codecs.js | 191 +
.../src_files/include/jsolait/lib/crypto.js | 172 +
.../src_files/include/jsolait/lib/jsonrpc.js | 462 +
.../include/jsolait/lib/jsonrpclite.js | 451 +
.../src_files/include/jsolait/lib/lang.js | 508 +
.../src_files/include/jsolait/lib/langlite.js | 167 +
.../src_files/include/jsolait/lib/urllib.js | 335 +
jssource/src_files/include/jsolait/lib/xml.js | 270 +
.../src_files/include/jsolait/lib/xmlrpc.js | 854 +
.../src_files/include/jsolait/missingmixin.js | 174 +
.../include/ytree/TreeView/HTMLNode.js | 114 +
.../include/ytree/TreeView/MenuNode.js | 24 +
.../src_files/include/ytree/TreeView/Node.js | 659 +
.../include/ytree/TreeView/RootNode.js | 30 +
.../include/ytree/TreeView/TaskNode.js | 276 +
.../include/ytree/TreeView/TextNode.js | 135 +
.../include/ytree/TreeView/TreeView.js | 2195 ++
.../include/ytree/TreeView/anim/TVAnim.js | 49 +
.../include/ytree/TreeView/anim/TVFadeIn.js | 62 +
.../include/ytree/TreeView/anim/TVFadeOut.js | 59 +
jssource/src_files/include/ytree/treeutil.js | 188 +
jssource/src_files/install/dbConfig.js | 77 +
jssource/src_files/install/installCommon.js | 48 +
jssource/src_files/install/license.js | 62 +
jssource/src_files/install/oc_convert.js | 41 +
jssource/src_files/install/oc_install.js | 51 +
jssource/src_files/install/register.js | 83 +
jssource/src_files/install/siteConfig.js | 93 +
.../src_files/modules/ACLRoles/ACLRoles.js | 92 +
.../src_files/modules/Accounts/Account.js | 90 +
.../javascript/Administration.js | 136 +
.../Administration/javascript/Async.js | 119 +
.../src_files/modules/Campaigns/DetailView.js | 63 +
.../src_files/modules/Campaigns/WebToLead.js | 226 +
.../src_files/modules/Campaigns/wizard.js | 291 +
.../src_files/modules/Connectors/Connector.js | 122 +
.../src_files/modules/Contacts/Contact.js | 192 +
.../src_files/modules/Currencies/EditView.js | 55 +
.../src_files/modules/Documents/documents.js | 127 +
jssource/src_files/modules/EAPM/EAPMEdit.js | 110 +
.../modules/EmailTemplates/EmailTemplate.js | 189 +
jssource/src_files/modules/Home/about.js | 65 +
.../modules/InboundEmail/InboundEmail.js | 349 +
jssource/src_files/modules/Leads/Lead.js | 108 +
.../modules/Meetings/jsclass_scheduler.js | 627 +
.../src_files/modules/MergeRecords/Merge.js | 404 +
jssource/src_files/modules/Project/Project.js | 97 +
.../modules/ProjectTask/ProjectTask.js | 66 +
.../src_files/modules/Studio/JSTransaction.js | 79 +
jssource/src_files/modules/Studio/studio.js | 549 +
jssource/src_files/modules/Studio/studiodd.js | 219 +
.../modules/Studio/studiotabgroups.js | 142 +
.../modules/Studio/ygDDListStudio.js | 240 +
.../modules/UpgradeWizard/upgradeWizard.js | 137 +
.../src_files/modules/Users/DetailView.js | 133 +
.../modules/Users/PasswordRequirementBox.js | 188 +
jssource/src_files/modules/Users/User.js | 216 +
jssource/src_files/modules/Users/login.js | 96 +
jssource/src_files/service/utils/SugarRest.js | 244 +
jssource/src_files/themes/Sugar5/js/style.js | 218 +
jssource/src_files/themes/default/js/style.js | 45 +
leadCapture.php | 46 +
log4php/LoggerManager.php | 7 +
log_file_restricted.html | 42 +
maintenance.php | 41 +
metadata/accounts_bugsMetaData.php | 57 +
metadata/accounts_casesMetaData.php | 51 +
metadata/accounts_contactsMetaData.php | 59 +
metadata/accounts_opportunitiesMetaData.php | 58 +
metadata/acl_roles_actionsMetaData.php | 98 +
metadata/acl_roles_usersMetaData.php | 92 +
metadata/addressBookMetaData.php | 81 +
metadata/audit_templateMetaData.php | 61 +
metadata/calls_contactsMetaData.php | 61 +
metadata/calls_leadsMetaData.php | 61 +
metadata/calls_usersMetaData.php | 59 +
metadata/cases_bugsMetaData.php | 58 +
metadata/configMetaData.php | 39 +
metadata/contacts_bugsMetaData.php | 60 +
metadata/contacts_casesMetaData.php | 58 +
metadata/contacts_usersMetaData.php | 57 +
metadata/custom_fieldsMetaData.php | 57 +
metadata/documents_accountsMetaData.php | 124 +
metadata/documents_bugsMetaData.php | 124 +
metadata/documents_casesMetaData.php | 124 +
metadata/documents_contactsMetaData.php | 124 +
metadata/documents_opportunitiesMetaData.php | 124 +
metadata/email_addressesMetaData.php | 245 +
metadata/email_cacheMetaData.php | 188 +
...email_marketing_prospect_listsMetaData.php | 99 +
metadata/emails_beansMetaData.php | 383 +
metadata/fields_meta_dataMetaData.php | 39 +
metadata/foldersMetaData.php | 205 +
metadata/import_mapsMetaData.php | 39 +
metadata/inboundEmail_autoreplyMetaData.php | 105 +
.../inboundEmail_cacheTimestampMetaData.php | 68 +
.../kbdocuments_views_ratingsMetaData.php | 54 +
metadata/linked_documentsMetaData.php | 73 +
metadata/meetings_contactsMetaData.php | 106 +
metadata/meetings_leadsMetaData.php | 61 +
metadata/meetings_usersMetaData.php | 106 +
metadata/opportunities_contactsMetaData.php | 65 +
metadata/outboundEmailMetaData.php | 160 +
metadata/project_bugsMetaData.php | 69 +
metadata/project_casesMetaData.php | 69 +
metadata/project_productsMetaData.php | 69 +
metadata/project_relationMetaData.php | 119 +
.../project_task_project_tasksMetaData.php | 94 +
metadata/projects_accountsMetaData.php | 70 +
metadata/projects_contactsMetaData.php | 70 +
metadata/projects_opportunitiesMetaData.php | 70 +
metadata/projects_quotesMetaData.php | 70 +
metadata/prospect_list_campaignsMetaData.php | 99 +
metadata/prospect_lists_prospectsMetaData.php | 169 +
metadata/queues_beansMetaData.php | 132 +
metadata/queues_queueMetaData.php | 141 +
metadata/roles_modulesMetaData.php | 92 +
metadata/roles_usersMetaData.php | 91 +
metadata/schedulers_timesMetaData.php | 115 +
metadata/user_feedsMetaData.php | 52 +
metadata/usersMetaData.php | 39 +
metadata/users_last_importMetaData.php | 51 +
metadata/users_passwordLinkMetaData.php | 84 +
metadata/users_signaturesMetaData.php | 108 +
metagen.php | 39 +
modules/ACL/ACLController.php | 231 +
modules/ACL/ACLJSController.php | 178 +
modules/ACL/Forms.php | 0
modules/ACL/List.php | 46 +
modules/ACL/Menu.php | 44 +
modules/ACL/Save.php | 40 +
modules/ACL/install_actions.php | 76 +
modules/ACL/language/en_us.lang.php | 53 +
modules/ACL/metadata/subpaneldefs.php | 73 +
modules/ACL/remove_actions.php | 58 +
modules/ACL/vardefs.php | 41 +
modules/ACLActions/ACLAction.php | 510 +
modules/ACLActions/Forms.php | 0
modules/ACLActions/Menu.php | 44 +
modules/ACLActions/actiondefs.php | 126 +
modules/ACLActions/language/en_us.lang.php | 65 +
modules/ACLActions/metadata/subpaneldefs.php | 73 +
modules/ACLActions/vardefs.php | 154 +
modules/ACLRoles/ACLRole.php | 274 +
modules/ACLRoles/ACLRoles.js | 36 +
modules/ACLRoles/Delete.php | 46 +
modules/ACLRoles/DetailUserRole.php | 92 +
modules/ACLRoles/DetailView.php | 98 +
modules/ACLRoles/DetailView.tpl | 70 +
modules/ACLRoles/DetailViewBody.tpl | 92 +
modules/ACLRoles/DetailViewUser.tpl | 46 +
modules/ACLRoles/EditAllBody.tpl | 127 +
modules/ACLRoles/EditRole.php | 103 +
modules/ACLRoles/EditRole.tpl | 96 +
modules/ACLRoles/EditView.php | 108 +
modules/ACLRoles/EditView.tpl | 85 +
modules/ACLRoles/EditViewBody.tpl | 48 +
modules/ACLRoles/Forms.php | 0
modules/ACLRoles/ListUsers.php | 71 +
modules/ACLRoles/Menu.php | 45 +
modules/ACLRoles/Popup_picker.html | 108 +
modules/ACLRoles/Popup_picker.php | 147 +
modules/ACLRoles/Save.php | 75 +
modules/ACLRoles/language/en_us.lang.php | 57 +
modules/ACLRoles/metadata/SearchFields.php | 42 +
modules/ACLRoles/metadata/listviewdefs.php | 51 +
modules/ACLRoles/metadata/popupdefs.php | 50 +
modules/ACLRoles/metadata/searchdefs.php | 55 +
modules/ACLRoles/metadata/subpaneldefs.php | 76 +
modules/ACLRoles/metadata/subpanels/admin.php | 75 +
.../ACLRoles/metadata/subpanels/default.php | 77 +
modules/ACLRoles/popup.tpl | 77 +
modules/ACLRoles/vardefs.php | 144 +
modules/ACLRoles/views/view.list.php | 51 +
modules/Accounts/Account.js | 50 +
modules/Accounts/Account.php | 341 +
modules/Accounts/AccountFormBase.php | 551 +
modules/Accounts/AccountsQuickCreate.php | 70 +
.../MyAccountsDashlet.data.php | 99 +
.../MyAccountsDashlet.meta.php | 47 +
.../MyAccountsDashlet/MyAccountsDashlet.php | 85 +
modules/Accounts/Menu.php | 53 +
modules/Accounts/Popup_picker.html | 140 +
modules/Accounts/Save.php | 51 +
modules/Accounts/ShowDuplicates.html | 73 +
modules/Accounts/ShowDuplicates.php | 159 +
modules/Accounts/field_arrays.php | 94 +
modules/Accounts/language/en_us.lang.php | 183 +
modules/Accounts/metadata/SearchFields.php | 76 +
modules/Accounts/metadata/acldefs.php | 61 +
.../Accounts/metadata/additionalDetails.php | 84 +
modules/Accounts/metadata/detailviewdefs.php | 219 +
modules/Accounts/metadata/editviewdefs.php | 170 +
modules/Accounts/metadata/fieldGroups.php | 38 +
modules/Accounts/metadata/listviewdefs.php | 224 +
modules/Accounts/metadata/metafiles.php | 52 +
modules/Accounts/metadata/popupdefs.php | 138 +
modules/Accounts/metadata/quickcreatedefs.php | 126 +
modules/Accounts/metadata/searchdefs.php | 171 +
modules/Accounts/metadata/studio.php | 66 +
modules/Accounts/metadata/subpaneldefs.php | 264 +
.../Accounts/metadata/subpanels/ForEmails.php | 76 +
.../metadata/subpanels/ForProspectLists.php | 81 +
.../Accounts/metadata/subpanels/default.php | 91 +
modules/Accounts/tpls/QuickCreate.tpl | 90 +
modules/Accounts/vardefs.php | 461 +
modules/Accounts/views/view.detail.php | 106 +
modules/Accounts/views/view.list.php | 48 +
modules/Activities/Forms.php | 37 +
modules/Activities/Menu.php | 62 +
modules/Activities/OpenListView.html | 117 +
modules/Activities/OpenListView.php | 328 +
modules/Activities/Popup_picker.html | 71 +
modules/Activities/Popup_picker.php | 429 +
modules/Activities/SetAcceptStatus.php | 59 +
modules/Activities/SubPanelView.html | 94 +
modules/Activities/SubPanelView.php | 456 +
modules/Activities/SubPanelViewContacts.html | 101 +
modules/Activities/config.php | 46 +
modules/Activities/language/en_us.lang.php | 130 +
modules/Activities/metadata/subpaneldefs.php | 252 +
modules/Activities/views/view.list.php | 47 +
.../Activities/views/view.modulelistmenu.php | 55 +
modules/Administration/Administration.php | 171 +
modules/Administration/Async.php | 153 +
modules/Administration/Common.php | 707 +
modules/Administration/CustomizeFields.php | 71 +
modules/Administration/Development.php | 64 +
modules/Administration/Diagnostic.php | 103 +
modules/Administration/Diagnostic.tpl | 129 +
modules/Administration/DiagnosticDelete.php | 82 +
modules/Administration/DiagnosticDownload.php | 65 +
modules/Administration/DiagnosticRun.php | 837 +
modules/Administration/DisplayWarnings.php | 159 +
modules/Administration/DstFix.php | 402 +
.../ExportCustomFieldStructure.php | 58 +
modules/Administration/Forms.php | 79 +
.../ImportCustomFieldStructure.php | 86 +
modules/Administration/Locale.php | 121 +
modules/Administration/Locale.tpl | 217 +
modules/Administration/Menu.php | 46 +
modules/Administration/PasswordManager.php | 203 +
modules/Administration/PasswordManager.tpl | 685 +
.../Administration/QuickRepairAndRebuild.php | 470 +
modules/Administration/RebuildAudit.php | 58 +
modules/Administration/RebuildConfig.html | 58 +
modules/Administration/RebuildConfig.php | 84 +
modules/Administration/RebuildDashlets.php | 55 +
.../RebuildExpressionPlugins.php | 41 +
.../Administration/RebuildFulltextIndices.php | 83 +
modules/Administration/RebuildJSLang.php | 61 +
.../Administration/RebuildRelationship.php | 151 +
modules/Administration/RebuildSchedulers.php | 77 +
modules/Administration/RepairActivities.php | 68 +
modules/Administration/RepairFieldCasing.php | 152 +
modules/Administration/RepairIE.php | 72 +
modules/Administration/RepairIndex.php | 253 +
modules/Administration/RepairJSFile.php | 99 +
modules/Administration/RepairSeedUsers.php | 87 +
modules/Administration/RepairXSS.php | 89 +
modules/Administration/Save.php | 81 +
modules/Administration/SupportPortal.php | 270 +
modules/Administration/SupportPortal.tpl | 62 +
modules/Administration/Updater.html | 98 +
modules/Administration/Updater.php | 126 +
modules/Administration/Upgrade.php | 144 +
modules/Administration/UpgradeAccess.php | 151 +
modules/Administration/UpgradeFields.php | 154 +
modules/Administration/UpgradeHistory.php | 288 +
modules/Administration/UpgradeIISAccess.php | 43 +
modules/Administration/UpgradeWizard.php | 367 +
.../Administration/UpgradeWizardCommon.php | 264 +
.../Administration/UpgradeWizard_commit.php | 555 +
.../Administration/UpgradeWizard_prepare.php | 534 +
modules/Administration/action_view_map.php | 46 +
modules/Administration/callJSRepair.php | 85 +
modules/Administration/clear_chart_cache.php | 77 +
modules/Administration/controller.php | 166 +
modules/Administration/expandDatabase.php | 170 +
modules/Administration/index.html | 62 +
modules/Administration/index.php | 156 +
modules/Administration/index.tpl | 90 +
.../javascript/Administration.js | 39 +
modules/Administration/javascript/Async.js | 37 +
.../Administration/language/en_us.lang.php | 1093 +
.../Administration/metadata/SearchFields.php | 45 +
.../metadata/adminpaneldefs.php | 200 +
modules/Administration/ncc_config.php | 38 +
modules/Administration/repairDatabase.php | 176 +
modules/Administration/repairSelectModule.php | 97 +
modules/Administration/repairUniSearch.php | 56 +
.../templates/ConfigureTabs.tpl | 206 +
.../templates/GlobalSearchSettings.tpl | 154 +
.../Administration/templates/Languages.tpl | 152 +
.../templates/QuickRepairAndRebuild.tpl | 49 +
.../templates/RepairDatabase.tpl | 48 +
.../Administration/templates/RepairXSS.tpl | 61 +
.../Administration/templates/ShortcutBar.tpl | 170 +
.../templates/themeSettings.tpl | 158 +
modules/Administration/undoupdateclass.php | 54 +
.../Administration/updateTimezonePrefs.php | 172 +
modules/Administration/updateclass.php | 111 +
modules/Administration/updater_utils.php | 423 +
.../upgrade_custom_relationships.php | 122 +
modules/Administration/vardefs.php | 149 +
modules/Administration/views/view.backups.php | 189 +
.../views/view.configuretabs.php | 137 +
.../views/view.globalsearchsettings.php | 85 +
.../Administration/views/view.languages.php | 109 +
modules/Administration/views/view.repair.php | 61 +
.../views/view.themesettings.php | 119 +
modules/Audit/Audit.php | 219 +
modules/Audit/Popup_picker.html | 65 +
modules/Audit/Popup_picker.php | 201 +
modules/Audit/field_assoc.php | 86 +
modules/Audit/language/en_us.lang.php | 50 +
modules/Audit/vardefs.php | 39 +
modules/BeanDictionary.php | 40 +
modules/Bugs/Bug.php | 397 +
modules/Bugs/BugsQuickCreate.php | 74 +
.../MyBugsDashlet/MyBugsDashlet.data.php | 85 +
.../MyBugsDashlet/MyBugsDashlet.meta.php | 47 +
.../Dashlets/MyBugsDashlet/MyBugsDashlet.php | 80 +
modules/Bugs/Menu.php | 53 +
modules/Bugs/field_arrays.php | 68 +
modules/Bugs/language/en_us.lang.php | 115 +
modules/Bugs/metadata/SearchFields.php | 66 +
modules/Bugs/metadata/additionalDetails.php | 80 +
modules/Bugs/metadata/detailviewdefs.php | 118 +
modules/Bugs/metadata/editviewdefs.php | 115 +
modules/Bugs/metadata/listviewdefs.php | 90 +
modules/Bugs/metadata/metafiles.php | 52 +
modules/Bugs/metadata/popupdefs.php | 89 +
modules/Bugs/metadata/quickcreatedefs.php | 143 +
modules/Bugs/metadata/searchdefs.php | 69 +
modules/Bugs/metadata/studio.php | 66 +
modules/Bugs/metadata/subpaneldefs.php | 186 +
modules/Bugs/metadata/subpanels/ForEmails.php | 85 +
modules/Bugs/metadata/subpanels/default.php | 95 +
modules/Bugs/tpls/QuickCreate.tpl | 93 +
modules/Bugs/vardefs.php | 318 +
modules/Bugs/views/view.detail.php | 65 +
modules/Bugs/views/view.edit.php | 65 +
modules/Calendar/Calendar.php | 613 +
modules/Calendar/DateTimeUtil.php | 637 +
modules/Calendar/Forms.php | 45 +
modules/Calendar/Menu.php | 57 +
modules/Calendar/SubPanelSharedCalendar.php | 69 +
modules/Calendar/TasksListView.html | 61 +
modules/Calendar/TasksListView.php | 144 +
modules/Calendar/index.php | 128 +
modules/Calendar/language/en_us.lang.php | 142 +
modules/Calendar/metadata/listviewdefs.php | 68 +
modules/Calendar/small_month.php | 56 +
.../templates/template_shared_calendar.php | 183 +
.../Calendar/templates/templates_calendar.php | 868 +
modules/Calendar/views/view.list.php | 52 +
modules/Calls/Call.php | 687 +
modules/Calls/CallFormBase.php | 614 +
modules/Calls/CallHelper.php | 103 +
modules/Calls/CallsQuickCreate.php | 144 +
.../MyCallsDashlet/MyCallsDashlet.data.php | 95 +
.../MyCallsDashlet/MyCallsDashlet.meta.php | 47 +
.../MyCallsDashlet/MyCallsDashlet.php | 163 +
modules/Calls/Menu.php | 51 +
modules/Calls/Save.php | 49 +
modules/Calls/SubPanelViewInvitees.html | 89 +
modules/Calls/SubPanelViewInvitees.php | 149 +
modules/Calls/field_arrays.php | 69 +
modules/Calls/language/en_us.lang.php | 130 +
modules/Calls/metadata/SearchFields.php | 71 +
modules/Calls/metadata/additionalDetails.php | 80 +
modules/Calls/metadata/detailviewdefs.php | 152 +
modules/Calls/metadata/editviewdefs.php | 162 +
modules/Calls/metadata/listviewdefs.php | 123 +
modules/Calls/metadata/quickcreatedefs.php | 177 +
modules/Calls/metadata/searchdefs.php | 126 +
modules/Calls/metadata/studio.php | 66 +
modules/Calls/metadata/subpaneldefs.php | 96 +
.../metadata/subpanels/ForActivities.php | 120 +
.../Calls/metadata/subpanels/ForHistory.php | 128 +
modules/Calls/metadata/subpanels/default.php | 114 +
modules/Calls/tpls/QuickCreate.tpl | 138 +
modules/Calls/tpls/footer.tpl | 87 +
modules/Calls/vardefs.php | 389 +
modules/Calls/views/view.edit.php | 90 +
modules/CampaignLog/CampaignLog.php | 204 +
modules/CampaignLog/Menu.php | 49 +
modules/CampaignLog/Popup_picker.html | 101 +
modules/CampaignLog/Popup_picker.php | 178 +
modules/CampaignLog/language/en_us.lang.php | 100 +
.../metadata/subpanels/ForTargets.php | 87 +
.../metadata/subpanels/default.php | 100 +
modules/CampaignLog/vardefs.php | 289 +
modules/CampaignTrackers/CampaignTracker.php | 161 +
modules/CampaignTrackers/DetailView.html | 88 +
modules/CampaignTrackers/DetailView.php | 118 +
modules/CampaignTrackers/EditView.html | 91 +
modules/CampaignTrackers/EditView.php | 132 +
modules/CampaignTrackers/Forms.html | 70 +
modules/CampaignTrackers/Forms.php | 137 +
modules/CampaignTrackers/Menu.php | 49 +
modules/CampaignTrackers/Save.php | 82 +
.../CampaignTrackers/language/en_us.lang.php | 74 +
.../metadata/subpanels/default.php | 76 +
modules/CampaignTrackers/vardefs.php | 157 +
modules/Campaigns/Campaign.php | 406 +
modules/Campaigns/CampaignDiagnostic.html | 77 +
modules/Campaigns/CampaignDiagnostic.php | 278 +
modules/Campaigns/CaptchaValidate.php | 65 +
modules/Campaigns/Charts.php | 316 +
modules/Campaigns/Charts1.php | 106 +
.../TopCampaignsDashlet.meta.php | 47 +
.../TopCampaignsDashlet.php | 132 +
.../TopCampaignsDashlet.tpl | 59 +
.../TopCampaignsDashletConfigure.tpl | 74 +
modules/Campaigns/Delete.php | 116 +
modules/Campaigns/DetailView.js | 41 +
modules/Campaigns/EmailQueue.php | 125 +
modules/Campaigns/GenerateWebToLeadForm.php | 580 +
modules/Campaigns/MailMerge.php | 42 +
modules/Campaigns/Menu.php | 91 +
modules/Campaigns/PopupCampaignRoi.html | 71 +
modules/Campaigns/PopupCampaignRoi.php | 200 +
modules/Campaigns/Popup_picker.html | 118 +
modules/Campaigns/Popup_picker.php | 176 +
modules/Campaigns/ProcessBouncedEmails.php | 214 +
modules/Campaigns/QueueCampaign.php | 212 +
modules/Campaigns/RemoveMe.php | 89 +
modules/Campaigns/RoiDetailView.php | 210 +
modules/Campaigns/RoiDetailView.tpl | 140 +
modules/Campaigns/Save.php | 131 +
modules/Campaigns/Schedule.html | 75 +
modules/Campaigns/Schedule.php | 171 +
modules/Campaigns/SearchForm_NewsLetter.html | 103 +
modules/Campaigns/SubPanelViewer.php | 105 +
modules/Campaigns/Subscriptions.html | 117 +
modules/Campaigns/Subscriptions.php | 244 +
modules/Campaigns/Subscriptions.tpl | 295 +
modules/Campaigns/TrackDetailView.php | 269 +
modules/Campaigns/TrackDetailView.tpl | 173 +
modules/Campaigns/Tracker.php | 92 +
modules/Campaigns/WebToLead.js | 63 +
modules/Campaigns/WebToLeadCapture.php | 220 +
modules/Campaigns/WebToLeadCreation.html | 204 +
modules/Campaigns/WebToLeadCreation.php | 308 +
modules/Campaigns/WebToLeadDownloadForm.html | 90 +
modules/Campaigns/WebToLeadForm.html | 102 +
modules/Campaigns/WebToLeadFormSave.php | 122 +
modules/Campaigns/WizardEmailSetup.html | 326 +
modules/Campaigns/WizardEmailSetup.php | 413 +
modules/Campaigns/WizardEmailSetupSave.php | 124 +
modules/Campaigns/WizardHome.html | 92 +
modules/Campaigns/WizardHome.php | 490 +
modules/Campaigns/WizardMarketing.html | 382 +
modules/Campaigns/WizardMarketing.php | 318 +
modules/Campaigns/WizardMarketingSave.php | 189 +
modules/Campaigns/WizardNewsletter.html | 107 +
modules/Campaigns/WizardNewsletter.php | 611 +
modules/Campaigns/WizardNewsletterSave.php | 337 +
modules/Campaigns/action_file_map.php | 45 +
modules/Campaigns/chart.tpl | 63 +
modules/Campaigns/controller.php | 45 +
modules/Campaigns/field_arrays.php | 68 +
modules/Campaigns/image.php | 48 +
modules/Campaigns/language/en_us.lang.php | 430 +
modules/Campaigns/metadata/SearchFields.php | 66 +
.../Campaigns/metadata/additionalDetails.php | 74 +
modules/Campaigns/metadata/detailviewdefs.php | 158 +
modules/Campaigns/metadata/editviewdefs.php | 150 +
modules/Campaigns/metadata/listviewdefs.php | 90 +
modules/Campaigns/metadata/popupdefs.php | 78 +
modules/Campaigns/metadata/searchdefs.php | 60 +
modules/Campaigns/metadata/studio.php | 66 +
modules/Campaigns/metadata/subpaneldefs.php | 205 +
.../metadata/subpanels/ForEmailMarketing.php | 51 +
.../Campaigns/metadata/subpanels/default.php | 75 +
.../Campaigns/tpls/WizardCampaignBudget.tpl | 137 +
.../Campaigns/tpls/WizardCampaignHeader.tpl | 156 +
.../tpls/WizardCampaignTargetList.tpl | 183 +
...zardCampaignTargetListForNonNewsLetter.tpl | 308 +
.../Campaigns/tpls/WizardCampaignTracker.tpl | 257 +
modules/Campaigns/tpls/WizardHomeStart.tpl | 111 +
modules/Campaigns/tpls/WizardNewsletter.tpl | 109 +
modules/Campaigns/utils.php | 985 +
modules/Campaigns/vardefs.php | 323 +
modules/Campaigns/views/view.classic.php | 109 +
modules/Campaigns/views/view.detail.php | 138 +
.../Campaigns/views/view.modulelistmenu.php | 55 +
.../Campaigns/views/view.newsletterlist.php | 75 +
modules/Campaigns/wizard.js | 56 +
modules/Cases/Case.php | 317 +
modules/Cases/CasesQuickCreate.php | 89 +
.../MyCasesDashlet/MyCasesDashlet.data.php | 84 +
.../MyCasesDashlet/MyCasesDashlet.meta.php | 47 +
.../MyCasesDashlet/MyCasesDashlet.php | 58 +
modules/Cases/Menu.php | 54 +
modules/Cases/SugarFeeds/CaseFeed.php | 59 +
modules/Cases/field_arrays.php | 64 +
modules/Cases/language/en_us.lang.php | 110 +
modules/Cases/metadata/SearchFields.php | 55 +
.../metadata/accountsquickcreatedefs.php | 77 +
modules/Cases/metadata/additionalDetails.php | 69 +
modules/Cases/metadata/detailviewdefs.php | 105 +
modules/Cases/metadata/editviewdefs.php | 99 +
modules/Cases/metadata/listviewdefs.php | 80 +
modules/Cases/metadata/popupdefs.php | 92 +
modules/Cases/metadata/quickcreatedefs.php | 75 +
modules/Cases/metadata/searchdefs.php | 61 +
modules/Cases/metadata/studio.php | 66 +
modules/Cases/metadata/subpaneldefs.php | 195 +
.../Cases/metadata/subpanels/ForAccounts.php | 95 +
.../Cases/metadata/subpanels/ForEmails.php | 94 +
modules/Cases/metadata/subpanels/default.php | 100 +
modules/Cases/tpls/QuickCreate.tpl | 100 +
modules/Cases/vardefs.php | 264 +
.../CampaignROIChartConfigure.tpl | 71 +
.../CampaignROIChartDashlet.data.php | 48 +
.../CampaignROIChartDashlet.en_us.lang.php | 45 +
.../CampaignROIChartDashlet.meta.php | 50 +
.../CampaignROIChartDashlet.php | 87 +
.../MyPipelineBySalesStageConfigure.tpl | 100 +
.../MyPipelineBySalesStageDashlet.data.php | 59 +
...PipelineBySalesStageDashlet.en_us.lang.php | 45 +
.../MyPipelineBySalesStageDashlet.meta.php | 48 +
.../MyPipelineBySalesStageDashlet.php | 256 +
.../OppByLeadOutcomeConfigure.tpl | 79 +
.../OppByLeadOutcomeDashlet.data.php | 53 +
.../OppByLeadOutcomeDashlet.en_us.lang.php | 45 +
.../OppByLeadOutcomeDashlet.meta.php | 48 +
.../OppByLeadOutcomeDashlet.php | 129 +
.../OppByLeadSourceConfigure.tpl | 79 +
.../OppByLeadSourceDashlet.data.php | 53 +
.../OppByLeadSourceDashlet.en_us.lang.php | 45 +
.../OppByLeadSourceDashlet.meta.php | 48 +
.../OppByLeadSourceDashlet.php | 130 +
.../OutcomeByMonthConfigure.tpl | 100 +
.../OutcomeByMonthDashlet.data.php | 58 +
.../OutcomeByMonthDashlet.en_us.lang.php | 45 +
.../OutcomeByMonthDashlet.meta.php | 48 +
.../OutcomeByMonthDashlet.php | 138 +
.../PipelineBySalesStageConfigure.tpl | 100 +
.../PipelineBySalesStageDashlet.data.php | 58 +
...PipelineBySalesStageDashlet.en_us.lang.php | 45 +
.../PipelineBySalesStageDashlet.meta.php | 48 +
.../PipelineBySalesStageDashlet.php | 217 +
.../Dashlets/PredefinedChartDashletScript.tpl | 45 +
modules/Charts/DynamicAction.php | 51 +
modules/Charts/PredefinedChart.php | 525 +
modules/Charts/chartdefs.php | 122 +
.../code/Chart_lead_source_by_outcome.php | 449 +
.../code/Chart_my_pipeline_by_sales_stage.php | 495 +
.../Charts/code/Chart_outcome_by_month.php | 460 +
.../code/Chart_pipeline_by_lead_source.php | 431 +
.../code/Chart_pipeline_by_sales_stage.php | 617 +
modules/Charts/code/predefined_charts.php | 49 +
modules/Charts/language/en_us.lang.php | 104 +
modules/Configurator/Configurator.php | 291 +
modules/Configurator/Forms.php | 104 +
modules/Configurator/LogView.php | 154 +
modules/Configurator/Menu.php | 43 +
modules/Configurator/UploadFileCheck.php | 109 +
modules/Configurator/action_view_map.php | 39 +
modules/Configurator/controller.php | 191 +
modules/Configurator/language/en_us.lang.php | 419 +
.../metadata/SugarpdfSettingsdefs.php | 279 +
modules/Configurator/tpls/EditView.tpl | 428 +
.../Configurator/tpls/SugarpdfSettings.tpl | 221 +
.../tpls/SugarpdfSettingsFields.tpl | 96 +
modules/Configurator/tpls/addFontResult.tpl | 59 +
modules/Configurator/tpls/addFontView.tpl | 166 +
modules/Configurator/tpls/adminwizard.tpl | 794 +
modules/Configurator/tpls/fontmanager.tpl | 120 +
.../Configurator/views/view.addfontresult.php | 108 +
.../Configurator/views/view.addfontview.php | 86 +
.../Configurator/views/view.adminwizard.php | 123 +
modules/Configurator/views/view.edit.php | 138 +
.../Configurator/views/view.fontmanager.php | 245 +
.../views/view.sugarpdfsettings.php | 200 +
modules/Connectors/Connector.js | 56 +
modules/Connectors/ConnectorRecord.php | 51 +
modules/Connectors/Forms.php | 38 +
.../Connectors/InstallDefaultConnectors.php | 116 +
modules/Connectors/Menu.php | 63 +
modules/Connectors/action_view_map.php | 60 +
.../formatters/ext/rest/linkedin/linkedin.php | 60 +
.../ext/rest/linkedin/tpls/default.tpl | 80 +
.../ext/rest/linkedin/tpls/linkedin.gif | Bin 0 -> 325 bytes
.../ext/rest/twitter/tpls/twitter.gif | Bin 0 -> 115 bytes
.../sources/ext/rest/linkedin/config.php | 47 +
.../ext/rest/linkedin/language/en_us.lang.php | 56 +
.../sources/ext/rest/linkedin/linkedin.php | 69 +
.../sources/ext/rest/linkedin/mapping.php | 54 +
.../sources/ext/rest/linkedin/vardefs.php | 59 +
modules/Connectors/controller.php | 647 +
modules/Connectors/language/en_us.lang.php | 119 +
modules/Connectors/metadata/searchdefs.php | 43 +
modules/Connectors/tpls/administration.tpl | 102 +
.../Connectors/tpls/display_properties.tpl | 215 +
modules/Connectors/tpls/listview.tpl | 82 +
.../Connectors/tpls/mapping_properties.tpl | 85 +
modules/Connectors/tpls/modify_display.tpl | 188 +
modules/Connectors/tpls/modify_mapping.tpl | 183 +
modules/Connectors/tpls/modify_properties.tpl | 155 +
modules/Connectors/tpls/modify_search.tpl | 184 +
modules/Connectors/tpls/search_form.tpl | 72 +
modules/Connectors/tpls/search_properties.tpl | 221 +
modules/Connectors/tpls/source_properties.tpl | 82 +
modules/Connectors/tpls/tabs.css | 134 +
.../views/view.connectorsettings.php | 77 +
.../views/view.displayproperties.php | 115 +
.../views/view.mappingproperties.php | 158 +
.../Connectors/views/view.modifydisplay.php | 82 +
.../Connectors/views/view.modifymapping.php | 90 +
.../views/view.modifyproperties.php | 104 +
.../Connectors/views/view.modifysearch.php | 90 +
.../views/view.searchproperties.php | 126 +
.../views/view.sourceproperties.php | 88 +
modules/Contacts/AcceptDecline.php | 115 +
modules/Contacts/Address_picker.html | 118 +
modules/Contacts/BusinessCard.html | 164 +
modules/Contacts/BusinessCard.php | 367 +
modules/Contacts/Contact.js | 61 +
modules/Contacts/Contact.php | 615 +
modules/Contacts/ContactFormBase.php | 810 +
.../ContactOpportunityRelationship.php | 124 +
.../ContactOpportunityRelationshipEdit.html | 104 +
.../ContactOpportunityRelationshipEdit.php | 115 +
modules/Contacts/ContactsQuickCreate.php | 72 +
.../MyContactsDashlet.data.php | 87 +
.../MyContactsDashlet.meta.php | 47 +
.../MyContactsDashlet/MyContactsDashlet.php | 61 +
modules/Contacts/Email_picker.html | 178 +
modules/Contacts/MailMergePicker.html | 185 +
modules/Contacts/Menu.php | 53 +
modules/Contacts/Popup_picker.php | 390 +
modules/Contacts/Save.php | 50 +
.../SaveContactOpportunityRelationship.php | 81 +
modules/Contacts/ShowDuplicates.html | 68 +
modules/Contacts/ShowDuplicates.php | 174 +
modules/Contacts/SugarFeeds/ContactFeed.php | 57 +
modules/Contacts/controller.php | 68 +
modules/Contacts/field_arrays.php | 91 +
modules/Contacts/language/en_us.lang.php | 224 +
modules/Contacts/metadata/SearchFields.php | 74 +
.../Contacts/metadata/additionalDetails.php | 79 +
modules/Contacts/metadata/detailviewdefs.php | 215 +
modules/Contacts/metadata/editviewdefs.php | 213 +
modules/Contacts/metadata/listviewdefs.php | 179 +
modules/Contacts/metadata/metafiles.php | 51 +
modules/Contacts/metadata/popupdefs.php | 93 +
modules/Contacts/metadata/popupdefsEmail.php | 59 +
modules/Contacts/metadata/quickcreatedefs.php | 147 +
modules/Contacts/metadata/searchdefs.php | 154 +
modules/Contacts/metadata/studio.php | 66 +
modules/Contacts/metadata/subpaneldefs.php | 257 +
.../metadata/subpanels/ForAccounts.php | 106 +
.../Contacts/metadata/subpanels/ForCalls.php | 121 +
.../Contacts/metadata/subpanels/ForCases.php | 110 +
.../metadata/subpanels/ForContacts.php | 109 +
.../Contacts/metadata/subpanels/ForEmails.php | 104 +
.../metadata/subpanels/ForMeetings.php | 121 +
.../metadata/subpanels/ForOpportunities.php | 131 +
.../metadata/subpanels/ForProject.php | 81 +
.../Contacts/metadata/subpanels/default.php | 112 +
modules/Contacts/tpls/QuickCreate.tpl | 92 +
modules/Contacts/vardefs.php | 597 +
.../views/view.closecontactaddresspopup.php | 51 +
.../views/view.contactaddresspopup.php | 62 +
modules/Contacts/views/view.detail.php | 59 +
modules/Contacts/views/view.edit.php | 90 +
modules/Contacts/views/view.list.php | 48 +
.../Contacts/views/view.mailmergepopup.php | 62 +
modules/Contacts/views/view.retrieveemail.php | 77 +
.../views/view.validportalusername.php | 78 +
modules/Currencies/Currency.php | 630 +
modules/Currencies/EditCurrency.php | 54 +
modules/Currencies/EditView.js | 38 +
modules/Currencies/EditView.tpl | 81 +
modules/Currencies/Forms.php | 66 +
modules/Currencies/ListCurrency.php | 244 +
modules/Currencies/ListView.html | 72 +
modules/Currencies/Menu.php | 50 +
modules/Currencies/field_arrays.php | 57 +
modules/Currencies/index.php | 189 +
modules/Currencies/iso4217.php | 1850 +
modules/Currencies/language/en_us.lang.php | 83 +
modules/Currencies/vardefs.php | 143 +
.../DocumentRevisions/DocumentRevision.php | 303 +
modules/DocumentRevisions/Forms.php | 195 +
modules/DocumentRevisions/ListView.html | 106 +
modules/DocumentRevisions/Menu.php | 61 +
modules/DocumentRevisions/field_arrays.php | 72 +
.../DocumentRevisions/language/en_us.lang.php | 92 +
.../metadata/detailviewdefs.php | 76 +
.../metadata/editviewdefs.php | 75 +
.../metadata/subpanels/default.php | 80 +
.../DocumentRevisions/subpanels/default.php | 93 +
modules/DocumentRevisions/vardefs.php | 239 +
.../MyDocumentsDashlet.data.php | 102 +
.../MyDocumentsDashlet.meta.php | 45 +
.../MyDocumentsDashlet/MyDocumentsDashlet.php | 71 +
modules/Documents/Delete.php | 88 +
modules/Documents/Document.php | 341 +
.../Documents/DocumentExternalApiDropDown.php | 51 +
modules/Documents/DocumentSoap.php | 92 +
modules/Documents/GetLatestRevision.php | 53 +
modules/Documents/Menu.php | 61 +
modules/Documents/Popup.php | 47 +
modules/Documents/Popup_picker.html | 184 +
modules/Documents/Popup_picker.php | 220 +
modules/Documents/TreeData.php | 140 +
modules/Documents/action_view_map.php | 38 +
modules/Documents/documents.js | 49 +
modules/Documents/field_arrays.php | 84 +
modules/Documents/language/en_us.lang.php | 190 +
modules/Documents/metadata/SearchFields.php | 55 +
modules/Documents/metadata/detailviewdefs.php | 120 +
modules/Documents/metadata/editviewdefs.php | 128 +
modules/Documents/metadata/listviewdefs.php | 122 +
.../Documents/metadata/quickcreatedefs.php | 89 +
modules/Documents/metadata/searchdefs.php | 74 +
modules/Documents/metadata/studio.php | 66 +
modules/Documents/metadata/subpaneldefs.php | 178 +
.../metadata/subpanels/ForContractType.php | 91 +
.../Documents/metadata/subpanels/default.php | 111 +
modules/Documents/tpls/view.extdoc.tpl | 132 +
modules/Documents/vardefs.php | 433 +
modules/Documents/views/view.detail.php | 63 +
modules/Documents/views/view.edit.php | 175 +
modules/Documents/views/view.extdoc.php | 187 +
modules/DynamicFields/DynamicField.php | 923 +
modules/DynamicFields/FieldCases.php | 150 +
modules/DynamicFields/FieldViewer.php | 120 +
modules/DynamicFields/FieldsMetaData.php | 139 +
modules/DynamicFields/Save.php | 73 +
modules/DynamicFields/UpgradeFields.php | 134 +
modules/DynamicFields/language/en_us.lang.php | 130 +
.../templates/Fields/Forms/address.tpl | 86 +
.../templates/Fields/Forms/bool.tpl | 46 +
.../templates/Fields/Forms/coreBottom.tpl | 86 +
.../templates/Fields/Forms/coreTop.tpl | 94 +
.../templates/Fields/Forms/currency.tpl | 62 +
.../templates/Fields/Forms/date.php | 47 +
.../templates/Fields/Forms/date.tpl | 72 +
.../templates/Fields/Forms/datetimecombo.php | 84 +
.../templates/Fields/Forms/datetimecombo.tpl | 117 +
.../templates/Fields/Forms/encrypt.php | 48 +
.../templates/Fields/Forms/encrypt.tpl | 51 +
.../templates/Fields/Forms/enum.tpl | 78 +
.../templates/Fields/Forms/enum2.php | 115 +
.../templates/Fields/Forms/float.tpl | 91 +
.../templates/Fields/Forms/html.php | 55 +
.../templates/Fields/Forms/html.tpl | 75 +
.../templates/Fields/Forms/iframe.php | 48 +
.../templates/Fields/Forms/iframe.tpl | 116 +
.../templates/Fields/Forms/image.php | 63 +
.../templates/Fields/Forms/image.tpl | 78 +
.../templates/Fields/Forms/int.tpl | 133 +
.../templates/Fields/Forms/multienum.php | 46 +
.../templates/Fields/Forms/multienum.tpl | 89 +
.../templates/Fields/Forms/parent.php | 48 +
.../templates/Fields/Forms/parent.tpl | 88 +
.../templates/Fields/Forms/phone.php | 45 +
.../templates/Fields/Forms/phone.tpl | 87 +
.../templates/Fields/Forms/radioenum.php | 45 +
.../templates/Fields/Forms/relate.php | 75 +
.../templates/Fields/Forms/relate.tpl | 54 +
.../templates/Fields/Forms/text.tpl | 76 +
.../templates/Fields/Forms/url.php | 61 +
.../templates/Fields/Forms/url.tpl | 118 +
.../templates/Fields/Forms/varchar.tpl | 84 +
.../templates/Fields/TemplateAddress.php | 67 +
.../Fields/TemplateAddressCountry.php | 53 +
.../templates/Fields/TemplateBoolean.php | 135 +
.../templates/Fields/TemplateCurrency.php | 105 +
.../templates/Fields/TemplateCurrencyId.php | 63 +
.../templates/Fields/TemplateDate.php | 109 +
.../Fields/TemplateDatetimecombo.php | 193 +
.../templates/Fields/TemplateDecimal.php | 87 +
.../templates/Fields/TemplateEmail.php | 48 +
.../templates/Fields/TemplateEncrypt.php | 61 +
.../templates/Fields/TemplateEnum.php | 204 +
.../templates/Fields/TemplateField.php | 478 +
.../templates/Fields/TemplateFloat.php | 103 +
.../templates/Fields/TemplateHTML.php | 119 +
.../templates/Fields/TemplateIFrame.php | 64 +
.../templates/Fields/TemplateId.php | 47 +
.../templates/Fields/TemplateImage.php | 84 +
.../templates/Fields/TemplateInt.php | 122 +
.../templates/Fields/TemplateMultiEnum.php | 178 +
.../templates/Fields/TemplateParent.php | 107 +
.../templates/Fields/TemplateParentType.php | 53 +
.../templates/Fields/TemplatePhone.php | 69 +
.../templates/Fields/TemplateRadioEnum.php | 136 +
.../templates/Fields/TemplateRange.php | 287 +
.../Fields/TemplateRelatedTextField.php | 255 +
.../templates/Fields/TemplateText.php | 80 +
.../templates/Fields/TemplateTextArea.php | 109 +
.../templates/Fields/TemplateURL.php | 78 +
.../templates/Files/DetailView.php | 49 +
.../templates/Files/EditView.php | 49 +
modules/DynamicFields/vardefs.php | 69 +
modules/EAPM/CheckLogins.php | 89 +
modules/EAPM/EAPM.php | 230 +
modules/EAPM/EAPMEdit.js | 41 +
modules/EAPM/action_view_map.php | 38 +
modules/EAPM/controller.php | 186 +
modules/EAPM/language/en_us.lang.php | 106 +
modules/EAPM/metadata/SearchFields.php | 57 +
modules/EAPM/metadata/detailviewdefs.php | 85 +
modules/EAPM/metadata/editviewdefs.php | 84 +
modules/EAPM/metadata/listviewdefs.php | 69 +
modules/EAPM/metadata/metafiles.php | 52 +
modules/EAPM/metadata/popupdefs.php | 52 +
modules/EAPM/metadata/quickcreatedefs.php | 64 +
modules/EAPM/metadata/searchdefs.php | 62 +
modules/EAPM/metadata/subpanels/default.php | 77 +
modules/EAPM/tpls/DetailViewFooter.tpl | 44 +
modules/EAPM/tpls/EditViewFooter.tpl | 50 +
modules/EAPM/tpls/EditViewHeader.tpl | 76 +
modules/EAPM/vardefs.php | 200 +
modules/EAPM/views/view.detail.php | 111 +
modules/EAPM/views/view.edit.php | 121 +
modules/EmailAddresses/EmailAddress.php | 68 +
.../EmailAddresses/language/en_us.lang.php | 55 +
modules/EmailAddresses/vardefs.php | 59 +
modules/EmailMan/EmailMan.php | 1013 +
modules/EmailMan/EmailManDelivery.php | 266 +
modules/EmailMan/Forms.php | 155 +
modules/EmailMan/Menu.php | 47 +
modules/EmailMan/Save.php | 120 +
modules/EmailMan/action_view_map.php | 39 +
modules/EmailMan/field_arrays.php | 92 +
modules/EmailMan/language/en_us.lang.php | 159 +
modules/EmailMan/metadata/SearchFields.php | 45 +
modules/EmailMan/metadata/listviewdefs.php | 78 +
modules/EmailMan/metadata/searchdefs.php | 61 +
.../EmailMan/metadata/subpanels/default.php | 78 +
modules/EmailMan/subpanels/default.php | 78 +
modules/EmailMan/testOutboundEmail.php | 73 +
modules/EmailMan/tpls/campaignconfig.tpl | 125 +
modules/EmailMan/tpls/config.tpl | 700 +
modules/EmailMan/vardefs.php | 176 +
.../EmailMan/views/view.campaignconfig.php | 130 +
modules/EmailMan/views/view.config.php | 183 +
modules/EmailMan/views/view.list.php | 100 +
modules/EmailMarketing/Delete.php | 69 +
modules/EmailMarketing/DetailView.html | 95 +
modules/EmailMarketing/DetailView.php | 178 +
modules/EmailMarketing/EditView.html | 226 +
modules/EmailMarketing/EditView.php | 224 +
modules/EmailMarketing/EmailMarketing.php | 173 +
modules/EmailMarketing/Forms.php | 83 +
modules/EmailMarketing/Menu.php | 57 +
modules/EmailMarketing/Save.php | 142 +
modules/EmailMarketing/SubPanelView.html | 65 +
modules/EmailMarketing/SubPanelView.php | 90 +
modules/EmailMarketing/field_arrays.php | 58 +
.../EmailMarketing/language/en_us.lang.php | 108 +
.../EmailMarketing/metadata/subpaneldefs.php | 67 +
.../metadata/subpanels/default.php | 89 +
modules/EmailMarketing/subpanels/default.php | 88 +
modules/EmailMarketing/vardefs.php | 226 +
modules/EmailTemplates/AttachFiles.php | 74 +
modules/EmailTemplates/CheckDeletable.php | 84 +
modules/EmailTemplates/Delete.php | 62 +
modules/EmailTemplates/DetailView.html | 128 +
modules/EmailTemplates/DetailView.php | 183 +
modules/EmailTemplates/EditView.html | 250 +
modules/EmailTemplates/EditView.php | 349 +
modules/EmailTemplates/EditViewMain.html | 257 +
modules/EmailTemplates/EmailTemplate.js | 60 +
modules/EmailTemplates/EmailTemplate.php | 592 +
.../EmailTemplates/EmailTemplateFormBase.php | 370 +
modules/EmailTemplates/Menu.php | 47 +
.../PopupDocumentsCampaignTemplate.html | 110 +
.../PopupDocumentsCampaignTemplate.php | 147 +
modules/EmailTemplates/Save.php | 68 +
modules/EmailTemplates/field_arrays.php | 61 +
.../EmailTemplates/language/en_us.lang.php | 116 +
.../EmailTemplates/metadata/SearchFields.php | 43 +
.../EmailTemplates/metadata/listviewdefs.php | 67 +
.../EmailTemplates/metadata/searchdefs.php | 67 +
modules/EmailTemplates/vardefs.php | 204 +
modules/Emails/Check.php | 111 +
modules/Emails/Compose.php | 266 +
.../MyEmailsDashlet/MyEmailsDashlet.data.php | 83 +
.../MyEmailsDashlet/MyEmailsDashlet.meta.php | 47 +
.../MyEmailsDashlet/MyEmailsDashlet.php | 124 +
modules/Emails/Delete.php | 72 +
modules/Emails/DetailView.html | 165 +
modules/Emails/DetailView.php | 356 +
modules/Emails/DetailViewSent.html | 182 +
modules/Emails/EditView.html | 434 +
modules/Emails/EditView.php | 780 +
modules/Emails/EditViewArchive.html | 319 +
modules/Emails/Email.php | 3125 ++
modules/Emails/EmailUI.css | 496 +
modules/Emails/EmailUI.php | 2960 ++
modules/Emails/EmailUIAjax.php | 1622 +
modules/Emails/GenerateQuickComposeFrame.php | 50 +
modules/Emails/Grab.php | 73 +
modules/Emails/ListViewDrafts.html | 72 +
modules/Emails/ListViewGroup.php | 264 +
modules/Emails/ListViewGroupInbox.html | 83 +
modules/Emails/ListViewHome.html | 68 +
modules/Emails/ListViewHome.php | 77 +
modules/Emails/ListViewMyInbox.html | 81 +
modules/Emails/ListViewSent.html | 70 +
modules/Emails/MassDelete.php | 61 +
modules/Emails/Menu.php | 60 +
modules/Emails/PessimisticLock.php | 111 +
modules/Emails/Popup.php | 54 +
modules/Emails/PopupDocuments.html | 111 +
modules/Emails/PopupDocuments.php | 154 +
modules/Emails/Popup_picker.html | 129 +
modules/Emails/Popup_picker.php | 151 +
modules/Emails/Save.php | 291 +
modules/Emails/SearchForm.html | 117 +
modules/Emails/SearchFormGroupInbox.html | 73 +
modules/Emails/SearchFormMyInbox.html | 71 +
modules/Emails/SearchFormSent.html | 70 +
modules/Emails/Status.html | 43 +
modules/Emails/Status.php | 112 +
modules/Emails/SubPanelViewRecipients.html | 94 +
modules/Emails/SubPanelViewRecipients.php | 150 +
modules/Emails/SugarRoutingAsync.php | 118 +
modules/Emails/field_arrays.php | 82 +
modules/Emails/images/autofit.gif | Bin 0 -> 63 bytes
modules/Emails/images/colsView.gif | Bin 0 -> 56 bytes
modules/Emails/images/email.gif | Bin 0 -> 888 bytes
modules/Emails/images/emailGroup.gif | Bin 0 -> 192 bytes
modules/Emails/images/fullscreen.gif | Bin 0 -> 78 bytes
modules/Emails/images/leftarrow_inline.gif | Bin 0 -> 898 bytes
modules/Emails/images/rightarrow_inline.gif | Bin 0 -> 900 bytes
modules/Emails/images/rowsView.gif | Bin 0 -> 79 bytes
modules/Emails/images/sugar.gif | Bin 0 -> 550 bytes
modules/Emails/images/sugarDynamic.gif | Bin 0 -> 226 bytes
modules/Emails/images/sugarGroup.gif | Bin 0 -> 228 bytes
modules/Emails/index.php | 54 +
modules/Emails/javascript/Email.js | 1001 +
modules/Emails/javascript/EmailUI.js | 3542 ++
modules/Emails/javascript/EmailUICompose.js | 2436 ++
modules/Emails/javascript/EmailUIShared.js | 90 +
modules/Emails/javascript/ajax.js | 1618 +
modules/Emails/javascript/complexLayout.js | 273 +
.../Emails/javascript/composeEmailTemplate.js | 246 +
.../javascript/displayOneEmailTemplate.js | 89 +
.../Emails/javascript/email_popup_helper.js | 154 +
modules/Emails/javascript/grid.js | 650 +
modules/Emails/javascript/init.js | 461 +
modules/Emails/javascript/vars.js | 53 +
modules/Emails/javascript/viewPrintable.js | 105 +
modules/Emails/language/en_us.lang.php | 371 +
modules/Emails/metadata/additionalDetails.php | 89 +
modules/Emails/metadata/popupdefs.php | 54 +
modules/Emails/metadata/qcmodulesdefs.php | 45 +
modules/Emails/metadata/subpaneldefs.php | 175 +
.../Emails/metadata/subpanels/ForContacts.php | 46 +
.../Emails/metadata/subpanels/ForHistory.php | 126 +
.../Emails/metadata/subpanels/ForQueues.php | 116 +
.../subpanels/ForUnlinkedEmailHistory.php | 118 +
.../Emails/metadata/subpanels/ForUsers.php | 46 +
modules/Emails/subpanels/ForContacts.php | 46 +
modules/Emails/subpanels/ForHistory.php | 107 +
modules/Emails/subpanels/ForQueues.php | 116 +
modules/Emails/subpanels/ForUsers.php | 46 +
modules/Emails/templates/_baseConfigData.tpl | 45 +
modules/Emails/templates/_baseEmail.tpl | 172 +
modules/Emails/templates/_baseJsVars.tpl | 58 +
modules/Emails/templates/_blank.html | 38 +
.../Emails/templates/_createGroupFolder.tpl | 147 +
modules/Emails/templates/addressBook.tpl | 47 +
modules/Emails/templates/addressSearch.tpl | 86 +
.../Emails/templates/addressSearchContent.tpl | 67 +
modules/Emails/templates/advancedSearch.tpl | 119 +
modules/Emails/templates/assignTo.tpl | 67 +
.../Emails/templates/dceMenuQuickCreate.tpl | 68 +
.../Emails/templates/editAccountDialogue.tpl | 245 +
modules/Emails/templates/editContact.tpl | 90 +
modules/Emails/templates/editMailingList.tpl | 81 +
modules/Emails/templates/emailDetailView.tpl | 128 +
modules/Emails/templates/emailSettings.tpl | 47 +
.../templates/emailSettingsAccountDetails.tpl | 105 +
.../templates/emailSettingsAccounts.tpl | 51 +
.../Emails/templates/emailSettingsFolders.tpl | 67 +
.../Emails/templates/emailSettingsGeneral.tpl | 116 +
.../Emails/templates/emailSettingsRules.tpl | 48 +
modules/Emails/templates/importRelate.tpl | 128 +
modules/Emails/templates/outboundDialog.tpl | 139 +
.../Emails/templates/outboundDialogTest.tpl | 59 +
modules/Emails/templates/overlay.tpl | 59 +
modules/Emails/templates/successMessage.tpl | 49 +
modules/Emails/vardefs.php | 501 +
modules/Emails/views/view.classic.config.php | 60 +
modules/Emails/views/view.modulelistmenu.php | 55 +
modules/Emails/views/view.quickcreate.php | 84 +
modules/Employees/Employee.php | 230 +
modules/Employees/Error.php | 52 +
modules/Employees/Forms.php | 138 +
modules/Employees/Menu.php | 61 +
modules/Employees/Popup_picker.html | 113 +
modules/Employees/Popup_picker.php | 163 +
modules/Employees/Save.php | 98 +
modules/Employees/WapAuthenticate.php | 137 +
modules/Employees/WapMenu.php | 56 +
modules/Employees/controller.php | 69 +
modules/Employees/field_arrays.php | 50 +
modules/Employees/language/en_us.lang.php | 136 +
modules/Employees/metadata/SearchFields.php | 69 +
modules/Employees/metadata/detailviewdefs.php | 167 +
modules/Employees/metadata/editviewdefs.php | 122 +
modules/Employees/metadata/listviewdefs.php | 87 +
modules/Employees/metadata/searchdefs.php | 117 +
modules/Employees/vardefs.php | 49 +
modules/Employees/views/view.detail.php | 79 +
modules/Employees/views/view.edit.php | 75 +
modules/Employees/views/view.list.php | 72 +
modules/Groups/Delete.php | 47 +
modules/Groups/DetailView.html | 71 +
modules/Groups/DetailView.php | 77 +
modules/Groups/EditView.html | 92 +
modules/Groups/EditView.php | 82 +
modules/Groups/Forms.php | 40 +
modules/Groups/Group.php | 76 +
modules/Groups/ListView.html | 66 +
modules/Groups/ListView.php | 54 +
modules/Groups/Menu.php | 45 +
modules/Groups/Save.php | 80 +
modules/Groups/index.php | 40 +
modules/Groups/language/en_us.lang.php | 51 +
modules/Groups/vardefs.php | 40 +
modules/Help/Menu.php | 59 +
modules/Help/index.php | 48 +
modules/Help/language/en_us.lang.php | 65 +
modules/History/language/en_us.lang.php | 120 +
modules/History/metadata/subpaneldefs.php | 341 +
modules/Home/About.php | 200 +
modules/Home/AddToFavorites.php | 53 +
.../ChartsDashlet.en_us.lang.php | 45 +
.../ChartsDashlet/ChartsDashlet.meta.php | 48 +
.../Dashlets/ChartsDashlet/ChartsDashlet.php | 185 +
.../ChartsDashlet/ChartsDashletScript.tpl | 45 +
.../InvadersDashlet.en_us.lang.php | 50 +
.../InvadersDashlet/InvadersDashlet.icon.jpg | Bin 0 -> 81 bytes
.../InvadersDashlet/InvadersDashlet.meta.php | 48 +
.../InvadersDashlet/InvadersDashlet.php | 160 +
.../InvadersDashlet/InvadersDashlet.tpl | 97 +
.../InvadersDashlet/InvadersDashletScript.tpl | 262 +
.../InvadersDashlet/InvadersOptions.tpl | 71 +
.../InvadersDashlet/sprites/alien.png | Bin 0 -> 1192 bytes
.../Dashlets/InvadersDashlet/sprites/bg.png | Bin 0 -> 22435 bytes
.../Dashlets/InvadersDashlet/sprites/cube.png | Bin 0 -> 844 bytes
.../InvadersDashlet/sprites/player.png | Bin 0 -> 1355 bytes
.../JotPadDashlet.en_us.lang.php | 51 +
.../JotPadDashlet/JotPadDashlet.meta.php | 47 +
.../Dashlets/JotPadDashlet/JotPadDashlet.php | 177 +
.../Dashlets/JotPadDashlet/JotPadDashlet.tpl | 45 +
.../JotPadDashlet/JotPadDashletOptions.tpl | 71 +
.../JotPadDashlet/JotPadDashletScript.tpl | 89 +
.../RSSDashlet/RSSDashlet.en_us.lang.php | 54 +
.../Dashlets/RSSDashlet/RSSDashlet.icon.jpg | Bin 0 -> 81 bytes
.../Dashlets/RSSDashlet/RSSDashlet.meta.php | 46 +
.../Home/Dashlets/RSSDashlet/RSSDashlet.php | 185 +
.../Home/Dashlets/RSSDashlet/RSSDashlet.tpl | 44 +
.../Dashlets/RSSDashlet/RSSDashletOptions.tpl | 89 +
.../SugarNewsDashlet.meta.php | 45 +
.../SugarNewsDashlet/SugarNewsDashlet.php | 119 +
.../Dashlets/SugarNewsDashlet/configure.tpl | 86 +
.../Home/Dashlets/iFrameDashlet/configure.tpl | 86 +
.../iFrameDashlet/iFrameDashlet.meta.php | 45 +
.../Dashlets/iFrameDashlet/iFrameDashlet.php | 133 +
modules/Home/DynamicAction.php | 53 +
modules/Home/Home.html | 61 +
modules/Home/Home.tpl | 220 +
modules/Home/LastViewed.php | 72 +
modules/Home/Menu.php | 46 +
modules/Home/PopupSugar.php | 146 +
modules/Home/SaveSubpanelLayout.php | 60 +
modules/Home/SubpanelCreates.php | 74 +
modules/Home/TrainingPortal.php | 65 +
modules/Home/TrainingPortal.tpl | 44 +
modules/Home/UnifiedSearch.php | 57 +
modules/Home/UnifiedSearchAdvanced.php | 753 +
modules/Home/UnifiedSearchAdvanced.tpl | 81 +
modules/Home/UnifiedSearchAdvancedForm.tpl | 179 +
modules/Home/UnifiedSearchAdvancedResults.tpl | 93 +
modules/Home/about.js | 35 +
modules/Home/action_view_map.php | 38 +
modules/Home/dashlets.php | 56 +
modules/Home/index.php | 307 +
modules/Home/language/en_us.lang.php | 247 +
modules/Home/quicksearchQuery.php | 342 +
modules/Home/sitemap.php | 151 +
modules/Home/sitemap.tpl | 80 +
.../views/view.additionaldetailsretrieve.php | 98 +
modules/Home/views/view.list.php | 52 +
modules/Home/views/view.modulelistmenu.php | 55 +
modules/Import/Forms.php | 190 +
modules/Import/ImportCacheFiles.php | 125 +
modules/Import/ImportDuplicateCheck.php | 179 +
modules/Import/ImportFieldSanitize.php | 304 +
modules/Import/ImportFile.php | 329 +
modules/Import/ImportFileSplitter.php | 206 +
modules/Import/ImportMap.php | 358 +
modules/Import/ImportMapAct.php | 129 +
modules/Import/ImportMapCsv.php | 62 +
modules/Import/ImportMapOther.php | 157 +
modules/Import/ImportMapOutlook.php | 96 +
modules/Import/ImportMapSalesforce.php | 161 +
modules/Import/ImportMapTab.php | 64 +
modules/Import/Menu.php | 47 +
modules/Import/UsersLastImport.php | 254 +
modules/Import/controller.php | 126 +
modules/Import/language/en_us.lang.php | 315 +
modules/Import/tpls/error.tpl | 59 +
modules/Import/tpls/last.tpl | 93 +
modules/Import/tpls/step1.tpl | 195 +
modules/Import/tpls/step2.tpl | 112 +
modules/Import/tpls/step3.tpl | 369 +
modules/Import/tpls/undo.tpl | 65 +
modules/Import/vardefs.php | 237 +
modules/Import/views/view.error.php | 102 +
modules/Import/views/view.last.php | 303 +
modules/Import/views/view.step1.php | 324 +
modules/Import/views/view.step2.php | 252 +
modules/Import/views/view.step3.php | 793 +
modules/Import/views/view.step4.php | 686 +
modules/Import/views/view.undo.php | 129 +
modules/InboundEmail/Delete.php | 48 +
modules/InboundEmail/DetailView.html | 248 +
modules/InboundEmail/DetailView.php | 303 +
modules/InboundEmail/EditGroupFolder.php | 123 +
modules/InboundEmail/EditView.html | 574 +
modules/InboundEmail/EditView.php | 366 +
modules/InboundEmail/InboundEmail.js | 94 +
modules/InboundEmail/InboundEmail.php | 6402 ++++
modules/InboundEmail/InboundEmailTest.php | 42 +
modules/InboundEmail/ListView.html | 85 +
modules/InboundEmail/ListView.php | 75 +
modules/InboundEmail/Menu.php | 53 +
modules/InboundEmail/Popup.php | 179 +
modules/InboundEmail/Save.php | 274 +
modules/InboundEmail/SaveGroupFolder.php | 66 +
.../InboundEmail/ShowInboundFoldersList.php | 323 +
modules/InboundEmail/View.html | 84 +
modules/InboundEmail/field_arrays.php | 70 +
modules/InboundEmail/index.php | 49 +
modules/InboundEmail/language/en_us.lang.php | 198 +
modules/InboundEmail/vardefs.php | 284 +
modules/LabelEditor/EditView.html | 69 +
modules/LabelEditor/EditView.php | 92 +
modules/LabelEditor/Forms.php | 53 +
modules/LabelEditor/LabelList.php | 96 +
modules/LabelEditor/Menu.php | 43 +
modules/LabelEditor/Save.php | 68 +
modules/LabelEditor/language/en_us.lang.php | 44 +
modules/Leads/Capture.php | 124 +
.../MyLeadsDashlet/MyLeadsDashlet.data.php | 87 +
.../MyLeadsDashlet/MyLeadsDashlet.meta.php | 45 +
.../MyLeadsDashlet/MyLeadsDashlet.php | 60 +
modules/Leads/Lead.js | 48 +
modules/Leads/Lead.php | 585 +
modules/Leads/LeadFormBase.php | 379 +
modules/Leads/LeadsQuickCreate.php | 74 +
modules/Leads/Menu.php | 51 +
modules/Leads/MyLeads.html | 62 +
modules/Leads/MyLeads.php | 60 +
modules/Leads/Popup_picker.html | 116 +
modules/Leads/Save.php | 49 +
modules/Leads/SubPanelView.html | 62 +
modules/Leads/SubPanelView.php | 77 +
modules/Leads/SugarFeeds/LeadFeed.php | 66 +
modules/Leads/action_view_map.php | 42 +
modules/Leads/controller.php | 85 +
modules/Leads/field_arrays.php | 100 +
modules/Leads/language/en_us.lang.php | 254 +
modules/Leads/metadata/SearchFields.php | 82 +
modules/Leads/metadata/additionalDetails.php | 83 +
modules/Leads/metadata/convertdefs.php | 351 +
modules/Leads/metadata/detailviewdefs.php | 184 +
modules/Leads/metadata/editviewdefs.php | 153 +
modules/Leads/metadata/listviewdefs.php | 228 +
modules/Leads/metadata/popupdefs.php | 148 +
modules/Leads/metadata/quickcreatedefs.php | 174 +
modules/Leads/metadata/searchdefs.php | 167 +
modules/Leads/metadata/studio.php | 66 +
modules/Leads/metadata/subpaneldefs.php | 167 +
modules/Leads/metadata/subpanels/ForCalls.php | 121 +
.../Leads/metadata/subpanels/ForEmails.php | 96 +
.../Leads/metadata/subpanels/ForMeetings.php | 105 +
modules/Leads/metadata/subpanels/default.php | 115 +
modules/Leads/tpls/ConvertLead.tpl | 167 +
modules/Leads/tpls/ConvertLeadFooter.tpl | 62 +
modules/Leads/tpls/ConvertLeadHeader.tpl | 78 +
modules/Leads/tpls/DetailViewHeader.tpl | 81 +
modules/Leads/tpls/QuickCreate.tpl | 96 +
modules/Leads/vardefs.php | 551 +
modules/Leads/views/view.convertlead.php | 741 +
modules/Leads/views/view.list.php | 48 +
modules/MailMerge/DetailView.php | 40 +
modules/MailMerge/EditView.php | 40 +
modules/MailMerge/MailMerge.php | 153 +
modules/MailMerge/Menu.php | 51 +
modules/MailMerge/Merge.html | 63 +
modules/MailMerge/Merge.php | 171 +
modules/MailMerge/Save.php | 90 +
modules/MailMerge/Step1.html | 157 +
modules/MailMerge/Step1.php | 274 +
modules/MailMerge/Step2.html | 383 +
modules/MailMerge/Step2.php | 174 +
modules/MailMerge/Step3.html | 98 +
modules/MailMerge/Step3.php | 274 +
modules/MailMerge/Step4.html | 111 +
modules/MailMerge/Step4.php | 153 +
modules/MailMerge/Step5.html | 79 +
modules/MailMerge/Step5.php | 60 +
modules/MailMerge/get_doc.php | 63 +
modules/MailMerge/index.php | 59 +
modules/MailMerge/language/en_us.lang.php | 79 +
modules/MailMerge/modules_array.php | 44 +
.../MyMeetingsDashlet.data.php | 91 +
.../MyMeetingsDashlet.meta.php | 47 +
.../MyMeetingsDashlet/MyMeetingsDashlet.php | 188 +
modules/Meetings/JoinExternalMeeting.php | 83 +
modules/Meetings/Meeting.php | 740 +
modules/Meetings/MeetingFormBase.php | 457 +
modules/Meetings/MeetingsQuickCreate.php | 165 +
modules/Meetings/Menu.php | 54 +
modules/Meetings/Save.php | 50 +
modules/Meetings/SubPanelViewInvitees.html | 95 +
modules/Meetings/SubPanelViewInvitees.php | 150 +
modules/Meetings/action_view_map.php | 38 +
modules/Meetings/field_arrays.php | 69 +
modules/Meetings/jsclass_scheduler.js | 109 +
modules/Meetings/language/en_us.lang.php | 143 +
modules/Meetings/metadata/SearchFields.php | 69 +
.../Meetings/metadata/additionalDetails.php | 85 +
modules/Meetings/metadata/detailviewdefs.php | 143 +
modules/Meetings/metadata/editviewdefs.php | 171 +
modules/Meetings/metadata/listviewdefs.php | 123 +
modules/Meetings/metadata/quickcreatedefs.php | 177 +
modules/Meetings/metadata/searchdefs.php | 118 +
modules/Meetings/metadata/studio.php | 66 +
modules/Meetings/metadata/subpaneldefs.php | 98 +
.../metadata/subpanels/ForActivities.php | 120 +
.../metadata/subpanels/ForHistory.php | 132 +
.../Meetings/metadata/subpanels/default.php | 78 +
modules/Meetings/tpls/QuickCreate.tpl | 146 +
modules/Meetings/tpls/extMeetingNoStart.tpl | 40 +
.../Meetings/tpls/extMeetingNotInvited.tpl | 40 +
modules/Meetings/tpls/footer.tpl | 89 +
modules/Meetings/tpls/header.tpl | 42 +
modules/Meetings/vardefs.php | 383 +
modules/Meetings/views/view.edit.php | 91 +
modules/Meetings/views/view.listbytype.php | 124 +
modules/MergeRecords/Menu.php | 50 +
modules/MergeRecords/Merge.js | 93 +
modules/MergeRecords/MergeField.html | 125 +
modules/MergeRecords/MergeRecord.php | 348 +
modules/MergeRecords/SaveMerge.php | 219 +
modules/MergeRecords/SearchForm.html | 103 +
modules/MergeRecords/Step1.html | 130 +
modules/MergeRecords/Step1.php | 189 +
modules/MergeRecords/Step2.html | 42 +
modules/MergeRecords/Step2.php | 214 +
modules/MergeRecords/Step3.html | 239 +
modules/MergeRecords/Step3.php | 545 +
modules/MergeRecords/controller.php | 50 +
modules/MergeRecords/index.php | 107 +
modules/MergeRecords/language/en_us.lang.php | 84 +
modules/MergeRecords/vardefs.php | 50 +
modules/ModuleBuilder/Forms.php | 38 +
modules/ModuleBuilder/MB/AjaxCompose.php | 103 +
modules/ModuleBuilder/MB/MBField.php | 101 +
modules/ModuleBuilder/MB/MBLanguage.php | 253 +
modules/ModuleBuilder/MB/MBModule.php | 801 +
modules/ModuleBuilder/MB/MBPackage.php | 787 +
modules/ModuleBuilder/MB/MBPackageTree.php | 79 +
modules/ModuleBuilder/MB/MBRelationship.php | 176 +
modules/ModuleBuilder/MB/MBVardefs.php | 146 +
modules/ModuleBuilder/MB/ModuleBuilder.php | 148 +
modules/ModuleBuilder/MB/header.php | 36 +
.../ModuleBuilder/Module/DropDownBrowser.php | 64 +
modules/ModuleBuilder/Module/DropDownTree.php | 53 +
modules/ModuleBuilder/Module/MainTree.php | 48 +
.../ModuleBuilder/Module/StudioBrowser.php | 86 +
modules/ModuleBuilder/Module/StudioModule.php | 430 +
.../Module/StudioModuleFactory.php | 55 +
modules/ModuleBuilder/Module/StudioTree.php | 52 +
modules/ModuleBuilder/action_view_map.php | 75 +
modules/ModuleBuilder/controller.php | 782 +
.../ModuleBuilder/javascript/JSTransaction.js | 79 +
.../ModuleBuilder/javascript/ModuleBuilder.js | 1060 +
.../ModuleBuilder/javascript/SimpleList.js | 309 +
modules/ModuleBuilder/javascript/studio2.js | 914 +
.../javascript/studio2FieldDD.js | 315 +
.../ModuleBuilder/javascript/studio2ListDD.js | 188 +
.../javascript/studio2PanelDD.js | 198 +
.../ModuleBuilder/javascript/studio2RowDD.js | 185 +
.../javascript/studiotabgroups.js | 197 +
.../javascript/wizardTemplate.js | 37 +
modules/ModuleBuilder/language/en_us.lang.php | 707 +
.../parsers/ModuleBuilderParser.php | 177 +
.../ModuleBuilder/parsers/ParserFactory.php | 120 +
.../ModuleBuilder/parsers/StandardField.php | 117 +
modules/ModuleBuilder/parsers/constants.php | 69 +
.../ModuleBuilder/parsers/parser.dropdown.php | 211 +
.../ModuleBuilder/parsers/parser.label.php | 190 +
.../parsers/parser.modifylayoutview.php | 521 +
.../parsers/parser.modifylistview.php | 331 +
.../parsers/parser.modifysubpanel.php | 257 +
.../relationships/AbstractRelationship.php | 655 +
.../relationships/AbstractRelationships.php | 557 +
.../relationships/ActivitiesRelationship.php | 276 +
.../relationships/DeployedRelationships.php | 387 +
.../relationships/ManyToManyRelationship.php | 106 +
.../relationships/ManyToOneRelationship.php | 150 +
.../relationships/OneToManyRelationship.php | 154 +
.../relationships/OneToOneRelationship.php | 132 +
.../relationships/RelationshipFactory.php | 82 +
.../relationships/RelationshipsInterface.php | 56 +
.../relationships/UndeployedRelationships.php | 416 +
.../views/AbstractMetaDataImplementation.php | 304 +
.../parsers/views/AbstractMetaDataParser.php | 133 +
.../parsers/views/DashletMetaDataParser.php | 176 +
.../views/DeployedMetaDataImplementation.php | 376 +
.../views/DeployedSubpanelImplementation.php | 169 +
.../views/GridLayoutMetaDataParser.php | 807 +
.../ModuleBuilder/parsers/views/History.php | 220 +
.../parsers/views/HistoryInterface.php | 76 +
.../views/ListLayoutMetaDataParser.php | 375 +
.../views/MetaDataImplementationInterface.php | 46 +
.../parsers/views/MetaDataParserInterface.php | 51 +
.../parsers/views/PopupMetaDataParser.php | 234 +
.../views/SearchViewMetaDataParser.php | 211 +
.../parsers/views/SubpanelMetaDataParser.php | 162 +
.../UndeployedMetaDataImplementation.php | 211 +
.../UndeployedSubpanelImplementation.php | 114 +
modules/ModuleBuilder/tpls/LayoutEditor.css | 91 +
modules/ModuleBuilder/tpls/ListEditor.css | 78 +
modules/ModuleBuilder/tpls/MB.css | 155 +
modules/ModuleBuilder/tpls/MBModule/Class.tpl | 71 +
.../tpls/MBModule/DeveloperClass.tpl | 48 +
modules/ModuleBuilder/tpls/MBModule/Menu.tpl | 44 +
.../ModuleBuilder/tpls/MBModule/Studio.tpl | 41 +
.../ModuleBuilder/tpls/MBModule/dropdown.css | 84 +
.../ModuleBuilder/tpls/MBModule/dropdown.tpl | 161 +
.../ModuleBuilder/tpls/MBModule/dropdowns.tpl | 72 +
modules/ModuleBuilder/tpls/MBModule/field.tpl | 123 +
.../ModuleBuilder/tpls/MBModule/fields.tpl | 80 +
modules/ModuleBuilder/tpls/MBModule/form.tpl | 0
.../ModuleBuilder/tpls/MBModule/language.tpl | 39 +
modules/ModuleBuilder/tpls/MBModule/main.tpl | 0
.../ModuleBuilder/tpls/MBModule/module.tpl | 129 +
.../ModuleBuilder/tpls/MBModule/vardef.tpl | 50 +
.../tpls/MBPackage/appLanguage.tpl | 0
.../ModuleBuilder/tpls/MBPackage/deploy.tpl | 39 +
.../ModuleBuilder/tpls/MBPackage/package.tpl | 170 +
.../ModuleBuilder/tpls/Preview/layoutView.tpl | 127 +
.../ModuleBuilder/tpls/Preview/listView.tpl | 96 +
.../tpls/assistantJavascript.tpl | 55 +
modules/ModuleBuilder/tpls/editProperty.tpl | 109 +
.../tpls/exportcustomizations.tpl | 115 +
modules/ModuleBuilder/tpls/history.tpl | 50 +
modules/ModuleBuilder/tpls/includes.tpl | 67 +
modules/ModuleBuilder/tpls/index.tpl | 95 +
modules/ModuleBuilder/tpls/labels.tpl | 83 +
modules/ModuleBuilder/tpls/layoutView.tpl | 282 +
modules/ModuleBuilder/tpls/listView.tpl | 224 +
modules/ModuleBuilder/tpls/main.tpl | 51 +
modules/ModuleBuilder/tpls/resetModule.tpl | 55 +
.../ModuleBuilder/tpls/studioRelationship.tpl | 232 +
.../tpls/studioRelationships.tpl | 111 +
modules/ModuleBuilder/tpls/tabBG.png | Bin 0 -> 1041 bytes
modules/ModuleBuilder/tpls/wizard.tpl | 96 +
modules/ModuleBuilder/views/view.dashlet.php | 224 +
.../ModuleBuilder/views/view.deletemodule.php | 61 +
.../views/view.deletepackage.php | 64 +
.../views/view.displaydeploy.php | 66 +
.../views/view.displaydeployresult.php | 69 +
modules/ModuleBuilder/views/view.dropdown.php | 159 +
.../ModuleBuilder/views/view.dropdowns.php | 83 +
.../views/view.exportcustomizations.php | 76 +
modules/ModuleBuilder/views/view.history.php | 183 +
modules/ModuleBuilder/views/view.home.php | 87 +
modules/ModuleBuilder/views/view.labels.php | 185 +
.../ModuleBuilder/views/view.layoutview.php | 292 +
modules/ModuleBuilder/views/view.listview.php | 342 +
modules/ModuleBuilder/views/view.main.php | 120 +
modules/ModuleBuilder/views/view.module.php | 102 +
.../ModuleBuilder/views/view.modulefield.php | 318 +
.../ModuleBuilder/views/view.modulefields.php | 211 +
.../ModuleBuilder/views/view.modulelabels.php | 103 +
modules/ModuleBuilder/views/view.package.php | 163 +
.../ModuleBuilder/views/view.popupview.php | 226 +
modules/ModuleBuilder/views/view.property.php | 132 +
.../ModuleBuilder/views/view.relationship.php | 273 +
.../views/view.relationships.php | 152 +
.../ModuleBuilder/views/view.resetmodule.php | 249 +
.../ModuleBuilder/views/view.searchview.php | 132 +
modules/ModuleBuilder/views/view.tree.php | 81 +
modules/ModuleBuilder/views/view.wizard.php | 340 +
modules/MySettings/LoadTabSubpanels.php | 70 +
modules/MySettings/StoreQuery.php | 270 +
modules/MySettings/TabController.php | 337 +
modules/MySettings/language/en_us.lang.php | 40 +
.../MyNotesDashlet/MyNotesDashlet.data.php | 126 +
.../MyNotesDashlet/MyNotesDashlet.meta.php | 45 +
.../MyNotesDashlet/MyNotesDashlet.php | 57 +
modules/Notes/Menu.php | 52 +
modules/Notes/Note.php | 325 +
modules/Notes/NoteSoap.php | 157 +
modules/Notes/NotesQuickCreate.php | 70 +
modules/Notes/SubPanelView.html | 66 +
modules/Notes/SubPanelView.php | 105 +
modules/Notes/controller.php | 104 +
modules/Notes/field_arrays.php | 63 +
modules/Notes/language/en_us.lang.php | 107 +
modules/Notes/metadata/SearchFields.php | 53 +
modules/Notes/metadata/additionalDetails.php | 64 +
modules/Notes/metadata/detailviewdefs.php | 115 +
modules/Notes/metadata/editviewdefs.php | 87 +
modules/Notes/metadata/listviewdefs.php | 116 +
modules/Notes/metadata/quickcreatedefs.php | 110 +
modules/Notes/metadata/searchdefs.php | 104 +
modules/Notes/metadata/studio.php | 66 +
modules/Notes/metadata/subpanels/ForCalls.php | 127 +
.../Notes/metadata/subpanels/ForHistory.php | 137 +
.../Notes/metadata/subpanels/ForMeetings.php | 127 +
modules/Notes/metadata/subpanels/default.php | 100 +
modules/Notes/tpls/EditViewHeader.tpl | 80 +
modules/Notes/tpls/QuickCreate.tpl | 103 +
modules/Notes/vardefs.php | 461 +
.../MyClosedOpportunitiesDashlet.meta.php | 47 +
.../MyClosedOpportunitiesDashlet.php | 130 +
.../MyClosedOpportunitiesDashlet.tpl | 52 +
.../MyClosedOpportunitiesDashletConfigure.tpl | 74 +
.../MyClosedOpportunitiesDashletOptions.tpl | 86 +
.../MyOpportunitiesDashlet.data.php | 89 +
.../MyOpportunitiesDashlet.meta.php | 47 +
.../MyOpportunitiesDashlet.php | 72 +
modules/Opportunities/ListViewTop.html | 64 +
modules/Opportunities/ListViewTop.php | 65 +
modules/Opportunities/Menu.php | 58 +
.../OpportunitiesQuickCreate.php | 81 +
modules/Opportunities/Opportunity.php | 462 +
modules/Opportunities/OpportunityFormBase.php | 467 +
modules/Opportunities/Save.php | 49 +
modules/Opportunities/SaveOverload.php | 48 +
modules/Opportunities/SubPanelView.html | 63 +
modules/Opportunities/SubPanelView.php | 145 +
.../Opportunities/SubPanelViewProjects.html | 68 +
.../Opportunities/SubPanelViewProjects.php | 111 +
modules/Opportunities/SugarFeeds/OppFeed.php | 63 +
modules/Opportunities/field_arrays.php | 69 +
modules/Opportunities/language/en_us.lang.php | 146 +
.../Opportunities/metadata/SearchFields.php | 75 +
modules/Opportunities/metadata/acldefs.php | 61 +
.../metadata/additionalDetails.php | 63 +
.../Opportunities/metadata/detailviewdefs.php | 102 +
.../Opportunities/metadata/editviewdefs.php | 86 +
.../Opportunities/metadata/listviewdefs.php | 113 +
modules/Opportunities/metadata/metafiles.php | 52 +
modules/Opportunities/metadata/popupdefs.php | 86 +
.../metadata/quickcreatedefs.php | 117 +
modules/Opportunities/metadata/searchdefs.php | 133 +
modules/Opportunities/metadata/studio.php | 66 +
.../Opportunities/metadata/subpaneldefs.php | 195 +
.../metadata/subpanels/ForAccounts.php | 90 +
.../metadata/subpanels/ForEmails.php | 85 +
.../metadata/subpanels/default.php | 104 +
modules/Opportunities/tpls/QuickCreate.tpl | 110 +
modules/Opportunities/vardefs.php | 435 +
modules/Opportunities/views/view.detail.php | 75 +
modules/Opportunities/views/view.edit.php | 86 +
modules/OptimisticLock/Forms.php | 39 +
modules/OptimisticLock/LockResolve.php | 84 +
modules/OptimisticLock/Menu.php | 43 +
.../OptimisticLock/language/en_us.lang.php | 57 +
modules/Project/Delete.php | 88 +
modules/Project/Menu.php | 78 +
modules/Project/Project.js | 48 +
modules/Project/Project.php | 286 +
modules/Project/ProjectQuickCreate.php | 88 +
modules/Project/Save.php | 125 +
modules/Project/SubPanelView.html | 67 +
modules/Project/SubPanelView.php | 103 +
modules/Project/action_view_map.php | 41 +
modules/Project/field_arrays.php | 77 +
modules/Project/language/en_us.lang.php | 143 +
modules/Project/metadata/SearchFields.php | 59 +
.../Project/metadata/additionalDetails.php | 63 +
modules/Project/metadata/detailviewdefs.php | 133 +
modules/Project/metadata/editviewdefs.php | 80 +
modules/Project/metadata/listviewdefs.php | 90 +
modules/Project/metadata/metafiles.php | 47 +
modules/Project/metadata/popupdefs.php | 50 +
modules/Project/metadata/quickcreatedefs.php | 72 +
modules/Project/metadata/searchdefs.php | 59 +
modules/Project/metadata/studio.php | 66 +
modules/Project/metadata/subpaneldefs.php | 237 +
.../Project/metadata/subpanels/ForEmails.php | 88 +
.../Project/metadata/subpanels/default.php | 90 +
modules/Project/tpls/QuickCreate.tpl | 96 +
modules/Project/vardefs.php | 431 +
modules/Project/views/view.detail.php | 76 +
modules/Project/views/view.edit.php | 53 +
modules/Project/views/view.list.php | 79 +
.../Project/views/view.templatesdetail.php | 87 +
modules/Project/views/view.templatesedit.php | 66 +
.../MyProjectTaskDashlet.data.php | 89 +
.../MyProjectTaskDashlet.meta.php | 47 +
.../MyProjectTaskDashlet.php | 70 +
modules/ProjectTask/Delete.php | 88 +
modules/ProjectTask/Forms.html | 67 +
modules/ProjectTask/Menu.php | 59 +
modules/ProjectTask/MyProjectTasks.html | 66 +
modules/ProjectTask/MyProjectTasks.php | 76 +
modules/ProjectTask/Popup.html | 116 +
modules/ProjectTask/Popup.php | 47 +
modules/ProjectTask/Popup_picker.html | 103 +
modules/ProjectTask/ProjectTask.js | 42 +
modules/ProjectTask/ProjectTask.php | 371 +
.../ProjectTask/ProjectTaskQuickCreate.php | 102 +
modules/ProjectTask/Save.php | 100 +
modules/ProjectTask/SubPanelView.html | 70 +
modules/ProjectTask/SubPanelView.php | 105 +
modules/ProjectTask/field_arrays.php | 86 +
modules/ProjectTask/language/en_us.lang.php | 120 +
modules/ProjectTask/metadata/SearchFields.php | 61 +
modules/ProjectTask/metadata/acldefs.php | 68 +
.../metadata/additionalDetails.php | 69 +
.../ProjectTask/metadata/detailviewdefs.php | 129 +
modules/ProjectTask/metadata/editviewdefs.php | 144 +
modules/ProjectTask/metadata/listviewdefs.php | 86 +
modules/ProjectTask/metadata/popupdefs.php | 50 +
modules/ProjectTask/metadata/searchdefs.php | 57 +
modules/ProjectTask/metadata/studio.php | 66 +
modules/ProjectTask/metadata/subpaneldefs.php | 125 +
.../metadata/subpanels/default.php | 65 +
modules/ProjectTask/tpls/QuickCreate.tpl | 104 +
modules/ProjectTask/vardefs.php | 471 +
modules/ProjectTask/views/view.list.php | 269 +
modules/ProspectLists/Delete.php | 62 +
modules/ProspectLists/Duplicate.php | 75 +
modules/ProspectLists/Forms.html | 57 +
modules/ProspectLists/Forms.php | 91 +
modules/ProspectLists/Menu.php | 48 +
modules/ProspectLists/Popup_picker.html | 129 +
modules/ProspectLists/ProspectList.php | 350 +
.../ProspectLists/ProspectListFormBase.php | 165 +
modules/ProspectLists/Save.php | 85 +
modules/ProspectLists/SubPanelView.html | 62 +
modules/ProspectLists/SubPanelView.php | 119 +
modules/ProspectLists/TargetListUpdate.php | 95 +
modules/ProspectLists/field_arrays.php | 57 +
modules/ProspectLists/language/en_us.lang.php | 97 +
.../ProspectLists/metadata/SearchFields.php | 44 +
.../ProspectLists/metadata/detailviewdefs.php | 81 +
.../ProspectLists/metadata/editviewdefs.php | 87 +
.../ProspectLists/metadata/listviewdefs.php | 66 +
modules/ProspectLists/metadata/popupdefs.php | 85 +
modules/ProspectLists/metadata/searchdefs.php | 62 +
.../ProspectLists/metadata/subpaneldefs.php | 111 +
.../metadata/subpanels/default.php | 83 +
modules/ProspectLists/vardefs.php | 223 +
modules/Prospects/Delete.php | 63 +
modules/Prospects/Import.php | 55 +
modules/Prospects/Menu.php | 50 +
modules/Prospects/Popup_picker.html | 108 +
modules/Prospects/Prospect.php | 310 +
modules/Prospects/ProspectFormBase.php | 511 +
modules/Prospects/Save.php | 52 +
modules/Prospects/field_arrays.php | 90 +
modules/Prospects/language/en_us.lang.php | 187 +
modules/Prospects/metadata/SearchFields.php | 70 +
.../Prospects/metadata/additionalDetails.php | 94 +
modules/Prospects/metadata/detailviewdefs.php | 137 +
modules/Prospects/metadata/editviewdefs.php | 113 +
modules/Prospects/metadata/listviewdefs.php | 72 +
modules/Prospects/metadata/popupdefs.php | 64 +
.../Prospects/metadata/quickcreatedefs.php | 163 +
modules/Prospects/metadata/searchdefs.php | 64 +
modules/Prospects/metadata/studio.php | 66 +
modules/Prospects/metadata/subpaneldefs.php | 140 +
.../Prospects/metadata/subpanels/default.php | 92 +
modules/Prospects/tpls/DetailViewHeader.tpl | 58 +
modules/Prospects/vardefs.php | 239 +
modules/Prospects/views/view.detail.php | 67 +
modules/Prospects/views/view.list.php | 48 +
modules/Relationships/Relationship.php | 279 +
modules/Relationships/RelationshipHandler.php | 409 +
modules/Relationships/field_arrays.php | 81 +
modules/Relationships/language/en_us.lang.php | 65 +
modules/Relationships/vardefs.php | 173 +
modules/Releases/DetailView.php | 44 +
modules/Releases/EditView.html | 63 +
modules/Releases/EditView.php | 45 +
modules/Releases/ListView.html | 67 +
modules/Releases/Menu.php | 48 +
modules/Releases/Popup_picker.html | 100 +
modules/Releases/Popup_picker.php | 157 +
modules/Releases/Release.php | 157 +
modules/Releases/Save.php | 91 +
modules/Releases/field_arrays.php | 57 +
modules/Releases/index.php | 155 +
modules/Releases/language/en_us.lang.php | 72 +
modules/Releases/vardefs.php | 128 +
modules/Roles/Delete.php | 58 +
modules/Roles/DeleteUserRelationship.php | 62 +
modules/Roles/DetailView.html | 86 +
modules/Roles/DetailView.php | 153 +
modules/Roles/EditView.html | 107 +
modules/Roles/EditView.php | 145 +
modules/Roles/Forms.php | 113 +
modules/Roles/Menu.php | 50 +
modules/Roles/Role.php | 202 +
modules/Roles/Save.php | 90 +
modules/Roles/SaveUserRelationship.php | 69 +
modules/Roles/SubPanelViewUsers.html | 63 +
modules/Roles/SubPanelViewUsers.php | 99 +
modules/Roles/field_arrays.php | 57 +
modules/Roles/language/en_us.lang.php | 60 +
modules/Roles/metadata/SearchFields.php | 42 +
modules/Roles/metadata/listviewdefs.php | 51 +
modules/Roles/metadata/searchdefs.php | 55 +
modules/Roles/metadata/subpaneldefs.php | 59 +
modules/Roles/metadata/subpanels/default.php | 61 +
modules/Roles/vardefs.php | 130 +
modules/Roles/views/view.list.php | 48 +
modules/SavedSearch/ListView.php | 84 +
modules/SavedSearch/Menu.php | 46 +
modules/SavedSearch/SavedSearch.php | 405 +
modules/SavedSearch/SavedSearchForm.tpl | 107 +
modules/SavedSearch/SavedSearchSelects.tpl | 57 +
modules/SavedSearch/SearchForm.html | 58 +
modules/SavedSearch/UpgradeSavedSearch.php | 129 +
modules/SavedSearch/field_arrays.php | 59 +
modules/SavedSearch/index.php | 89 +
modules/SavedSearch/language/en_us.lang.php | 70 +
modules/SavedSearch/metadata/listviewdefs.php | 54 +
modules/SavedSearch/vardefs.php | 147 +
modules/Schedulers/Delete.php | 56 +
modules/Schedulers/DeleteScheduled.php | 55 +
modules/Schedulers/DetailView.html | 113 +
modules/Schedulers/DetailView.php | 135 +
modules/Schedulers/EditView.html | 386 +
modules/Schedulers/EditView.php | 349 +
modules/Schedulers/JobThread.php | 76 +
modules/Schedulers/ListView.html | 81 +
modules/Schedulers/ListView.php | 74 +
modules/Schedulers/Menu.php | 52 +
modules/Schedulers/Save.php | 172 +
modules/Schedulers/Scheduled.html | 72 +
modules/Schedulers/Scheduled.php | 71 +
modules/Schedulers/Scheduler.php | 1009 +
modules/Schedulers/SchedulerDaemon.php | 575 +
modules/Schedulers/_AddJobsHere.php | 432 +
modules/Schedulers/field_arrays.php | 90 +
modules/Schedulers/index.php | 48 +
modules/Schedulers/language/en_us.lang.php | 157 +
modules/Schedulers/metadata/subpaneldefs.php | 57 +
.../Schedulers/metadata/subpanels/default.php | 59 +
modules/Schedulers/vardefs.php | 251 +
modules/SchedulersJobs/SchedulersJob.php | 290 +
modules/SchedulersJobs/field_arrays.php | 59 +
.../SchedulersJobs/language/en_us.lang.php | 49 +
.../metadata/subpanels/default.php | 65 +
modules/SchedulersJobs/vardefs.php | 115 +
modules/Studio/DropDowns/DropDownHelper.php | 172 +
modules/Studio/DropDowns/EditView.php | 143 +
modules/Studio/DropDowns/EditView.tpl | 378 +
modules/Studio/Forms.php | 133 +
modules/Studio/JSTransaction.js | 40 +
modules/Studio/SaveTabs.php | 49 +
modules/Studio/TabGroups.php | 41 +
modules/Studio/TabGroups/EditViewTabs.php | 116 +
modules/Studio/TabGroups/EditViewTabs.tpl | 330 +
modules/Studio/TabGroups/TabGroupHelper.php | 131 +
modules/Studio/config.php | 69 +
modules/Studio/language/en_us.Portal.html | 75 +
modules/Studio/language/en_us.lang.php | 189 +
modules/Studio/parsers/StudioParser.php | 658 +
modules/Studio/studio.js | 79 +
modules/Studio/studiodd.js | 55 +
modules/Studio/studiotabgroups.js | 46 +
modules/Studio/wizard.php | 64 +
modules/Studio/wizards/EditDropDownWizard.php | 86 +
modules/Studio/wizards/StudioWizard.php | 136 +
modules/Studio/ygDDListStudio.js | 55 +
modules/SugarFeed/AdminSettings.php | 153 +
.../Dashlets/SugarFeedDashlet/Options.tpl | 183 +
.../SugarFeedDashlet.meta.php | 53 +
.../SugarFeedDashlet/SugarFeedDashlet.php | 506 +
.../SugarFeedDashlet/SugarFeedScript.tpl | 124 +
.../SugarFeedDashlet/UserPostForm.tpl | 76 +
modules/SugarFeed/Forms.php | 0
modules/SugarFeed/Menu.php | 47 +
modules/SugarFeed/SugarFeed.php | 468 +
modules/SugarFeed/SugarFeedFlush.php | 63 +
modules/SugarFeed/action_view_map.php | 38 +
modules/SugarFeed/feedLogicBase.php | 53 +
modules/SugarFeed/language/en_us.lang.php | 117 +
modules/SugarFeed/linkHandlers/Image.php | 76 +
modules/SugarFeed/linkHandlers/Link.php | 59 +
modules/SugarFeed/linkHandlers/YouTube.php | 54 +
modules/SugarFeed/metadata/SearchFields.php | 45 +
.../SugarFeed/metadata/dashletviewdefs.php | 53 +
modules/SugarFeed/metadata/detailviewdefs.php | 73 +
modules/SugarFeed/metadata/editviewdefs.php | 64 +
modules/SugarFeed/metadata/listviewdefs.php | 61 +
modules/SugarFeed/metadata/metafiles.php | 53 +
modules/SugarFeed/metadata/popupdefs.php | 51 +
modules/SugarFeed/metadata/searchdefs.php | 61 +
.../SugarFeed/metadata/subpanels/default.php | 71 +
modules/SugarFeed/tpls/AdminSettings.tpl | 124 +
modules/SugarFeed/vardefs.php | 133 +
.../SugarFeed/views/view.adminsettings.php | 179 +
modules/TableDictionary.php | 100 +
.../MyTasksDashlet/MyTasksDashlet.data.php | 115 +
.../MyTasksDashlet/MyTasksDashlet.meta.php | 47 +
.../MyTasksDashlet/MyTasksDashlet.php | 61 +
modules/Tasks/Menu.php | 42 +
modules/Tasks/MyTasks.html | 65 +
modules/Tasks/MyTasks.php | 83 +
modules/Tasks/Save.php | 143 +
modules/Tasks/Task.php | 403 +
modules/Tasks/TasksQuickCreate.php | 98 +
modules/Tasks/field_arrays.php | 69 +
modules/Tasks/language/en_us.lang.php | 111 +
modules/Tasks/metadata/SearchFields.php | 69 +
modules/Tasks/metadata/additionalDetails.php | 75 +
modules/Tasks/metadata/detailviewdefs.php | 147 +
modules/Tasks/metadata/editviewdefs.php | 164 +
modules/Tasks/metadata/listviewdefs.php | 106 +
modules/Tasks/metadata/quickcreatedefs.php | 166 +
modules/Tasks/metadata/searchdefs.php | 126 +
modules/Tasks/metadata/studio.php | 66 +
.../metadata/subpanels/ForActivities.php | 109 +
.../Tasks/metadata/subpanels/ForEmails.php | 108 +
.../Tasks/metadata/subpanels/ForHistory.php | 120 +
modules/Tasks/metadata/subpanels/default.php | 115 +
modules/Tasks/tpls/QuickCreate.tpl | 205 +
modules/Tasks/vardefs.php | 300 +
modules/Tasks/views/view.edit.php | 76 +
modules/Trackers/BreadCrumbStack.php | 254 +
modules/Trackers/Metric.php | 60 +
modules/Trackers/Trackable.php | 43 +
modules/Trackers/Tracker.php | 145 +
modules/Trackers/TrackerManager.php | 294 +
modules/Trackers/config.php | 58 +
modules/Trackers/language/en_us.lang.php | 92 +
modules/Trackers/monitor/BlankMonitor.php | 115 +
modules/Trackers/monitor/Monitor.php | 244 +
modules/Trackers/monitor/tracker_monitor.php | 76 +
modules/Trackers/populateSeedData.php | 121 +
modules/Trackers/store/DatabaseStore.php | 83 +
modules/Trackers/store/Store.php | 56 +
modules/Trackers/store/SugarLogStore.php | 66 +
.../store/TrackerQueriesDatabaseStore.php | 85 +
.../store/TrackerSessionsDatabaseStore.php | 83 +
modules/Trackers/vardefs.php | 203 +
modules/UpgradeWizard/Menu.php | 52 +
modules/UpgradeWizard/SILENTUPGRADE.txt | 93 +
.../SugarMerge/DetailViewMerge.php | 97 +
.../SugarMerge/EditViewMerge.php | 757 +
.../SugarMerge/ListViewMerge.php | 255 +
.../SugarMerge/QuickCreateMerge.php | 54 +
.../UpgradeWizard/SugarMerge/SearchMerge.php | 199 +
.../SugarMerge/SubpanelMerge.php | 91 +
.../UpgradeWizard/SugarMerge/SugarMerge.php | 229 +
modules/UpgradeWizard/UploadFileCheck.php | 84 +
modules/UpgradeWizard/cancel.php | 91 +
modules/UpgradeWizard/commit.php | 662 +
modules/UpgradeWizard/commitJson.php | 82 +
modules/UpgradeWizard/deleteCache.php | 96 +
modules/UpgradeWizard/end.php | 329 +
modules/UpgradeWizard/index.php | 569 +
modules/UpgradeWizard/language/en_us.lang.php | 298 +
modules/UpgradeWizard/layouts.php | 240 +
modules/UpgradeWizard/populateColumns.php | 102 +
modules/UpgradeWizard/preflight.php | 495 +
modules/UpgradeWizard/preflightJson.php | 90 +
modules/UpgradeWizard/processing.gif | Bin 0 -> 10847 bytes
modules/UpgradeWizard/silentUpgrade.php | 97 +
.../UpgradeWizard/silentUpgrade_dce_step1.php | 646 +
.../UpgradeWizard/silentUpgrade_dce_step2.php | 866 +
modules/UpgradeWizard/silentUpgrade_step1.php | 1244 +
modules/UpgradeWizard/silentUpgrade_step2.php | 564 +
modules/UpgradeWizard/start.php | 120 +
modules/UpgradeWizard/systemCheck.php | 284 +
modules/UpgradeWizard/systemCheckJson.php | 95 +
modules/UpgradeWizard/tpls/layoutsMerge.tpl | 81 +
modules/UpgradeWizard/upgradeMetaHelper.php | 394 +
modules/UpgradeWizard/upgradeTimeCounter.php | 88 +
modules/UpgradeWizard/upgradeWizard.js | 43 +
modules/UpgradeWizard/upload.php | 399 +
modules/UpgradeWizard/uw_ajax.php | 912 +
modules/UpgradeWizard/uw_emptyFunctions.php | 47 +
modules/UpgradeWizard/uw_files.php | 110 +
modules/UpgradeWizard/uw_main.tpl | 437 +
modules/UpgradeWizard/uw_utils.php | 5135 +++
modules/UserPreferences/UserPreference.php | 490 +
modules/UserPreferences/controller.php | 58 +
modules/UserPreferences/field_arrays.php | 57 +
modules/UserPreferences/index.php | 48 +
modules/UserPreferences/vardefs.php | 111 +
modules/Users/Authenticate.php | 109 +
modules/Users/ChangeGroupTab.php | 42 +
modules/Users/ChangePassword.php | 104 +
modules/Users/Changenewpassword.php | 271 +
modules/Users/Changenewpassword.tpl | 168 +
modules/Users/DetailView.js | 54 +
modules/Users/DetailView.php | 529 +
modules/Users/DetailView.tpl | 363 +
modules/Users/EditView.php | 702 +
modules/Users/EditView.tpl | 857 +
modules/Users/Error.php | 56 +
modules/Users/Forms.php | 223 +
modules/Users/GeneratePassword.php | 279 +
modules/Users/ListRoles.php | 40 +
modules/Users/Login.php | 218 +
modules/Users/Logout.php | 70 +
modules/Users/Menu.php | 65 +
modules/Users/PasswordRequirementBox.css | 55 +
modules/Users/PasswordRequirementBox.js | 66 +
modules/Users/PopupSignature.php | 98 +
modules/Users/PopupUsers.php | 135 +
modules/Users/Popup_Users_picker.html | 102 +
modules/Users/Popup_picker.html | 119 +
modules/Users/Save.php | 422 +
modules/Users/SaveSignature.php | 73 +
modules/Users/SaveTimezone.php | 55 +
modules/Users/SetTimezone.php | 85 +
modules/Users/SetTimezone.tpl | 104 +
modules/Users/User.js | 51 +
modules/Users/User.php | 1322 +
modules/Users/UserSignature.php | 111 +
modules/Users/UserSignatureEditView.html | 129 +
.../AuthenticationController.php | 186 +
.../EmailAuthenticate/EmailAuthenticate.php | 62 +
.../EmailAuthenticateUser.php | 165 +
.../LDAPAuthenticate/LDAPAuthenticate.php | 61 +
.../LDAPAuthenticate/LDAPAuthenticateUser.php | 401 +
.../LDAPAuthenticate/LDAPConfigs/default.php | 70 +
.../SAMLAuthenticate/SAMLAuthenticate.php | 64 +
.../SAMLAuthenticate/SAMLAuthenticateUser.php | 123 +
.../authentication/SAMLAuthenticate/index.php | 35 +
.../SAMLAuthenticate/lib/onelogin/saml.php | 32 +
.../lib/onelogin/saml/authrequest.php | 67 +
.../lib/onelogin/saml/response.php | 59 +
.../lib/onelogin/saml/settings.php | 31 +
.../lib/onelogin/saml/xmlsec.php | 69 +
.../lib/xmlseclibs/CHANGELOG.txt | 66 +
.../lib/xmlseclibs/xmlseclibs.php | 1512 +
.../SAMLAuthenticate/settings.php | 50 +
.../SugarAuthenticate/SugarAuthenticate.php | 351 +
.../SugarAuthenticateUser.php | 143 +
modules/Users/controller.php | 94 +
modules/Users/field_arrays.php | 154 +
modules/Users/language/en_us.lang.php | 521 +
modules/Users/login.css | 79 +
modules/Users/login.js | 46 +
modules/Users/login.tpl | 162 +
modules/Users/metadata/SearchFields.php | 70 +
modules/Users/metadata/listviewdefs.php | 91 +
modules/Users/metadata/popupdefs.php | 56 +
.../Users/metadata/reassignScriptMetadata.php | 153 +
modules/Users/metadata/searchdefs.php | 119 +
modules/Users/metadata/subpaneldefs.php | 141 +
modules/Users/metadata/subpanels/ForCalls.php | 98 +
.../Users/metadata/subpanels/ForEmails.php | 85 +
.../Users/metadata/subpanels/ForMeetings.php | 97 +
.../Users/metadata/subpanels/ForProject.php | 71 +
.../metadata/subpanels/ForProspectLists.php | 83 +
modules/Users/metadata/subpanels/ForTeams.php | 92 +
modules/Users/metadata/subpanels/default.php | 85 +
modules/Users/password_utils.php | 133 +
modules/Users/reassignUserRecords.php | 515 +
modules/Users/tpls/wizard.tpl | 612 +
modules/Users/vardefs.php | 560 +
modules/Users/views/view.list.php | 54 +
modules/Users/views/view.wizard.php | 256 +
modules/Versions/CheckVersions.php | 56 +
modules/Versions/DefaultVersions.php | 77 +
modules/Versions/ExpectedVersions.php | 50 +
modules/Versions/InstallDefaultVersions.php | 58 +
modules/Versions/Version.php | 140 +
modules/Versions/field_arrays.php | 56 +
modules/Versions/index.html | 46 +
modules/Versions/language/en_us.lang.php | 0
modules/Versions/vardefs.php | 126 +
modules/vCals/HTTP_WebDAV_Server_vCal.php | 430 +
modules/vCals/Server.php | 84 +
modules/vCals/field_arrays.php | 55 +
modules/vCals/vCal.php | 243 +
modules/vCals/vardefs.php | 103 +
pdf.php | 56 +
removeme.php | 47 +
robots.txt | 2 +
service/core/NusoapSoap.php | 172 +
service/core/PHP5Soap.php | 173 +
service/core/REST/SugarRest.php | 114 +
service/core/REST/SugarRestJSON.php | 104 +
service/core/REST/SugarRestRSS.php | 161 +
service/core/REST/SugarRestSerialize.php | 100 +
service/core/SoapHelperWebService.php | 1118 +
service/core/SugarRestService.php | 212 +
service/core/SugarRestServiceImpl.php | 50 +
service/core/SugarRestUtils.php | 40 +
service/core/SugarSoapService.php | 156 +
service/core/SugarWebService.php | 53 +
service/core/SugarWebServiceImpl.php | 1142 +
service/core/WSDL.tpl | 0
service/core/webservice.php | 63 +
service/example/Rest_Proxy.php | 102 +
service/example/example.html | 338 +
service/example/test.html | 324 +
service/utils/SugarRest.js | 58 +
service/v2/SugarSoapService2.php | 60 +
service/v2/registry.php | 653 +
service/v2/rest.php | 49 +
service/v2/soap.php | 54 +
service/v2_1/SugarWebServiceImplv2_1.php | 83 +
service/v2_1/registry.php | 133 +
service/v2_1/rest.php | 50 +
service/v2_1/soap.php | 50 +
service/v3/SugarWebServiceImplv3.php | 640 +
service/v3/SugarWebServiceUtilv3.php | 501 +
service/v3/registry.php | 194 +
service/v3/rest.php | 50 +
service/v3/soap.php | 50 +
service/v3_1/SugarWebServiceImplv3_1.php | 865 +
service/v3_1/SugarWebServiceUtilv3_1.php | 565 +
service/v3_1/registry.php | 289 +
service/v3_1/rest.php | 50 +
service/v3_1/soap.php | 50 +
service/v4/SugarWebServiceImplv4.php | 585 +
service/v4/SugarWebServiceUtilv4.php | 677 +
service/v4/registry.php | 144 +
service/v4/rest.php | 50 +
service/v4/soap.php | 50 +
soap.php | 100 +
soap/SoapData.php | 325 +
soap/SoapDeprecated.php | 963 +
soap/SoapError.php | 83 +
soap/SoapErrorDefinitions.php | 67 +
soap/SoapHelperFunctions.php | 1056 +
soap/SoapPortalHelper.php | 424 +
soap/SoapPortalUsers.php | 779 +
soap/SoapRelationshipHelper.php | 504 +
soap/SoapStudio.php | 319 +
soap/SoapSugarUsers.php | 2116 ++
soap/SoapTypes.php | 830 +
sugar_version.php | 47 +
themes/Sugar5/css/chart.css | 258 +
themes/Sugar5/css/deprecated.css | 125 +
themes/Sugar5/css/print.css | 41 +
themes/Sugar5/css/style.css | 3589 ++
themes/Sugar5/css/wizard.css | 65 +
themes/Sugar5/css/yui.css | 6223 ++++
themes/Sugar5/images/ACLRoles.gif | Bin 0 -> 563 bytes
themes/Sugar5/images/AccountReports.gif | Bin 0 -> 231 bytes
themes/Sugar5/images/Accounts.gif | Bin 0 -> 553 bytes
themes/Sugar5/images/ActivitiesReports.gif | Bin 0 -> 174 bytes
themes/Sugar5/images/Administration.gif | Bin 0 -> 325 bytes
themes/Sugar5/images/AlertEmailTemplates.gif | Bin 0 -> 349 bytes
themes/Sugar5/images/AllNews.gif | Bin 0 -> 333 bytes
themes/Sugar5/images/AllRSS.gif | Bin 0 -> 333 bytes
themes/Sugar5/images/ArrowButtons.png | Bin 0 -> 1499 bytes
themes/Sugar5/images/Backup.gif | Bin 0 -> 340 bytes
themes/Sugar5/images/Backups.gif | Bin 0 -> 576 bytes
themes/Sugar5/images/BugReports.gif | Bin 0 -> 172 bytes
themes/Sugar5/images/Bugs.gif | Bin 0 -> 214 bytes
themes/Sugar5/images/Calendar.gif | Bin 0 -> 350 bytes
themes/Sugar5/images/CallReports.gif | Bin 0 -> 229 bytes
themes/Sugar5/images/Calls.gif | Bin 0 -> 547 bytes
themes/Sugar5/images/Campaigns.gif | Bin 0 -> 559 bytes
themes/Sugar5/images/CampaignsWizard.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/CaseReports.gif | Bin 0 -> 233 bytes
themes/Sugar5/images/Cases.gif | Bin 0 -> 334 bytes
themes/Sugar5/images/ConfigureSubPanels.gif | Bin 0 -> 343 bytes
themes/Sugar5/images/ConfigureTabs.gif | Bin 0 -> 563 bytes
themes/Sugar5/images/ContactReports.gif | Bin 0 -> 338 bytes
themes/Sugar5/images/Contacts.gif | Bin 0 -> 219 bytes
themes/Sugar5/images/ContractReports.gif | Bin 0 -> 233 bytes
themes/Sugar5/images/Contracts.gif | Bin 0 -> 110 bytes
themes/Sugar5/images/CreateAccounts.gif | Bin 0 -> 547 bytes
themes/Sugar5/images/CreateBugs.gif | Bin 0 -> 218 bytes
themes/Sugar5/images/CreateCalls.gif | Bin 0 -> 343 bytes
themes/Sugar5/images/CreateCampaigns.gif | Bin 0 -> 562 bytes
themes/Sugar5/images/CreateCases.gif | Bin 0 -> 336 bytes
themes/Sugar5/images/CreateContacts.gif | Bin 0 -> 214 bytes
themes/Sugar5/images/CreateContracts.gif | Bin 0 -> 123 bytes
themes/Sugar5/images/CreateCustomQuery.gif | Bin 0 -> 234 bytes
themes/Sugar5/images/CreateDCEClusters.gif | Bin 0 -> 573 bytes
themes/Sugar5/images/CreateDCEDataBases.gif | Bin 0 -> 366 bytes
themes/Sugar5/images/CreateDCEInstances.gif | Bin 0 -> 596 bytes
themes/Sugar5/images/CreateDCETemplates.gif | Bin 0 -> 569 bytes
themes/Sugar5/images/CreateDataSet.gif | Bin 0 -> 226 bytes
themes/Sugar5/images/CreateDocuments.gif | Bin 0 -> 225 bytes
themes/Sugar5/images/CreateDropdown.gif | Bin 0 -> 349 bytes
themes/Sugar5/images/CreateEmails.gif | Bin 0 -> 334 bytes
themes/Sugar5/images/CreateEmployees.gif | Bin 0 -> 371 bytes
themes/Sugar5/images/CreateHolidays.gif | Bin 0 -> 375 bytes
themes/Sugar5/images/CreateKBArticle.gif | Bin 0 -> 236 bytes
themes/Sugar5/images/CreateLeads.gif | Bin 0 -> 225 bytes
themes/Sugar5/images/CreateMailboxes.gif | Bin 0 -> 381 bytes
themes/Sugar5/images/CreateMeetings.gif | Bin 0 -> 343 bytes
themes/Sugar5/images/CreateNotes.gif | Bin 0 -> 346 bytes
themes/Sugar5/images/CreateOpportunities.gif | Bin 0 -> 326 bytes
themes/Sugar5/images/CreateProducts.gif | Bin 0 -> 577 bytes
themes/Sugar5/images/CreateProject.gif | Bin 0 -> 228 bytes
themes/Sugar5/images/CreateProjectTask.gif | Bin 0 -> 221 bytes
.../Sugar5/images/CreateProjectTemplate.gif | Bin 0 -> 173 bytes
themes/Sugar5/images/CreateProspectLists.gif | Bin 0 -> 237 bytes
themes/Sugar5/images/CreateProspects.gif | Bin 0 -> 223 bytes
themes/Sugar5/images/CreateQuery.gif | Bin 0 -> 223 bytes
themes/Sugar5/images/CreateQuotes.gif | Bin 0 -> 230 bytes
themes/Sugar5/images/CreateReport.gif | Bin 0 -> 168 bytes
themes/Sugar5/images/CreateRoles.gif | Bin 0 -> 565 bytes
themes/Sugar5/images/CreateScheduler.gif | Bin 0 -> 360 bytes
themes/Sugar5/images/CreateTasks.gif | Bin 0 -> 346 bytes
themes/Sugar5/images/CreateTeams.gif | Bin 0 -> 209 bytes
themes/Sugar5/images/CreateTimePeriods.gif | Bin 0 -> 348 bytes
themes/Sugar5/images/CreateUsers.gif | Bin 0 -> 346 bytes
themes/Sugar5/images/CreateWebToLeadForm.gif | Bin 0 -> 240 bytes
.../images/CreateWorkflowDefinition.gif | Bin 0 -> 220 bytes
themes/Sugar5/images/CreateiFrames.gif | Bin 0 -> 363 bytes
themes/Sugar5/images/Currencies.gif | Bin 0 -> 569 bytes
themes/Sugar5/images/CustomQueries.gif | Bin 0 -> 226 bytes
themes/Sugar5/images/DCEActions.gif | Bin 0 -> 623 bytes
themes/Sugar5/images/DCEClusters.gif | Bin 0 -> 573 bytes
themes/Sugar5/images/DCEDataBases.gif | Bin 0 -> 360 bytes
themes/Sugar5/images/DCEInstances.gif | Bin 0 -> 606 bytes
themes/Sugar5/images/DCELicensingReport.gif | Bin 0 -> 338 bytes
themes/Sugar5/images/DCETemplates.gif | Bin 0 -> 571 bytes
themes/Sugar5/images/Dashboard.gif | Bin 0 -> 159 bytes
themes/Sugar5/images/DataSets.gif | Bin 0 -> 227 bytes
themes/Sugar5/images/Diagnostic.gif | Bin 0 -> 154 bytes
themes/Sugar5/images/DocumentRevisions.gif | Bin 0 -> 164 bytes
themes/Sugar5/images/Documents.gif | Bin 0 -> 223 bytes
themes/Sugar5/images/Dropdown.gif | Bin 0 -> 549 bytes
themes/Sugar5/images/EditLayout.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/EmailDiagnostic.gif | Bin 0 -> 346 bytes
themes/Sugar5/images/EmailFolder.gif | Bin 0 -> 568 bytes
themes/Sugar5/images/EmailMan.gif | Bin 0 -> 582 bytes
themes/Sugar5/images/EmailReports.gif | Bin 0 -> 346 bytes
themes/Sugar5/images/EmailSetupWizard.gif | Bin 0 -> 360 bytes
themes/Sugar5/images/EmailTemplates.gif | Bin 0 -> 341 bytes
themes/Sugar5/images/Emails.gif | Bin 0 -> 341 bytes
themes/Sugar5/images/Employees.gif | Bin 0 -> 375 bytes
themes/Sugar5/images/ExportCustomFields.gif | Bin 0 -> 573 bytes
themes/Sugar5/images/FavoriteReports.gif | Bin 0 -> 928 bytes
themes/Sugar5/images/Feeds.gif | Bin 0 -> 235 bytes
themes/Sugar5/images/FieldLabels.gif | Bin 0 -> 560 bytes
themes/Sugar5/images/ForecastReports.gif | Bin 0 -> 174 bytes
themes/Sugar5/images/ForecastWorksheet.gif | Bin 0 -> 340 bytes
themes/Sugar5/images/Forecasts.gif | Bin 0 -> 225 bytes
themes/Sugar5/images/Holidays.gif | Bin 0 -> 376 bytes
themes/Sugar5/images/Import.gif | Bin 0 -> 577 bytes
themes/Sugar5/images/ImportCustomFields.gif | Bin 0 -> 572 bytes
themes/Sugar5/images/InboundEmail.gif | Bin 0 -> 377 bytes
themes/Sugar5/images/KB.gif | Bin 0 -> 173 bytes
themes/Sugar5/images/KBArticle.gif | Bin 0 -> 170 bytes
themes/Sugar5/images/KBDocuments.gif | Bin 0 -> 170 bytes
themes/Sugar5/images/LanguagePacks.gif | Bin 0 -> 170 bytes
themes/Sugar5/images/Layout.gif | Bin 0 -> 567 bytes
themes/Sugar5/images/LeadReports.gif | Bin 0 -> 172 bytes
themes/Sugar5/images/Leads.gif | Bin 0 -> 226 bytes
themes/Sugar5/images/License.gif | Bin 0 -> 327 bytes
themes/Sugar5/images/MailboxesTestImport.gif | Bin 0 -> 371 bytes
themes/Sugar5/images/Manufacturers.gif | Bin 0 -> 322 bytes
themes/Sugar5/images/MatrixReport.gif | Bin 0 -> 3058 bytes
themes/Sugar5/images/MatrixReportOver.gif | Bin 0 -> 3322 bytes
themes/Sugar5/images/MeetingReports.gif | Bin 0 -> 229 bytes
themes/Sugar5/images/Meetings.gif | Bin 0 -> 551 bytes
themes/Sugar5/images/MigrateFields.gif | Bin 0 -> 576 bytes
themes/Sugar5/images/ModuleBuilder.gif | Bin 0 -> 363 bytes
themes/Sugar5/images/ModuleLoader.gif | Bin 0 -> 207 bytes
themes/Sugar5/images/MoreDetail.png | Bin 0 -> 2844 bytes
themes/Sugar5/images/MyProject.gif | Bin 0 -> 339 bytes
themes/Sugar5/images/MyReports.gif | Bin 0 -> 230 bytes
themes/Sugar5/images/Newsletters.gif | Bin 0 -> 338 bytes
themes/Sugar5/images/Notes.gif | Bin 0 -> 560 bytes
themes/Sugar5/images/OfflineClient.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/OnlineDocumentation.gif | Bin 0 -> 400 bytes
themes/Sugar5/images/Opportunities.gif | Bin 0 -> 322 bytes
themes/Sugar5/images/OpportunityReports.gif | Bin 0 -> 165 bytes
themes/Sugar5/images/Password.gif | Bin 0 -> 188 bytes
themes/Sugar5/images/PatchUpgrades.gif | Bin 0 -> 333 bytes
themes/Sugar5/images/PriceList.gif | Bin 0 -> 565 bytes
themes/Sugar5/images/Price_List.gif | Bin 0 -> 565 bytes
themes/Sugar5/images/Print_Email.gif | Bin 0 -> 585 bytes
themes/Sugar5/images/ProductCategories.gif | Bin 0 -> 587 bytes
themes/Sugar5/images/ProductTemplates.gif | Bin 0 -> 587 bytes
themes/Sugar5/images/ProductTypes.gif | Bin 0 -> 556 bytes
themes/Sugar5/images/Product_Categories.gif | Bin 0 -> 587 bytes
themes/Sugar5/images/Product_Types.gif | Bin 0 -> 556 bytes
themes/Sugar5/images/Products.gif | Bin 0 -> 587 bytes
themes/Sugar5/images/Project.gif | Bin 0 -> 218 bytes
themes/Sugar5/images/Project2Weeks.gif | Bin 0 -> 152 bytes
themes/Sugar5/images/ProjectCollapseAll.gif | Bin 0 -> 96 bytes
themes/Sugar5/images/ProjectCopy.gif | Bin 0 -> 245 bytes
themes/Sugar5/images/ProjectCut.gif | Bin 0 -> 87 bytes
themes/Sugar5/images/ProjectDelete.gif | Bin 0 -> 351 bytes
themes/Sugar5/images/ProjectExpandAll.gif | Bin 0 -> 101 bytes
themes/Sugar5/images/ProjectIndent.gif | Bin 0 -> 104 bytes
themes/Sugar5/images/ProjectInsertRows.gif | Bin 0 -> 83 bytes
themes/Sugar5/images/ProjectMinus.gif | Bin 0 -> 861 bytes
themes/Sugar5/images/ProjectMonth.gif | Bin 0 -> 115 bytes
themes/Sugar5/images/ProjectOutdent.gif | Bin 0 -> 105 bytes
themes/Sugar5/images/ProjectPaste.gif | Bin 0 -> 609 bytes
themes/Sugar5/images/ProjectPlus.gif | Bin 0 -> 865 bytes
themes/Sugar5/images/ProjectSave.gif | Bin 0 -> 343 bytes
themes/Sugar5/images/ProjectTask.gif | Bin 0 -> 214 bytes
themes/Sugar5/images/ProjectTemplate.gif | Bin 0 -> 164 bytes
themes/Sugar5/images/ProjectWeek.gif | Bin 0 -> 154 bytes
themes/Sugar5/images/ProspectLists.gif | Bin 0 -> 232 bytes
themes/Sugar5/images/Prospects.gif | Bin 0 -> 216 bytes
themes/Sugar5/images/QueryBuilder.gif | Bin 0 -> 228 bytes
themes/Sugar5/images/QuoteReports.gif | Bin 0 -> 167 bytes
themes/Sugar5/images/Quotes.gif | Bin 0 -> 334 bytes
themes/Sugar5/images/RSS.gif | Bin 0 -> 235 bytes
themes/Sugar5/images/ReassignRecords.gif | Bin 0 -> 349 bytes
themes/Sugar5/images/Rebuild.gif | Bin 0 -> 579 bytes
themes/Sugar5/images/Rebuild2.gif | Bin 0 -> 590 bytes
themes/Sugar5/images/Releases.gif | Bin 0 -> 570 bytes
themes/Sugar5/images/RenameTabs.gif | Bin 0 -> 364 bytes
themes/Sugar5/images/Repair.gif | Bin 0 -> 144 bytes
themes/Sugar5/images/ReportMaker.gif | Bin 0 -> 171 bytes
themes/Sugar5/images/Reports.gif | Bin 0 -> 162 bytes
themes/Sugar5/images/Roles.gif | Bin 0 -> 563 bytes
themes/Sugar5/images/RowsAndColumns.gif | Bin 0 -> 2855 bytes
themes/Sugar5/images/RowsAndColumnsOver.gif | Bin 0 -> 3046 bytes
themes/Sugar5/images/SchedulerTest.gif | Bin 0 -> 379 bytes
themes/Sugar5/images/Schedulers.gif | Bin 0 -> 364 bytes
themes/Sugar5/images/Search.gif | Bin 0 -> 100 bytes
themes/Sugar5/images/Shippers.gif | Bin 0 -> 326 bytes
themes/Sugar5/images/StickyThread.gif | Bin 0 -> 882 bytes
themes/Sugar5/images/Studio.gif | Bin 0 -> 617 bytes
themes/Sugar5/images/SugarPortal.gif | Bin 0 -> 366 bytes
themes/Sugar5/images/Summation.gif | Bin 0 -> 2685 bytes
themes/Sugar5/images/SummationOver.gif | Bin 0 -> 3064 bytes
themes/Sugar5/images/SummationWithDetails.gif | Bin 0 -> 2596 bytes
.../images/SummationWithDetailsOver.gif | Bin 0 -> 3121 bytes
themes/Sugar5/images/Support.gif | Bin 0 -> 385 bytes
themes/Sugar5/images/TaskReports.gif | Bin 0 -> 229 bytes
themes/Sugar5/images/Tasks.gif | Bin 0 -> 352 bytes
themes/Sugar5/images/TaxRates.gif | Bin 0 -> 215 bytes
themes/Sugar5/images/Teams.gif | Bin 0 -> 148 bytes
themes/Sugar5/images/Themes.gif | Bin 0 -> 1016 bytes
themes/Sugar5/images/TimePeriods.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/Trackers.gif | Bin 0 -> 609 bytes
themes/Sugar5/images/Upgrade.gif | Bin 0 -> 203 bytes
themes/Sugar5/images/UpgradeDCEInstances.gif | Bin 0 -> 203 bytes
themes/Sugar5/images/Users.gif | Bin 0 -> 343 bytes
themes/Sugar5/images/WorkFlow.gif | Bin 0 -> 215 bytes
themes/Sugar5/images/WorkflowSequence.gif | Bin 0 -> 207 bytes
themes/Sugar5/images/_blank.png | Bin 0 -> 137 bytes
themes/Sugar5/images/accept_inline.gif | Bin 0 -> 101 bytes
themes/Sugar5/images/advanced_search.gif | Bin 0 -> 62 bytes
themes/Sugar5/images/arrow.gif | Bin 0 -> 64 bytes
themes/Sugar5/images/arrow_down.gif | Bin 0 -> 81 bytes
themes/Sugar5/images/arrow_up.gif | Bin 0 -> 79 bytes
themes/Sugar5/images/attachment.gif | Bin 0 -> 94 bytes
themes/Sugar5/images/bar_loader.gif | Bin 0 -> 10819 bytes
themes/Sugar5/images/basic_search.gif | Bin 0 -> 62 bytes
themes/Sugar5/images/bg.gif | Bin 0 -> 90 bytes
themes/Sugar5/images/bgBlue.gif | Bin 0 -> 90 bytes
themes/Sugar5/images/bgBtn.gif | Bin 0 -> 93 bytes
themes/Sugar5/images/bgBtnBlue.gif | Bin 0 -> 93 bytes
themes/Sugar5/images/bgBtnGray.gif | Bin 0 -> 68 bytes
themes/Sugar5/images/bgBtnGreen.gif | Bin 0 -> 93 bytes
themes/Sugar5/images/bgBtnOrange.gif | Bin 0 -> 92 bytes
themes/Sugar5/images/bgBtnPurple.gif | Bin 0 -> 92 bytes
themes/Sugar5/images/bgGray.gif | Bin 0 -> 57 bytes
themes/Sugar5/images/bgGreen.gif | Bin 0 -> 808 bytes
themes/Sugar5/images/bgOcher.gif | Bin 0 -> 90 bytes
themes/Sugar5/images/bgPurple.gif | Bin 0 -> 90 bytes
themes/Sugar5/images/bgRed.gif | Bin 0 -> 65 bytes
themes/Sugar5/images/blank.gif | Bin 0 -> 43 bytes
themes/Sugar5/images/calendarHeaderBg.gif | Bin 0 -> 155 bytes
themes/Sugar5/images/calendar_next.gif | Bin 0 -> 67 bytes
themes/Sugar5/images/calendar_previous.gif | Bin 0 -> 65 bytes
themes/Sugar5/images/check_inline.gif | Bin 0 -> 102 bytes
themes/Sugar5/images/clear.gif | Bin 0 -> 272 bytes
themes/Sugar5/images/close.gif | Bin 0 -> 83 bytes
themes/Sugar5/images/close_dashboard.gif | Bin 0 -> 68 bytes
themes/Sugar5/images/close_inline.gif | Bin 0 -> 103 bytes
themes/Sugar5/images/colors.blue.icon.gif | Bin 0 -> 89 bytes
themes/Sugar5/images/colors.gray.icon.gif | Bin 0 -> 62 bytes
themes/Sugar5/images/colors.green.icon.gif | Bin 0 -> 89 bytes
themes/Sugar5/images/colors.orange.icon.gif | Bin 0 -> 89 bytes
themes/Sugar5/images/colors.purple.icon.gif | Bin 0 -> 89 bytes
themes/Sugar5/images/colors.red.icon.gif | Bin 0 -> 70 bytes
themes/Sugar5/images/colors.sugar.icon.gif | Bin 0 -> 89 bytes
themes/Sugar5/images/currentTab.gif | Bin 0 -> 1002 bytes
themes/Sugar5/images/currentTabBlue.gif | Bin 0 -> 993 bytes
themes/Sugar5/images/currentTabGray.gif | Bin 0 -> 993 bytes
themes/Sugar5/images/currentTabGreen.gif | Bin 0 -> 993 bytes
themes/Sugar5/images/currentTabLinkBg.gif | Bin 0 -> 108 bytes
themes/Sugar5/images/currentTabOcher.gif | Bin 0 -> 993 bytes
themes/Sugar5/images/currentTabOff.gif | Bin 0 -> 764 bytes
themes/Sugar5/images/currentTabPurple.gif | Bin 0 -> 993 bytes
themes/Sugar5/images/currentTabRed.gif | Bin 0 -> 1006 bytes
themes/Sugar5/images/dce_Settings.gif | Bin 0 -> 338 bytes
themes/Sugar5/images/decline_inline.gif | Bin 0 -> 102 bytes
themes/Sugar5/images/def_image_inline.gif | Bin 0 -> 587 bytes
themes/Sugar5/images/delete.gif | Bin 0 -> 66 bytes
themes/Sugar5/images/delete_inline.gif | Bin 0 -> 106 bytes
themes/Sugar5/images/detailViewBg.gif | Bin 0 -> 262 bytes
themes/Sugar5/images/detailview.gif | Bin 0 -> 355 bytes
themes/Sugar5/images/doc_image_inline.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/downarrow.gif | Bin 0 -> 66 bytes
themes/Sugar5/images/downarrow_big.gif | Bin 0 -> 74 bytes
themes/Sugar5/images/downarrow_inline.gif | Bin 0 -> 80 bytes
themes/Sugar5/images/edit.gif | Bin 0 -> 69 bytes
themes/Sugar5/images/edit_inline.gif | Bin 0 -> 83 bytes
themes/Sugar5/images/edit_wizard.gif | Bin 0 -> 82 bytes
themes/Sugar5/images/editfields.gif | Bin 0 -> 560 bytes
themes/Sugar5/images/editlabels.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/editview.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/emptyTabSpace.gif | Bin 0 -> 430 bytes
themes/Sugar5/images/end.gif | Bin 0 -> 95 bytes
themes/Sugar5/images/end_off.gif | Bin 0 -> 75 bytes
themes/Sugar5/images/export.gif | Bin 0 -> 78 bytes
themes/Sugar5/images/fonts.larger.icon.gif | Bin 0 -> 135 bytes
themes/Sugar5/images/fonts.largest.icon.gif | Bin 0 -> 144 bytes
themes/Sugar5/images/fonts.normal.icon.gif | Bin 0 -> 127 bytes
themes/Sugar5/images/formButtonBg.gif | Bin 0 -> 93 bytes
themes/Sugar5/images/formButtonBgOn.gif | Bin 0 -> 67 bytes
themes/Sugar5/images/getLatestDocument.gif | Bin 0 -> 81 bytes
themes/Sugar5/images/green_camp.gif | Bin 0 -> 1829 bytes
themes/Sugar5/images/h3Arrow.gif | Bin 0 -> 64 bytes
themes/Sugar5/images/help.gif | Bin 0 -> 66 bytes
themes/Sugar5/images/helpInline.gif | Bin 0 -> 153 bytes
themes/Sugar5/images/hide.gif | Bin 0 -> 223 bytes
.../Sugar5/images/hide_submenu_shortcuts.gif | Bin 0 -> 74 bytes
themes/Sugar5/images/iFrames.gif | Bin 0 -> 338 bytes
themes/Sugar5/images/icon_A1_newmod.gif | Bin 0 -> 2201 bytes
themes/Sugar5/images/icon_Accounts.gif | Bin 0 -> 2053 bytes
themes/Sugar5/images/icon_Accounts_32.gif | Bin 0 -> 955 bytes
themes/Sugar5/images/icon_Activities.gif | Bin 0 -> 2304 bytes
themes/Sugar5/images/icon_Address.gif | Bin 0 -> 160 bytes
themes/Sugar5/images/icon_AdminMobile.gif | Bin 0 -> 333 bytes
themes/Sugar5/images/icon_AdminPDF.gif | Bin 0 -> 248 bytes
themes/Sugar5/images/icon_AdminThemes.gif | Bin 0 -> 340 bytes
themes/Sugar5/images/icon_AdvancedSearch.gif | Bin 0 -> 2518 bytes
themes/Sugar5/images/icon_Application.gif | Bin 0 -> 5631 bytes
themes/Sugar5/images/icon_BasicSearch.gif | Bin 0 -> 2561 bytes
themes/Sugar5/images/icon_Bugs.gif | Bin 0 -> 2052 bytes
themes/Sugar5/images/icon_Bugs_32.gif | Bin 0 -> 995 bytes
themes/Sugar5/images/icon_Calls.gif | Bin 0 -> 1905 bytes
themes/Sugar5/images/icon_Calls_32.gif | Bin 0 -> 990 bytes
themes/Sugar5/images/icon_CampaignLog_32.gif | Bin 0 -> 1120 bytes
themes/Sugar5/images/icon_Campaigns.gif | Bin 0 -> 2342 bytes
themes/Sugar5/images/icon_Campaigns_32.gif | Bin 0 -> 1120 bytes
themes/Sugar5/images/icon_Cases.gif | Bin 0 -> 2060 bytes
themes/Sugar5/images/icon_Cases_32.gif | Bin 0 -> 976 bytes
themes/Sugar5/images/icon_Charts_Funnel.gif | Bin 0 -> 2031 bytes
.../Sugar5/images/icon_Charts_Funnel_32.gif | Bin 0 -> 697 bytes
themes/Sugar5/images/icon_Charts_Gauge.gif | Bin 0 -> 2117 bytes
themes/Sugar5/images/icon_Charts_Gauge_32.gif | Bin 0 -> 738 bytes
themes/Sugar5/images/icon_Charts_GroupBy.gif | Bin 0 -> 2150 bytes
.../Sugar5/images/icon_Charts_GroupBy_32.gif | Bin 0 -> 764 bytes
.../Sugar5/images/icon_Charts_Horizontal.gif | Bin 0 -> 2113 bytes
.../images/icon_Charts_Horizontal_32.gif | Bin 0 -> 800 bytes
themes/Sugar5/images/icon_Charts_Pie.gif | Bin 0 -> 2223 bytes
themes/Sugar5/images/icon_Charts_Pie_32.gif | Bin 0 -> 794 bytes
themes/Sugar5/images/icon_Charts_Vertical.gif | Bin 0 -> 2131 bytes
.../Sugar5/images/icon_Charts_Vertical_32.gif | Bin 0 -> 799 bytes
themes/Sugar5/images/icon_Column_1.gif | Bin 0 -> 1971 bytes
themes/Sugar5/images/icon_Column_2.gif | Bin 0 -> 2082 bytes
themes/Sugar5/images/icon_Column_3.gif | Bin 0 -> 2186 bytes
themes/Sugar5/images/icon_ConnectorConfig.gif | Bin 0 -> 4560 bytes
.../images/icon_ConnectorConfigOver.gif | Bin 0 -> 4743 bytes
.../Sugar5/images/icon_ConnectorConfig_16.gif | Bin 0 -> 622 bytes
themes/Sugar5/images/icon_ConnectorEnable.gif | Bin 0 -> 4476 bytes
.../images/icon_ConnectorEnableOver.gif | Bin 0 -> 4593 bytes
.../Sugar5/images/icon_ConnectorEnable_16.gif | Bin 0 -> 382 bytes
themes/Sugar5/images/icon_ConnectorMap.gif | Bin 0 -> 4577 bytes
.../Sugar5/images/icon_ConnectorMapOver.gif | Bin 0 -> 4797 bytes
themes/Sugar5/images/icon_ConnectorMap_16.gif | Bin 0 -> 594 bytes
.../images/icon_ConnectorSearchFields.gif | Bin 0 -> 4548 bytes
.../images/icon_ConnectorSearchFieldsOver.gif | Bin 0 -> 4656 bytes
.../images/icon_ConnectorSearchFields_16.gif | Bin 0 -> 618 bytes
themes/Sugar5/images/icon_Connectors.gif | Bin 0 -> 600 bytes
themes/Sugar5/images/icon_Contacts.gif | Bin 0 -> 1953 bytes
themes/Sugar5/images/icon_Contacts_32.gif | Bin 0 -> 971 bytes
themes/Sugar5/images/icon_Contracts.gif | Bin 0 -> 1417 bytes
themes/Sugar5/images/icon_Contracts_32.gif | Bin 0 -> 762 bytes
themes/Sugar5/images/icon_DCEActions_32.gif | Bin 0 -> 1075 bytes
themes/Sugar5/images/icon_DCEClusters_32.gif | Bin 0 -> 1051 bytes
themes/Sugar5/images/icon_DCEDataBases_32.gif | Bin 0 -> 1059 bytes
themes/Sugar5/images/icon_DCEInstances_32.gif | Bin 0 -> 1055 bytes
themes/Sugar5/images/icon_DCEReports_32.gif | Bin 0 -> 979 bytes
themes/Sugar5/images/icon_DCETemplates_32.gif | Bin 0 -> 1084 bytes
themes/Sugar5/images/icon_Dashlet.gif | Bin 0 -> 1435 bytes
themes/Sugar5/images/icon_Delete.gif | Bin 0 -> 2263 bytes
themes/Sugar5/images/icon_DeleteFull.gif | Bin 0 -> 2340 bytes
themes/Sugar5/images/icon_DetailView.gif | Bin 0 -> 1837 bytes
themes/Sugar5/images/icon_Documents.gif | Bin 0 -> 2054 bytes
themes/Sugar5/images/icon_Documents_32.gif | Bin 0 -> 1009 bytes
themes/Sugar5/images/icon_DropDownEditor.gif | Bin 0 -> 3202 bytes
themes/Sugar5/images/icon_EditView.gif | Bin 0 -> 1903 bytes
themes/Sugar5/images/icon_EmailAddress.gif | Bin 0 -> 327 bytes
.../Sugar5/images/icon_EmailAddresses_32.gif | Bin 0 -> 853 bytes
themes/Sugar5/images/icon_Emails.gif | Bin 0 -> 1873 bytes
themes/Sugar5/images/icon_Emails_32.gif | Bin 0 -> 859 bytes
themes/Sugar5/images/icon_FavoriteReports.gif | Bin 0 -> 2196 bytes
.../Sugar5/images/icon_FavoriteReports_32.gif | Bin 0 -> 779 bytes
themes/Sugar5/images/icon_Feeds_32.gif | Bin 0 -> 1240 bytes
themes/Sugar5/images/icon_Fields.gif | Bin 0 -> 1966 bytes
themes/Sugar5/images/icon_Forecasts.gif | Bin 0 -> 2161 bytes
themes/Sugar5/images/icon_Forecasts_32.gif | Bin 0 -> 1031 bytes
themes/Sugar5/images/icon_Invaders_32.gif | Bin 0 -> 1256 bytes
themes/Sugar5/images/icon_JotPad.gif | Bin 0 -> 2304 bytes
themes/Sugar5/images/icon_JotPad_32.gif | Bin 0 -> 845 bytes
themes/Sugar5/images/icon_KBDocuments.gif | Bin 0 -> 2145 bytes
themes/Sugar5/images/icon_KBDocuments_32.gif | Bin 0 -> 1044 bytes
themes/Sugar5/images/icon_Labels.gif | Bin 0 -> 2009 bytes
themes/Sugar5/images/icon_Layouts.gif | Bin 0 -> 2099 bytes
themes/Sugar5/images/icon_Leads.gif | Bin 0 -> 2513 bytes
themes/Sugar5/images/icon_Leads_32.gif | Bin 0 -> 1180 bytes
themes/Sugar5/images/icon_ListView.gif | Bin 0 -> 2019 bytes
themes/Sugar5/images/icon_Meetings.gif | Bin 0 -> 2484 bytes
themes/Sugar5/images/icon_Meetings_32.gif | Bin 0 -> 1140 bytes
themes/Sugar5/images/icon_MobileLayouts.gif | Bin 0 -> 2244 bytes
themes/Sugar5/images/icon_ModuleBuilder.gif | Bin 0 -> 4427 bytes
themes/Sugar5/images/icon_MyPortal_32.gif | Bin 0 -> 1042 bytes
themes/Sugar5/images/icon_MyTasks_32.gif | Bin 0 -> 929 bytes
themes/Sugar5/images/icon_NewModule.gif | Bin 0 -> 2241 bytes
themes/Sugar5/images/icon_Notes.gif | Bin 0 -> 2178 bytes
themes/Sugar5/images/icon_Notes_32.gif | Bin 0 -> 1067 bytes
themes/Sugar5/images/icon_OpenTasks_32.gif | Bin 0 -> 939 bytes
themes/Sugar5/images/icon_Opportunities.gif | Bin 0 -> 2081 bytes
.../Sugar5/images/icon_Opportunities_32.gif | Bin 0 -> 1026 bytes
themes/Sugar5/images/icon_Phone.gif | Bin 0 -> 344 bytes
themes/Sugar5/images/icon_Portal.gif | Bin 0 -> 2099 bytes
.../images/icon_ProductCategories_32.gif | Bin 0 -> 965 bytes
.../Sugar5/images/icon_ProductTemplates.gif | Bin 0 -> 2328 bytes
themes/Sugar5/images/icon_ProductTypes_32.gif | Bin 0 -> 1081 bytes
.../Sugar5/images/icon_Product_Types_32.gif | Bin 0 -> 1081 bytes
themes/Sugar5/images/icon_Products.gif | Bin 0 -> 2263 bytes
themes/Sugar5/images/icon_Products_32.gif | Bin 0 -> 1055 bytes
themes/Sugar5/images/icon_Project.gif | Bin 0 -> 1732 bytes
themes/Sugar5/images/icon_ProjectTask.gif | Bin 0 -> 1758 bytes
themes/Sugar5/images/icon_ProjectTask_32.gif | Bin 0 -> 876 bytes
themes/Sugar5/images/icon_Project_32.gif | Bin 0 -> 850 bytes
themes/Sugar5/images/icon_Projects_32.gif | Bin 0 -> 850 bytes
themes/Sugar5/images/icon_Prospects.gif | Bin 0 -> 1795 bytes
themes/Sugar5/images/icon_Prospects_32.gif | Bin 0 -> 881 bytes
themes/Sugar5/images/icon_QuickCreate.gif | Bin 0 -> 1806 bytes
themes/Sugar5/images/icon_Quotes.gif | Bin 0 -> 2349 bytes
themes/Sugar5/images/icon_Quotes_32.gif | Bin 0 -> 1157 bytes
themes/Sugar5/images/icon_Relationships.gif | Bin 0 -> 1416 bytes
themes/Sugar5/images/icon_Releases_32.gif | Bin 0 -> 919 bytes
themes/Sugar5/images/icon_Reports_32.gif | Bin 0 -> 1020 bytes
themes/Sugar5/images/icon_Rss_32.gif | Bin 0 -> 1240 bytes
themes/Sugar5/images/icon_SPSync.gif | Bin 0 -> 2170 bytes
themes/Sugar5/images/icon_SPUploadCSS.gif | Bin 0 -> 2034 bytes
themes/Sugar5/images/icon_SearchForm.gif | Bin 0 -> 1993 bytes
themes/Sugar5/images/icon_Studio.gif | Bin 0 -> 4786 bytes
themes/Sugar5/images/icon_Subpanels.gif | Bin 0 -> 1921 bytes
themes/Sugar5/images/icon_SugarFeed.gif | Bin 0 -> 225 bytes
themes/Sugar5/images/icon_SugarFeed_32.gif | Bin 0 -> 1337 bytes
themes/Sugar5/images/icon_SugarNews_32.gif | Bin 0 -> 904 bytes
themes/Sugar5/images/icon_SugarPortal.gif | Bin 0 -> 4229 bytes
themes/Sugar5/images/icon_Targets_32.gif | Bin 0 -> 881 bytes
themes/Sugar5/images/icon_Tasks.gif | Bin 0 -> 1884 bytes
themes/Sugar5/images/icon_Tasks_32.gif | Bin 0 -> 860 bytes
themes/Sugar5/images/icon_Teams_32.gif | Bin 0 -> 950 bytes
themes/Sugar5/images/icon_TrackerPerfs_32.gif | Bin 0 -> 982 bytes
.../Sugar5/images/icon_TrackerQueries_32.gif | Bin 0 -> 987 bytes
.../Sugar5/images/icon_TrackerSessions_32.gif | Bin 0 -> 1009 bytes
themes/Sugar5/images/icon_Trackers_32.gif | Bin 0 -> 984 bytes
themes/Sugar5/images/icon_Users_32.gif | Bin 0 -> 1081 bytes
themes/Sugar5/images/icon_assistant.gif | Bin 0 -> 582 bytes
themes/Sugar5/images/icon_back.gif | Bin 0 -> 538 bytes
themes/Sugar5/images/icon_basic.gif | Bin 0 -> 2201 bytes
themes/Sugar5/images/icon_company.gif | Bin 0 -> 2315 bytes
themes/Sugar5/images/icon_document.gif | Bin 0 -> 2364 bytes
.../Sugar5/images/icon_email_addressbook.gif | Bin 0 -> 594 bytes
themes/Sugar5/images/icon_email_archive.gif | Bin 0 -> 372 bytes
themes/Sugar5/images/icon_email_assign.gif | Bin 0 -> 578 bytes
themes/Sugar5/images/icon_email_attach.gif | Bin 0 -> 331 bytes
themes/Sugar5/images/icon_email_check.gif | Bin 0 -> 580 bytes
themes/Sugar5/images/icon_email_compose.gif | Bin 0 -> 364 bytes
themes/Sugar5/images/icon_email_create.gif | Bin 0 -> 332 bytes
themes/Sugar5/images/icon_email_delete.gif | Bin 0 -> 341 bytes
themes/Sugar5/images/icon_email_folder.gif | Bin 0 -> 1928 bytes
.../images/icon_email_folder_archives.gif | Bin 0 -> 353 bytes
.../images/icon_email_folder_drafts.gif | Bin 0 -> 609 bytes
.../Sugar5/images/icon_email_folder_exp.gif | Bin 0 -> 1928 bytes
.../Sugar5/images/icon_email_folder_grp.gif | Bin 0 -> 1935 bytes
.../Sugar5/images/icon_email_folder_sent.gif | Bin 0 -> 619 bytes
themes/Sugar5/images/icon_email_forward.gif | Bin 0 -> 594 bytes
.../Sugar5/images/icon_email_fullscreen.gif | Bin 0 -> 178 bytes
themes/Sugar5/images/icon_email_mark.gif | Bin 0 -> 355 bytes
themes/Sugar5/images/icon_email_options.gif | Bin 0 -> 111 bytes
themes/Sugar5/images/icon_email_relate.gif | Bin 0 -> 354 bytes
themes/Sugar5/images/icon_email_reply.gif | Bin 0 -> 579 bytes
themes/Sugar5/images/icon_email_replyall.gif | Bin 0 -> 379 bytes
themes/Sugar5/images/icon_email_save.gif | Bin 0 -> 361 bytes
themes/Sugar5/images/icon_email_send.gif | Bin 0 -> 580 bytes
themes/Sugar5/images/icon_email_settings.gif | Bin 0 -> 601 bytes
themes/Sugar5/images/icon_email_sugfolder.gif | Bin 0 -> 1940 bytes
.../images/icon_email_sugfolder_exp.gif | Bin 0 -> 1927 bytes
themes/Sugar5/images/icon_email_view.gif | Bin 0 -> 213 bytes
themes/Sugar5/images/icon_email_view1.gif | Bin 0 -> 122 bytes
themes/Sugar5/images/icon_email_view2.gif | Bin 0 -> 118 bytes
themes/Sugar5/images/icon_email_view3.gif | Bin 0 -> 340 bytes
.../Sugar5/images/icon_expression_types.gif | Bin 0 -> 324 bytes
themes/Sugar5/images/icon_file.gif | Bin 0 -> 1727 bytes
themes/Sugar5/images/icon_home.gif | Bin 0 -> 353 bytes
themes/Sugar5/images/icon_iFrames_32.gif | Bin 0 -> 1042 bytes
themes/Sugar5/images/icon_issue.gif | Bin 0 -> 2325 bytes
themes/Sugar5/images/icon_new_package.gif | Bin 0 -> 6599 bytes
themes/Sugar5/images/icon_opportunity.gif | Bin 0 -> 2273 bytes
themes/Sugar5/images/icon_package.gif | Bin 0 -> 5677 bytes
themes/Sugar5/images/icon_package_create.gif | Bin 0 -> 6599 bytes
themes/Sugar5/images/icon_person.gif | Bin 0 -> 2311 bytes
themes/Sugar5/images/icon_sale.gif | Bin 0 -> 1682 bytes
themes/Sugar5/images/icon_therevisions.gif | Bin 0 -> 2054 bytes
themes/Sugar5/images/img_close_search.gif | Bin 0 -> 118 bytes
themes/Sugar5/images/img_left_arrow.jpg | Bin 0 -> 849 bytes
themes/Sugar5/images/img_loading.gif | Bin 0 -> 771 bytes
themes/Sugar5/images/img_right_arrow.jpg | Bin 0 -> 835 bytes
themes/Sugar5/images/info-add-page.png | Bin 0 -> 312 bytes
themes/Sugar5/images/info-del.png | Bin 0 -> 190 bytes
themes/Sugar5/images/info_inline.gif | Bin 0 -> 79 bytes
themes/Sugar5/images/jscalendar.gif | Bin 0 -> 221 bytes
themes/Sugar5/images/leftarrow.gif | Bin 0 -> 74 bytes
themes/Sugar5/images/leftarrow_big.gif | Bin 0 -> 74 bytes
themes/Sugar5/images/line.gif | Bin 0 -> 1839 bytes
themes/Sugar5/images/list.gif | Bin 0 -> 352 bytes
themes/Sugar5/images/listViewBg.gif | Bin 0 -> 147 bytes
themes/Sugar5/images/listViewHR.gif | Bin 0 -> 43 bytes
themes/Sugar5/images/loadSignedDocument.gif | Bin 0 -> 82 bytes
themes/Sugar5/images/loading.gif | Bin 0 -> 1787 bytes
themes/Sugar5/images/mass_update.gif | Bin 0 -> 91 bytes
themes/Sugar5/images/menuarrow.gif | Bin 0 -> 60 bytes
themes/Sugar5/images/minus.gif | Bin 0 -> 197 bytes
themes/Sugar5/images/minus_inline.gif | Bin 0 -> 76 bytes
themes/Sugar5/images/more.gif | Bin 0 -> 58 bytes
themes/Sugar5/images/new_inline.gif | Bin 0 -> 1437 bytes
themes/Sugar5/images/next.gif | Bin 0 -> 81 bytes
themes/Sugar5/images/next_off.gif | Bin 0 -> 64 bytes
themes/Sugar5/images/no.gif | Bin 0 -> 72 bytes
themes/Sugar5/images/open_multiple.gif | Bin 0 -> 371 bytes
themes/Sugar5/images/otherTab.gif | Bin 0 -> 841 bytes
themes/Sugar5/images/otherTabBlue.gif | Bin 0 -> 841 bytes
themes/Sugar5/images/otherTabGray.gif | Bin 0 -> 841 bytes
themes/Sugar5/images/otherTabGreen.gif | Bin 0 -> 841 bytes
themes/Sugar5/images/otherTabOcher.gif | Bin 0 -> 841 bytes
themes/Sugar5/images/otherTabPurple.gif | Bin 0 -> 841 bytes
themes/Sugar5/images/otherTabRed.gif | Bin 0 -> 841 bytes
.../images/pdf_header_logo_SugarCRMheader.jpg | Bin 0 -> 42438 bytes
.../images/pdf_header_logo_img_left_arrow.jpg | Bin 0 -> 849 bytes
...er_logo_pdf_header_logo_SugarCRMheader.jpg | Bin 0 -> 42438 bytes
themes/Sugar5/images/pdf_image_inline.gif | Bin 0 -> 588 bytes
themes/Sugar5/images/pdf_logo.jpg | Bin 0 -> 20267 bytes
themes/Sugar5/images/pdf_logo_small.jpg | Bin 0 -> 9442 bytes
themes/Sugar5/images/plus.gif | Bin 0 -> 313 bytes
themes/Sugar5/images/plus_inline.gif | Bin 0 -> 79 bytes
themes/Sugar5/images/ppt_image_inline.gif | Bin 0 -> 349 bytes
themes/Sugar5/images/previous.gif | Bin 0 -> 79 bytes
themes/Sugar5/images/previous_off.gif | Bin 0 -> 63 bytes
themes/Sugar5/images/print.gif | Bin 0 -> 68 bytes
themes/Sugar5/images/publish_inline.gif | Bin 0 -> 80 bytes
themes/Sugar5/images/red_camp.gif | Bin 0 -> 1944 bytes
themes/Sugar5/images/refresh.gif | Bin 0 -> 70 bytes
themes/Sugar5/images/rightarrow.gif | Bin 0 -> 75 bytes
themes/Sugar5/images/rightarrow_big.gif | Bin 0 -> 75 bytes
themes/Sugar5/images/scheduled_inline.gif | Bin 0 -> 84 bytes
themes/Sugar5/images/searchMore.gif | Bin 0 -> 105 bytes
themes/Sugar5/images/select.gif | Bin 0 -> 399 bytes
themes/Sugar5/images/show.gif | Bin 0 -> 158 bytes
.../Sugar5/images/show_submenu_shortcuts.gif | Bin 0 -> 76 bytes
themes/Sugar5/images/slot.gif | Bin 0 -> 202 bytes
themes/Sugar5/images/spacer.gif | Bin 0 -> 49 bytes
themes/Sugar5/images/sqsWait.gif | Bin 0 -> 849 bytes
themes/Sugar5/images/start.gif | Bin 0 -> 94 bytes
themes/Sugar5/images/start_off.gif | Bin 0 -> 74 bytes
themes/Sugar5/images/studio_addField.gif | Bin 0 -> 331 bytes
themes/Sugar5/images/studio_addRows.gif | Bin 0 -> 323 bytes
themes/Sugar5/images/studio_blank.gif | Bin 0 -> 328 bytes
themes/Sugar5/images/studio_history.gif | Bin 0 -> 328 bytes
themes/Sugar5/images/studio_publish.gif | Bin 0 -> 335 bytes
themes/Sugar5/images/studio_redo.gif | Bin 0 -> 304 bytes
themes/Sugar5/images/studio_save.gif | Bin 0 -> 306 bytes
themes/Sugar5/images/studio_undo.gif | Bin 0 -> 330 bytes
.../Sugar5/images/sugar-yui-sprites-green.png | Bin 0 -> 2912 bytes
.../Sugar5/images/sugar-yui-sprites-grey.png | Bin 0 -> 2833 bytes
.../images/sugar-yui-sprites-purple.png | Bin 0 -> 2879 bytes
.../Sugar5/images/sugar-yui-sprites-red.png | Bin 0 -> 2894 bytes
themes/Sugar5/images/sugar-yui-sprites.png | Bin 0 -> 2896 bytes
themes/Sugar5/images/sugarColors.xml | 143 +
themes/Sugar5/images/sugar_document.png | Bin 0 -> 601 bytes
themes/Sugar5/images/sugar_icon.ico | Bin 0 -> 894 bytes
themes/Sugar5/images/sugar_icon.png | Bin 0 -> 2641 bytes
themes/Sugar5/images/sugarupdate.gif | Bin 0 -> 200 bytes
themes/Sugar5/images/tabRowBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tabRowBlueBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tabRowGrayBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tabRowGreenBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tabRowOcherBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tabRowPurpleBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tabRowRedBg.gif | Bin 0 -> 99 bytes
themes/Sugar5/images/tentative_inline.gif | Bin 0 -> 97 bytes
themes/Sugar5/images/themePreview.png | Bin 0 -> 9502 bytes
themes/Sugar5/images/txt_image_inline.gif | Bin 0 -> 554 bytes
themes/Sugar5/images/unpublish_inline.gif | Bin 0 -> 82 bytes
themes/Sugar5/images/unscheduled_inline.gif | Bin 0 -> 84 bytes
themes/Sugar5/images/uparrow.gif | Bin 0 -> 66 bytes
themes/Sugar5/images/uparrow_big.gif | Bin 0 -> 66 bytes
themes/Sugar5/images/uparrow_inline.gif | Bin 0 -> 79 bytes
themes/Sugar5/images/view.gif | Bin 0 -> 82 bytes
themes/Sugar5/images/view_inline.gif | Bin 0 -> 82 bytes
themes/Sugar5/images/view_status.gif | Bin 0 -> 83 bytes
themes/Sugar5/images/xls_image_inline.gif | Bin 0 -> 352 bytes
themes/Sugar5/images/yellow_camp.gif | Bin 0 -> 1828 bytes
themes/Sugar5/images/yes.gif | Bin 0 -> 845 bytes
themes/Sugar5/js/style.js | 60 +
themes/Sugar5/layout_utils.php | 39 +
themes/Sugar5/themedef.php | 46 +
themes/Sugar5/tpls/_companyLogo.tpl | 43 +
themes/Sugar5/tpls/_globalLinks.tpl | 57 +
themes/Sugar5/tpls/_head.tpl | 60 +
themes/Sugar5/tpls/_headerLastViewed.tpl | 54 +
themes/Sugar5/tpls/_headerModuleList.tpl | 117 +
themes/Sugar5/tpls/_headerSearch.tpl | 58 +
themes/Sugar5/tpls/_headerShortcuts.tpl | 49 +
themes/Sugar5/tpls/_welcome.tpl | 42 +
themes/Sugar5/tpls/footer.tpl | 56 +
themes/Sugar5/tpls/header.tpl | 62 +
themes/default/css/chart.css | 258 +
themes/default/css/deprecated.css | 125 +
themes/default/css/print.css | 45 +
themes/default/css/style.css | 0
themes/default/css/wizard.css | 172 +
themes/default/images/Accounts.gif | Bin 0 -> 553 bytes
themes/default/images/ActivitiesReports.gif | Bin 0 -> 174 bytes
themes/default/images/Administration.gif | Bin 0 -> 325 bytes
themes/default/images/AlertEmailTemplates.gif | Bin 0 -> 349 bytes
themes/default/images/AllNews.gif | Bin 0 -> 333 bytes
themes/default/images/AllRSS.gif | Bin 0 -> 333 bytes
themes/default/images/ArrowButtons.png | Bin 0 -> 1499 bytes
themes/default/images/Backup.gif | Bin 0 -> 340 bytes
themes/default/images/Backups.gif | Bin 0 -> 576 bytes
themes/default/images/BugReports.gif | Bin 0 -> 172 bytes
themes/default/images/Bugs.gif | Bin 0 -> 214 bytes
themes/default/images/Calendar.gif | Bin 0 -> 350 bytes
themes/default/images/Calls.gif | Bin 0 -> 547 bytes
themes/default/images/Campaigns.gif | Bin 0 -> 559 bytes
themes/default/images/CampaignsWizard.gif | Bin 0 -> 353 bytes
themes/default/images/Cases.gif | Bin 0 -> 334 bytes
themes/default/images/ConfigureSubPanels.gif | Bin 0 -> 343 bytes
themes/default/images/ConfigureTabs.gif | Bin 0 -> 563 bytes
themes/default/images/Contacts.gif | Bin 0 -> 219 bytes
themes/default/images/CreateAccounts.gif | Bin 0 -> 547 bytes
themes/default/images/CreateBugs.gif | Bin 0 -> 218 bytes
themes/default/images/CreateCalls.gif | Bin 0 -> 343 bytes
themes/default/images/CreateCampaigns.gif | Bin 0 -> 562 bytes
themes/default/images/CreateCases.gif | Bin 0 -> 336 bytes
themes/default/images/CreateContacts.gif | Bin 0 -> 214 bytes
themes/default/images/CreateDCEClusters.gif | Bin 0 -> 573 bytes
themes/default/images/CreateDCEDataBases.gif | Bin 0 -> 366 bytes
themes/default/images/CreateDCEInstances.gif | Bin 0 -> 596 bytes
themes/default/images/CreateDCETemplates.gif | Bin 0 -> 569 bytes
themes/default/images/CreateDocuments.gif | Bin 0 -> 225 bytes
themes/default/images/CreateDropdown.gif | Bin 0 -> 349 bytes
themes/default/images/CreateEmails.gif | Bin 0 -> 334 bytes
themes/default/images/CreateEmployees.gif | Bin 0 -> 371 bytes
themes/default/images/CreateHolidays.gif | Bin 0 -> 375 bytes
themes/default/images/CreateKBArticle.gif | Bin 0 -> 236 bytes
themes/default/images/CreateLeads.gif | Bin 0 -> 225 bytes
themes/default/images/CreateMailboxes.gif | Bin 0 -> 381 bytes
themes/default/images/CreateMeetings.gif | Bin 0 -> 343 bytes
themes/default/images/CreateNotes.gif | Bin 0 -> 346 bytes
themes/default/images/CreateOpportunities.gif | Bin 0 -> 326 bytes
themes/default/images/CreateProject.gif | Bin 0 -> 228 bytes
themes/default/images/CreateProjectTask.gif | Bin 0 -> 221 bytes
.../default/images/CreateProjectTemplate.gif | Bin 0 -> 173 bytes
themes/default/images/CreateProspectLists.gif | Bin 0 -> 237 bytes
themes/default/images/CreateProspects.gif | Bin 0 -> 223 bytes
themes/default/images/CreateQuery.gif | Bin 0 -> 223 bytes
themes/default/images/CreateQuotes.gif | Bin 0 -> 230 bytes
themes/default/images/CreateRoles.gif | Bin 0 -> 565 bytes
themes/default/images/CreateScheduler.gif | Bin 0 -> 360 bytes
themes/default/images/CreateTasks.gif | Bin 0 -> 346 bytes
themes/default/images/CreateTeams.gif | Bin 0 -> 209 bytes
themes/default/images/CreateUsers.gif | Bin 0 -> 346 bytes
themes/default/images/CreateWebToLeadForm.gif | Bin 0 -> 240 bytes
themes/default/images/CreateiFrames.gif | Bin 0 -> 363 bytes
themes/default/images/Currencies.gif | Bin 0 -> 569 bytes
themes/default/images/CustomQueries.gif | Bin 0 -> 226 bytes
themes/default/images/DCEActions.gif | Bin 0 -> 623 bytes
themes/default/images/DCELicensingReport.gif | Bin 0 -> 338 bytes
themes/default/images/Dashboard.gif | Bin 0 -> 159 bytes
themes/default/images/DataSets.gif | Bin 0 -> 227 bytes
themes/default/images/Diagnostic.gif | Bin 0 -> 154 bytes
themes/default/images/DocumentRevisions.gif | Bin 0 -> 164 bytes
themes/default/images/Documents.gif | Bin 0 -> 223 bytes
themes/default/images/Dropdown.gif | Bin 0 -> 549 bytes
themes/default/images/EditLayout.gif | Bin 0 -> 353 bytes
themes/default/images/EmailDiagnostic.gif | Bin 0 -> 346 bytes
themes/default/images/EmailFolder.gif | Bin 0 -> 568 bytes
themes/default/images/EmailMan.gif | Bin 0 -> 582 bytes
themes/default/images/EmailSetupWizard.gif | Bin 0 -> 360 bytes
themes/default/images/EmailTemplates.gif | Bin 0 -> 341 bytes
themes/default/images/Emails.gif | Bin 0 -> 341 bytes
themes/default/images/Employees.gif | Bin 0 -> 375 bytes
themes/default/images/ExportCustomFields.gif | Bin 0 -> 573 bytes
themes/default/images/FavoriteReports.gif | Bin 0 -> 928 bytes
themes/default/images/Feeds.gif | Bin 0 -> 235 bytes
themes/default/images/FieldLabels.gif | Bin 0 -> 560 bytes
themes/default/images/Holidays.gif | Bin 0 -> 376 bytes
themes/default/images/Import.gif | Bin 0 -> 577 bytes
themes/default/images/ImportCustomFields.gif | Bin 0 -> 572 bytes
themes/default/images/InboundEmail.gif | Bin 0 -> 377 bytes
themes/default/images/KB.gif | Bin 0 -> 173 bytes
themes/default/images/KBArticle.gif | Bin 0 -> 170 bytes
themes/default/images/KBDocuments.gif | Bin 0 -> 170 bytes
themes/default/images/LanguagePacks.gif | Bin 0 -> 170 bytes
themes/default/images/Layout.gif | Bin 0 -> 567 bytes
themes/default/images/Leads.gif | Bin 0 -> 226 bytes
themes/default/images/License.gif | Bin 0 -> 327 bytes
themes/default/images/MailboxesTestImport.gif | Bin 0 -> 371 bytes
themes/default/images/Manufacturers.gif | Bin 0 -> 322 bytes
themes/default/images/MatrixReport.gif | Bin 0 -> 3058 bytes
themes/default/images/MatrixReportOver.gif | Bin 0 -> 3322 bytes
themes/default/images/Meetings.gif | Bin 0 -> 551 bytes
themes/default/images/MigrateFields.gif | Bin 0 -> 576 bytes
themes/default/images/ModuleBuilder.gif | Bin 0 -> 363 bytes
themes/default/images/ModuleLoader.gif | Bin 0 -> 207 bytes
themes/default/images/MoreDetail.png | Bin 0 -> 2844 bytes
themes/default/images/MyProject.gif | Bin 0 -> 339 bytes
themes/default/images/Newsletters.gif | Bin 0 -> 338 bytes
themes/default/images/Notes.gif | Bin 0 -> 560 bytes
themes/default/images/OnlineDocumentation.gif | Bin 0 -> 400 bytes
themes/default/images/Opportunities.gif | Bin 0 -> 322 bytes
themes/default/images/OpportunityReports.gif | Bin 0 -> 165 bytes
themes/default/images/Password.gif | Bin 0 -> 188 bytes
themes/default/images/PatchUpgrades.gif | Bin 0 -> 333 bytes
themes/default/images/Print_Email.gif | Bin 0 -> 585 bytes
themes/default/images/ProductTemplates.gif | Bin 0 -> 587 bytes
themes/default/images/Product_Types.gif | Bin 0 -> 556 bytes
themes/default/images/Project.gif | Bin 0 -> 218 bytes
themes/default/images/Project2Weeks.gif | Bin 0 -> 152 bytes
themes/default/images/ProjectCollapseAll.gif | Bin 0 -> 96 bytes
themes/default/images/ProjectCopy.gif | Bin 0 -> 245 bytes
themes/default/images/ProjectCut.gif | Bin 0 -> 87 bytes
themes/default/images/ProjectDelete.gif | Bin 0 -> 351 bytes
themes/default/images/ProjectExpandAll.gif | Bin 0 -> 101 bytes
themes/default/images/ProjectIndent.gif | Bin 0 -> 104 bytes
themes/default/images/ProjectInsertRows.gif | Bin 0 -> 83 bytes
themes/default/images/ProjectMinus.gif | Bin 0 -> 861 bytes
themes/default/images/ProjectMonth.gif | Bin 0 -> 115 bytes
themes/default/images/ProjectOutdent.gif | Bin 0 -> 105 bytes
themes/default/images/ProjectPaste.gif | Bin 0 -> 609 bytes
themes/default/images/ProjectPlus.gif | Bin 0 -> 865 bytes
themes/default/images/ProjectSave.gif | Bin 0 -> 343 bytes
themes/default/images/ProjectTask.gif | Bin 0 -> 214 bytes
themes/default/images/ProjectTemplate.gif | Bin 0 -> 164 bytes
themes/default/images/ProjectWeek.gif | Bin 0 -> 154 bytes
themes/default/images/ProspectLists.gif | Bin 0 -> 232 bytes
themes/default/images/Prospects.gif | Bin 0 -> 216 bytes
themes/default/images/QueryBuilder.gif | Bin 0 -> 228 bytes
themes/default/images/RSS.gif | Bin 0 -> 235 bytes
themes/default/images/ReassignRecords.gif | Bin 0 -> 349 bytes
themes/default/images/Rebuild.gif | Bin 0 -> 579 bytes
themes/default/images/Rebuild2.gif | Bin 0 -> 590 bytes
themes/default/images/Releases.gif | Bin 0 -> 570 bytes
themes/default/images/RenameTabs.gif | Bin 0 -> 364 bytes
themes/default/images/Repair.gif | Bin 0 -> 144 bytes
themes/default/images/Roles.gif | Bin 0 -> 563 bytes
themes/default/images/RowsAndColumns.gif | Bin 0 -> 2855 bytes
themes/default/images/RowsAndColumnsOver.gif | Bin 0 -> 3046 bytes
themes/default/images/SchedulerTest.gif | Bin 0 -> 379 bytes
themes/default/images/Schedulers.gif | Bin 0 -> 364 bytes
themes/default/images/Search.gif | Bin 0 -> 100 bytes
themes/default/images/Shippers.gif | Bin 0 -> 326 bytes
themes/default/images/StickyThread.gif | Bin 0 -> 882 bytes
themes/default/images/Studio.gif | Bin 0 -> 617 bytes
.../images/SugarLogic/icon_bool_16.png | Bin 0 -> 1328 bytes
.../images/SugarLogic/icon_date_16.png | Bin 0 -> 1257 bytes
.../images/SugarLogic/icon_enum_16.png | Bin 0 -> 1179 bytes
.../images/SugarLogic/icon_generic_16.png | Bin 0 -> 1212 bytes
.../default/images/SugarLogic/icon_num_16.png | Bin 0 -> 1267 bytes
.../images/SugarLogic/icon_string_16.png | Bin 0 -> 1229 bytes
themes/default/images/SugarPortal.gif | Bin 0 -> 366 bytes
themes/default/images/Summation.gif | Bin 0 -> 2685 bytes
themes/default/images/SummationOver.gif | Bin 0 -> 3064 bytes
.../default/images/SummationWithDetails.gif | Bin 0 -> 2596 bytes
.../images/SummationWithDetailsOver.gif | Bin 0 -> 3121 bytes
themes/default/images/Support.gif | Bin 0 -> 385 bytes
themes/default/images/Tasks.gif | Bin 0 -> 352 bytes
themes/default/images/Teams.gif | Bin 0 -> 148 bytes
themes/default/images/Themes.gif | Bin 0 -> 1016 bytes
themes/default/images/Trackers.gif | Bin 0 -> 609 bytes
themes/default/images/Upgrade.gif | Bin 0 -> 203 bytes
themes/default/images/UpgradeDCEInstances.gif | Bin 0 -> 203 bytes
themes/default/images/Users.gif | Bin 0 -> 343 bytes
themes/default/images/WorkFlow.gif | Bin 0 -> 215 bytes
themes/default/images/_blank.png | Bin 0 -> 137 bytes
themes/default/images/accept_inline.gif | Bin 0 -> 101 bytes
themes/default/images/advanced_search.gif | Bin 0 -> 62 bytes
themes/default/images/arrow.gif | Bin 0 -> 64 bytes
themes/default/images/arrow_down.gif | Bin 0 -> 81 bytes
themes/default/images/arrow_up.gif | Bin 0 -> 79 bytes
themes/default/images/attachment.gif | Bin 0 -> 94 bytes
themes/default/images/backtotop.gif | Bin 0 -> 124 bytes
themes/default/images/bar_loader.gif | Bin 0 -> 10819 bytes
themes/default/images/basic_search.gif | Bin 0 -> 62 bytes
themes/default/images/bg.gif | Bin 0 -> 90 bytes
themes/default/images/bgBlue.gif | Bin 0 -> 90 bytes
themes/default/images/bgBtn.gif | Bin 0 -> 93 bytes
themes/default/images/bgBtnBlue.gif | Bin 0 -> 93 bytes
themes/default/images/bgBtnGray.gif | Bin 0 -> 68 bytes
themes/default/images/bgBtnGreen.gif | Bin 0 -> 93 bytes
themes/default/images/bgBtnOrange.gif | Bin 0 -> 92 bytes
themes/default/images/bgBtnPurple.gif | Bin 0 -> 92 bytes
themes/default/images/bgGray.gif | Bin 0 -> 57 bytes
themes/default/images/bgGreen.gif | Bin 0 -> 808 bytes
themes/default/images/bgOcher.gif | Bin 0 -> 90 bytes
themes/default/images/bgPurple.gif | Bin 0 -> 90 bytes
themes/default/images/bgRed.gif | Bin 0 -> 65 bytes
themes/default/images/blank.gif | Bin 0 -> 43 bytes
themes/default/images/calendarHeaderBg.gif | Bin 0 -> 155 bytes
themes/default/images/calendar_next.gif | Bin 0 -> 67 bytes
themes/default/images/calendar_previous.gif | Bin 0 -> 65 bytes
themes/default/images/chartBg.png | Bin 0 -> 583 bytes
themes/default/images/check_inline.gif | Bin 0 -> 102 bytes
themes/default/images/close.gif | Bin 0 -> 83 bytes
themes/default/images/close_button_24.png | Bin 0 -> 1224 bytes
themes/default/images/close_inline.gif | Bin 0 -> 103 bytes
themes/default/images/colors.blue.icon.gif | Bin 0 -> 89 bytes
themes/default/images/colors.gray.icon.gif | Bin 0 -> 62 bytes
themes/default/images/colors.green.icon.gif | Bin 0 -> 89 bytes
themes/default/images/colors.orange.icon.gif | Bin 0 -> 89 bytes
themes/default/images/colors.purple.icon.gif | Bin 0 -> 89 bytes
themes/default/images/colors.red.icon.gif | Bin 0 -> 70 bytes
themes/default/images/colors.sugar.icon.gif | Bin 0 -> 89 bytes
themes/default/images/company_logo.png | Bin 0 -> 2068 bytes
themes/default/images/create-record.gif | Bin 0 -> 1437 bytes
themes/default/images/currentTab.gif | Bin 0 -> 1002 bytes
themes/default/images/currentTab.png | Bin 0 -> 4661 bytes
themes/default/images/currentTabBlue.gif | Bin 0 -> 993 bytes
themes/default/images/currentTabGray.gif | Bin 0 -> 993 bytes
themes/default/images/currentTabGreen.gif | Bin 0 -> 993 bytes
themes/default/images/currentTabLinkBg.gif | Bin 0 -> 108 bytes
themes/default/images/currentTabOcher.gif | Bin 0 -> 993 bytes
themes/default/images/currentTabOff.gif | Bin 0 -> 764 bytes
themes/default/images/currentTabPurple.gif | Bin 0 -> 993 bytes
themes/default/images/currentTabRed.gif | Bin 0 -> 1006 bytes
.../default/images/dashlet-header-close.gif | Bin 0 -> 68 bytes
themes/default/images/dashlet-header-edit.gif | Bin 0 -> 69 bytes
.../default/images/dashlet-header-refresh.gif | Bin 0 -> 70 bytes
themes/default/images/dcMenuDivider.png | Bin 0 -> 215 bytes
themes/default/images/dce_Settings.gif | Bin 0 -> 338 bytes
themes/default/images/dcmenugrade.png | Bin 0 -> 194 bytes
themes/default/images/decline_inline.gif | Bin 0 -> 102 bytes
themes/default/images/def_image_inline.gif | Bin 0 -> 587 bytes
themes/default/images/delete.gif | Bin 0 -> 69 bytes
themes/default/images/delete_inline.gif | Bin 0 -> 66 bytes
themes/default/images/detailViewBg.gif | Bin 0 -> 262 bytes
themes/default/images/detailview.gif | Bin 0 -> 355 bytes
themes/default/images/doc_image_inline.gif | Bin 0 -> 353 bytes
themes/default/images/downarrow.gif | Bin 0 -> 66 bytes
themes/default/images/downarrow_big.gif | Bin 0 -> 74 bytes
themes/default/images/downarrow_inline.gif | Bin 0 -> 80 bytes
themes/default/images/dp-bd-dc.png | Bin 0 -> 109 bytes
themes/default/images/dp-bd-menu.png | Bin 0 -> 109 bytes
themes/default/images/dp-bd-top-menu.png | Bin 0 -> 183 bytes
themes/default/images/dp-bd.png | Bin 0 -> 109 bytes
themes/default/images/dp-bl-dc.png | Bin 0 -> 430 bytes
themes/default/images/dp-bl-menu.png | Bin 0 -> 429 bytes
themes/default/images/dp-bl.png | Bin 0 -> 366 bytes
themes/default/images/dp-br-dc.png | Bin 0 -> 498 bytes
themes/default/images/dp-br-menu.png | Bin 0 -> 485 bytes
themes/default/images/dp-br.png | Bin 0 -> 360 bytes
themes/default/images/dp-ft-dc.png | Bin 0 -> 154 bytes
themes/default/images/dp-ft-menu.png | Bin 0 -> 139 bytes
themes/default/images/dp-ft.png | Bin 0 -> 159 bytes
themes/default/images/dp-hd-dc.png | Bin 0 -> 201 bytes
themes/default/images/dp-hd-menu.png | Bin 0 -> 120 bytes
themes/default/images/dp-hd-plain.png | Bin 0 -> 182 bytes
themes/default/images/dp-hd.png | Bin 0 -> 140 bytes
themes/default/images/dp-ml-dc.png | Bin 0 -> 123 bytes
themes/default/images/dp-ml-menu.png | Bin 0 -> 123 bytes
themes/default/images/dp-ml.png | Bin 0 -> 125 bytes
themes/default/images/dp-mr-dc.png | Bin 0 -> 137 bytes
themes/default/images/dp-mr-menu.png | Bin 0 -> 134 bytes
themes/default/images/dp-mr.png | Bin 0 -> 128 bytes
themes/default/images/dp-tl-dc.png | Bin 0 -> 332 bytes
themes/default/images/dp-tl-menu.png | Bin 0 -> 260 bytes
themes/default/images/dp-tl-plain.png | Bin 0 -> 355 bytes
themes/default/images/dp-tl.png | Bin 0 -> 417 bytes
themes/default/images/dp-tr-dc.png | Bin 0 -> 414 bytes
themes/default/images/dp-tr-menu.png | Bin 0 -> 436 bytes
themes/default/images/dp-tr-plain.png | Bin 0 -> 395 bytes
themes/default/images/dp-tr.png | Bin 0 -> 473 bytes
themes/default/images/edit_inline.gif | Bin 0 -> 83 bytes
themes/default/images/edit_wizard.gif | Bin 0 -> 82 bytes
themes/default/images/editfields.gif | Bin 0 -> 560 bytes
themes/default/images/editlabels.gif | Bin 0 -> 353 bytes
themes/default/images/editview.gif | Bin 0 -> 353 bytes
themes/default/images/emptyTabSpace.gif | Bin 0 -> 430 bytes
themes/default/images/end.gif | Bin 0 -> 95 bytes
themes/default/images/end_off.gif | Bin 0 -> 75 bytes
themes/default/images/export.gif | Bin 0 -> 78 bytes
themes/default/images/fonts.larger.icon.gif | Bin 0 -> 135 bytes
themes/default/images/fonts.largest.icon.gif | Bin 0 -> 144 bytes
themes/default/images/fonts.normal.icon.gif | Bin 0 -> 127 bytes
themes/default/images/form-button-bg.png | Bin 0 -> 166 bytes
themes/default/images/form-button-bg2.png | Bin 0 -> 3545 bytes
.../default/images/form-button-primary-bg.png | Bin 0 -> 203 bytes
themes/default/images/formButtonBg.gif | Bin 0 -> 93 bytes
themes/default/images/formButtonBgOn.gif | Bin 0 -> 67 bytes
themes/default/images/getLatestDocument.gif | Bin 0 -> 81 bytes
themes/default/images/green_camp.gif | Bin 0 -> 1829 bytes
themes/default/images/grouped-menu-arrow.png | Bin 0 -> 320 bytes
themes/default/images/grouped-menu.png | Bin 0 -> 340 bytes
themes/default/images/h3Arrow.gif | Bin 0 -> 64 bytes
themes/default/images/help-dashlet.gif | Bin 0 -> 66 bytes
themes/default/images/help.gif | Bin 0 -> 66 bytes
themes/default/images/helpInline.gif | Bin 0 -> 153 bytes
themes/default/images/hide.gif | Bin 0 -> 223 bytes
.../default/images/hide_submenu_shortcuts.gif | Bin 0 -> 74 bytes
themes/default/images/iFrames.gif | Bin 0 -> 338 bytes
themes/default/images/icon_A1_newmod.gif | Bin 0 -> 2201 bytes
themes/default/images/icon_Accounts.gif | Bin 0 -> 2053 bytes
themes/default/images/icon_Accounts_32.gif | Bin 0 -> 955 bytes
themes/default/images/icon_Activities.gif | Bin 0 -> 2304 bytes
themes/default/images/icon_Address.gif | Bin 0 -> 160 bytes
themes/default/images/icon_AdminMobile.gif | Bin 0 -> 333 bytes
themes/default/images/icon_AdminPDF.gif | Bin 0 -> 248 bytes
themes/default/images/icon_AdminThemes.gif | Bin 0 -> 340 bytes
themes/default/images/icon_AdvancedSearch.gif | Bin 0 -> 2518 bytes
themes/default/images/icon_Application.gif | Bin 0 -> 5631 bytes
themes/default/images/icon_BasicSearch.gif | Bin 0 -> 2561 bytes
themes/default/images/icon_Bugs.gif | Bin 0 -> 2052 bytes
themes/default/images/icon_Bugs_32.gif | Bin 0 -> 995 bytes
themes/default/images/icon_Calendar_32.gif | Bin 0 -> 1683 bytes
themes/default/images/icon_Calls.gif | Bin 0 -> 1905 bytes
themes/default/images/icon_Calls_32.gif | Bin 0 -> 990 bytes
themes/default/images/icon_CampaignLog_32.gif | Bin 0 -> 1120 bytes
themes/default/images/icon_Campaigns.gif | Bin 0 -> 2342 bytes
themes/default/images/icon_Campaigns_32.gif | Bin 0 -> 1120 bytes
themes/default/images/icon_Cases.gif | Bin 0 -> 2060 bytes
themes/default/images/icon_Cases_32.gif | Bin 0 -> 976 bytes
themes/default/images/icon_Charts_Funnel.gif | Bin 0 -> 2031 bytes
.../default/images/icon_Charts_Funnel_32.gif | Bin 0 -> 697 bytes
.../default/images/icon_Charts_Gauge_32.gif | Bin 0 -> 738 bytes
themes/default/images/icon_Charts_GroupBy.gif | Bin 0 -> 2150 bytes
.../default/images/icon_Charts_GroupBy_32.gif | Bin 0 -> 764 bytes
.../default/images/icon_Charts_Horizontal.gif | Bin 0 -> 2113 bytes
.../images/icon_Charts_Horizontal_32.gif | Bin 0 -> 800 bytes
themes/default/images/icon_Charts_Pie.gif | Bin 0 -> 2223 bytes
themes/default/images/icon_Charts_Pie_32.gif | Bin 0 -> 794 bytes
.../default/images/icon_Charts_Vertical.gif | Bin 0 -> 2131 bytes
.../images/icon_Charts_Vertical_32.gif | Bin 0 -> 799 bytes
themes/default/images/icon_Column_1.gif | Bin 0 -> 1971 bytes
themes/default/images/icon_Column_2.gif | Bin 0 -> 2082 bytes
themes/default/images/icon_Column_3.gif | Bin 0 -> 2186 bytes
.../default/images/icon_ConnectorConfig.gif | Bin 0 -> 4560 bytes
.../images/icon_ConnectorConfigOver.gif | Bin 0 -> 4743 bytes
.../images/icon_ConnectorConfig_16.gif | Bin 0 -> 622 bytes
.../default/images/icon_ConnectorEnable.gif | Bin 0 -> 4476 bytes
.../images/icon_ConnectorEnableOver.gif | Bin 0 -> 4593 bytes
.../images/icon_ConnectorEnable_16.gif | Bin 0 -> 382 bytes
themes/default/images/icon_ConnectorMap.gif | Bin 0 -> 4577 bytes
.../default/images/icon_ConnectorMapOver.gif | Bin 0 -> 4797 bytes
.../default/images/icon_ConnectorMap_16.gif | Bin 0 -> 594 bytes
.../images/icon_ConnectorSearchFields.gif | Bin 0 -> 4548 bytes
.../images/icon_ConnectorSearchFieldsOver.gif | Bin 0 -> 4656 bytes
.../images/icon_ConnectorSearchFields_16.gif | Bin 0 -> 618 bytes
themes/default/images/icon_Connectors.gif | Bin 0 -> 600 bytes
themes/default/images/icon_Contacts.gif | Bin 0 -> 1953 bytes
themes/default/images/icon_Contacts_32.gif | Bin 0 -> 971 bytes
themes/default/images/icon_Contracts_32.gif | Bin 0 -> 762 bytes
themes/default/images/icon_ConvertLead.gif | Bin 0 -> 2505 bytes
themes/default/images/icon_Dashlet.gif | Bin 0 -> 1435 bytes
themes/default/images/icon_Delete.gif | Bin 0 -> 2263 bytes
themes/default/images/icon_DeleteFull.gif | Bin 0 -> 2340 bytes
themes/default/images/icon_DetailView.gif | Bin 0 -> 1837 bytes
themes/default/images/icon_Documents.gif | Bin 0 -> 2054 bytes
themes/default/images/icon_Documents_32.gif | Bin 0 -> 1009 bytes
themes/default/images/icon_DropDownEditor.gif | Bin 0 -> 3202 bytes
themes/default/images/icon_EditView.gif | Bin 0 -> 1903 bytes
themes/default/images/icon_EmailAddress.gif | Bin 0 -> 327 bytes
.../default/images/icon_EmailAddresses_32.gif | Bin 0 -> 853 bytes
.../default/images/icon_EmailTemplates_32.gif | Bin 0 -> 859 bytes
themes/default/images/icon_Emails.gif | Bin 0 -> 1873 bytes
themes/default/images/icon_Emails_32.gif | Bin 0 -> 859 bytes
.../images/icon_FavoriteReports_32.gif | Bin 0 -> 779 bytes
themes/default/images/icon_Feeds_32.gif | Bin 0 -> 1240 bytes
themes/default/images/icon_Fields.gif | Bin 0 -> 1966 bytes
themes/default/images/icon_Forecasts_32.gif | Bin 0 -> 1031 bytes
themes/default/images/icon_Invaders_32.gif | Bin 0 -> 1256 bytes
themes/default/images/icon_JotPad.gif | Bin 0 -> 2304 bytes
themes/default/images/icon_JotPad_32.gif | Bin 0 -> 845 bytes
themes/default/images/icon_KBDocuments.gif | Bin 0 -> 2145 bytes
themes/default/images/icon_KBDocuments_32.gif | Bin 0 -> 1044 bytes
themes/default/images/icon_Labels.gif | Bin 0 -> 2009 bytes
themes/default/images/icon_Layouts.gif | Bin 0 -> 2099 bytes
themes/default/images/icon_Leads.gif | Bin 0 -> 2513 bytes
themes/default/images/icon_Leads_32.gif | Bin 0 -> 1180 bytes
themes/default/images/icon_ListView.gif | Bin 0 -> 2019 bytes
themes/default/images/icon_Meetings.gif | Bin 0 -> 2484 bytes
themes/default/images/icon_Meetings_32.gif | Bin 0 -> 1140 bytes
themes/default/images/icon_MobileLayouts.gif | Bin 0 -> 2244 bytes
themes/default/images/icon_ModuleBuilder.gif | Bin 0 -> 4427 bytes
themes/default/images/icon_MyPortal_32.gif | Bin 0 -> 1042 bytes
themes/default/images/icon_MyTasks_32.gif | Bin 0 -> 929 bytes
themes/default/images/icon_NewModule.gif | Bin 0 -> 2241 bytes
themes/default/images/icon_Notes.gif | Bin 0 -> 2178 bytes
themes/default/images/icon_Notes_32.gif | Bin 0 -> 1067 bytes
themes/default/images/icon_OpenTasks_32.gif | Bin 0 -> 939 bytes
themes/default/images/icon_Opportunities.gif | Bin 0 -> 2081 bytes
.../default/images/icon_Opportunities_32.gif | Bin 0 -> 1026 bytes
themes/default/images/icon_Phone.gif | Bin 0 -> 344 bytes
themes/default/images/icon_Popup.gif | Bin 0 -> 2348 bytes
themes/default/images/icon_Portal.gif | Bin 0 -> 2099 bytes
.../images/icon_ProductCategories_32.gif | Bin 0 -> 965 bytes
.../default/images/icon_ProductTypes_32.gif | Bin 0 -> 1081 bytes
.../default/images/icon_Product_Types_32.gif | Bin 0 -> 1081 bytes
themes/default/images/icon_Products_32.gif | Bin 0 -> 1055 bytes
themes/default/images/icon_Project.gif | Bin 0 -> 1732 bytes
themes/default/images/icon_ProjectTask.gif | Bin 0 -> 1758 bytes
themes/default/images/icon_ProjectTask_32.gif | Bin 0 -> 876 bytes
themes/default/images/icon_Project_32.gif | Bin 0 -> 850 bytes
themes/default/images/icon_Projects_32.gif | Bin 0 -> 850 bytes
themes/default/images/icon_Prospects.gif | Bin 0 -> 1795 bytes
themes/default/images/icon_Prospects_32.gif | Bin 0 -> 881 bytes
themes/default/images/icon_QuickCreate.gif | Bin 0 -> 1806 bytes
themes/default/images/icon_Quotes_32.gif | Bin 0 -> 1157 bytes
themes/default/images/icon_Relationships.gif | Bin 0 -> 1416 bytes
themes/default/images/icon_Releases_32.gif | Bin 0 -> 919 bytes
themes/default/images/icon_Reports_32.gif | Bin 0 -> 1020 bytes
themes/default/images/icon_Rss_32.gif | Bin 0 -> 1240 bytes
themes/default/images/icon_SPSync.gif | Bin 0 -> 2170 bytes
themes/default/images/icon_SPUploadCSS.gif | Bin 0 -> 2034 bytes
themes/default/images/icon_SearchForm.gif | Bin 0 -> 1993 bytes
themes/default/images/icon_ShortcutBar.gif | Bin 0 -> 161 bytes
themes/default/images/icon_Studio.gif | Bin 0 -> 4786 bytes
themes/default/images/icon_Subpanels.gif | Bin 0 -> 1921 bytes
themes/default/images/icon_SugarFeed.gif | Bin 0 -> 225 bytes
themes/default/images/icon_SugarFeed_32.gif | Bin 0 -> 1337 bytes
themes/default/images/icon_SugarNews_32.gif | Bin 0 -> 904 bytes
themes/default/images/icon_SugarPortal.gif | Bin 0 -> 4229 bytes
themes/default/images/icon_Targets_32.gif | Bin 0 -> 881 bytes
themes/default/images/icon_Tasks.gif | Bin 0 -> 1884 bytes
themes/default/images/icon_Tasks_32.gif | Bin 0 -> 860 bytes
themes/default/images/icon_Teams_32.gif | Bin 0 -> 950 bytes
.../default/images/icon_TrackerPerfs_32.gif | Bin 0 -> 982 bytes
.../default/images/icon_TrackerQueries_32.gif | Bin 0 -> 987 bytes
.../images/icon_TrackerSessions_32.gif | Bin 0 -> 1009 bytes
themes/default/images/icon_Trackers_32.gif | Bin 0 -> 984 bytes
themes/default/images/icon_Users_32.gif | Bin 0 -> 1081 bytes
themes/default/images/icon_assistant.gif | Bin 0 -> 582 bytes
themes/default/images/icon_back.gif | Bin 0 -> 538 bytes
themes/default/images/icon_basic.gif | Bin 0 -> 2201 bytes
themes/default/images/icon_company.gif | Bin 0 -> 2315 bytes
themes/default/images/icon_document.gif | Bin 0 -> 2364 bytes
.../default/images/icon_email_addressbook.gif | Bin 0 -> 594 bytes
themes/default/images/icon_email_archive.gif | Bin 0 -> 372 bytes
themes/default/images/icon_email_assign.gif | Bin 0 -> 578 bytes
themes/default/images/icon_email_attach.gif | Bin 0 -> 331 bytes
themes/default/images/icon_email_check.gif | Bin 0 -> 580 bytes
themes/default/images/icon_email_compose.gif | Bin 0 -> 364 bytes
themes/default/images/icon_email_create.gif | Bin 0 -> 332 bytes
themes/default/images/icon_email_delete.gif | Bin 0 -> 341 bytes
themes/default/images/icon_email_folder.gif | Bin 0 -> 1928 bytes
.../images/icon_email_folder_archives.gif | Bin 0 -> 353 bytes
.../images/icon_email_folder_drafts.gif | Bin 0 -> 609 bytes
.../default/images/icon_email_folder_exp.gif | Bin 0 -> 1928 bytes
.../default/images/icon_email_folder_grp.gif | Bin 0 -> 1935 bytes
.../default/images/icon_email_folder_sent.gif | Bin 0 -> 619 bytes
themes/default/images/icon_email_forward.gif | Bin 0 -> 594 bytes
.../default/images/icon_email_fullscreen.gif | Bin 0 -> 178 bytes
themes/default/images/icon_email_mark.gif | Bin 0 -> 355 bytes
themes/default/images/icon_email_options.gif | Bin 0 -> 111 bytes
themes/default/images/icon_email_relate.gif | Bin 0 -> 354 bytes
themes/default/images/icon_email_reply.gif | Bin 0 -> 579 bytes
themes/default/images/icon_email_replyall.gif | Bin 0 -> 379 bytes
themes/default/images/icon_email_save.gif | Bin 0 -> 361 bytes
themes/default/images/icon_email_send.gif | Bin 0 -> 580 bytes
themes/default/images/icon_email_settings.gif | Bin 0 -> 601 bytes
.../default/images/icon_email_sugfolder.gif | Bin 0 -> 1940 bytes
.../images/icon_email_sugfolder_exp.gif | Bin 0 -> 1927 bytes
themes/default/images/icon_email_view.gif | Bin 0 -> 213 bytes
themes/default/images/icon_email_view1.gif | Bin 0 -> 122 bytes
themes/default/images/icon_email_view2.gif | Bin 0 -> 118 bytes
themes/default/images/icon_email_view3.gif | Bin 0 -> 340 bytes
.../default/images/icon_expression_types.gif | Bin 0 -> 324 bytes
themes/default/images/icon_file.gif | Bin 0 -> 1727 bytes
themes/default/images/icon_home.gif | Bin 0 -> 353 bytes
themes/default/images/icon_iFrames_32.gif | Bin 0 -> 1042 bytes
themes/default/images/icon_issue.gif | Bin 0 -> 2325 bytes
themes/default/images/icon_new_package.gif | Bin 0 -> 6599 bytes
themes/default/images/icon_opportunity.gif | Bin 0 -> 2273 bytes
themes/default/images/icon_package.gif | Bin 0 -> 5677 bytes
themes/default/images/icon_package_create.gif | Bin 0 -> 6599 bytes
themes/default/images/icon_person.gif | Bin 0 -> 2311 bytes
themes/default/images/icon_sale.gif | Bin 0 -> 1682 bytes
themes/default/images/icon_therevisions.gif | Bin 0 -> 2054 bytes
themes/default/images/id-ff-add.png | Bin 0 -> 220 bytes
themes/default/images/id-ff-clear.png | Bin 0 -> 489 bytes
themes/default/images/id-ff-copy.png | Bin 0 -> 277 bytes
themes/default/images/id-ff-remove.png | Bin 0 -> 404 bytes
themes/default/images/id-ff-select.png | Bin 0 -> 3077 bytes
themes/default/images/id-ff-vcard.png | Bin 0 -> 192 bytes
themes/default/images/img_close_search.gif | Bin 0 -> 118 bytes
themes/default/images/img_left_arrow.jpg | Bin 0 -> 849 bytes
themes/default/images/img_loading.gif | Bin 0 -> 771 bytes
themes/default/images/img_right_arrow.jpg | Bin 0 -> 835 bytes
themes/default/images/info-add.gif | Bin 0 -> 82 bytes
themes/default/images/info-help.gif | Bin 0 -> 66 bytes
themes/default/images/info-layout.gif | Bin 0 -> 83 bytes
themes/default/images/info_inline.gif | Bin 0 -> 79 bytes
themes/default/images/join_imeeting.gif | Bin 0 -> 118 bytes
themes/default/images/join_meeting_inline.png | Bin 0 -> 600 bytes
themes/default/images/jscalendar.gif | Bin 0 -> 221 bytes
themes/default/images/leftarrow.gif | Bin 0 -> 74 bytes
themes/default/images/leftarrow_big.gif | Bin 0 -> 74 bytes
themes/default/images/line.gif | Bin 0 -> 1839 bytes
themes/default/images/list.gif | Bin 0 -> 352 bytes
themes/default/images/listViewBg.gif | Bin 0 -> 147 bytes
themes/default/images/listViewHR.gif | Bin 0 -> 43 bytes
themes/default/images/loadSignedDocument.gif | Bin 0 -> 82 bytes
themes/default/images/loading.gif | Bin 0 -> 1787 bytes
themes/default/images/login-bg.png | Bin 0 -> 156 bytes
themes/default/images/mass_update.gif | Bin 0 -> 91 bytes
themes/default/images/menuarrow.gif | Bin 0 -> 60 bytes
themes/default/images/minus.gif | Bin 0 -> 197 bytes
themes/default/images/minus_inline.gif | Bin 0 -> 76 bytes
themes/default/images/more.gif | Bin 0 -> 58 bytes
themes/default/images/new_inline.gif | Bin 0 -> 1437 bytes
themes/default/images/next.gif | Bin 0 -> 81 bytes
themes/default/images/next_off.gif | Bin 0 -> 64 bytes
themes/default/images/no.gif | Bin 0 -> 72 bytes
themes/default/images/open_multiple.gif | Bin 0 -> 371 bytes
themes/default/images/otherTab.gif | Bin 0 -> 841 bytes
themes/default/images/otherTab.png | Bin 0 -> 166 bytes
themes/default/images/otherTabBlue.gif | Bin 0 -> 841 bytes
themes/default/images/otherTabGray.gif | Bin 0 -> 841 bytes
themes/default/images/otherTabGreen.gif | Bin 0 -> 841 bytes
themes/default/images/otherTabOcher.gif | Bin 0 -> 841 bytes
themes/default/images/otherTabPurple.gif | Bin 0 -> 841 bytes
themes/default/images/otherTabRed.gif | Bin 0 -> 841 bytes
.../images/pdf_header_logo_SugarCRMheader.jpg | Bin 0 -> 78771 bytes
.../images/pdf_header_logo_company_logo.png | Bin 0 -> 2231 bytes
.../images/pdf_header_logo_img_left_arrow.jpg | Bin 0 -> 849 bytes
...er_logo_pdf_header_logo_SugarCRMheader.jpg | Bin 0 -> 78651 bytes
themes/default/images/pdf_image_inline.gif | Bin 0 -> 588 bytes
themes/default/images/pdf_logo.jpg | Bin 0 -> 35792 bytes
themes/default/images/pdf_logo_small.jpg | Bin 0 -> 8236 bytes
themes/default/images/plug-in_Excel.gif | Bin 0 -> 2625 bytes
themes/default/images/plug-in_Outlook.gif | Bin 0 -> 2653 bytes
themes/default/images/plug-in_Word.gif | Bin 0 -> 2735 bytes
themes/default/images/plus.gif | Bin 0 -> 313 bytes
themes/default/images/plus_inline.gif | Bin 0 -> 82 bytes
themes/default/images/ppt_image_inline.gif | Bin 0 -> 349 bytes
themes/default/images/previous.gif | Bin 0 -> 79 bytes
themes/default/images/previous_off.gif | Bin 0 -> 63 bytes
themes/default/images/print.gif | Bin 0 -> 68 bytes
themes/default/images/publish_inline.gif | Bin 0 -> 80 bytes
themes/default/images/red_camp.gif | Bin 0 -> 1944 bytes
themes/default/images/rightarrow.gif | Bin 0 -> 75 bytes
themes/default/images/rightarrow_big.gif | Bin 0 -> 75 bytes
themes/default/images/scheduled_inline.gif | Bin 0 -> 84 bytes
themes/default/images/searchMore.gif | Bin 0 -> 105 bytes
themes/default/images/shortCutsBg.png | Bin 0 -> 152 bytes
themes/default/images/show.gif | Bin 0 -> 158 bytes
.../default/images/show_submenu_shortcuts.gif | Bin 0 -> 76 bytes
themes/default/images/slot.gif | Bin 0 -> 202 bytes
themes/default/images/spacer.gif | Bin 0 -> 49 bytes
themes/default/images/sqsWait.gif | Bin 0 -> 849 bytes
themes/default/images/start.gif | Bin 0 -> 94 bytes
.../default/images/start_meeting_inline.png | Bin 0 -> 579 bytes
themes/default/images/start_off.gif | Bin 0 -> 74 bytes
themes/default/images/studio_addField.gif | Bin 0 -> 331 bytes
themes/default/images/studio_addRows.gif | Bin 0 -> 323 bytes
themes/default/images/studio_blank.gif | Bin 0 -> 328 bytes
themes/default/images/studio_history.gif | Bin 0 -> 328 bytes
themes/default/images/studio_publish.gif | Bin 0 -> 335 bytes
themes/default/images/studio_redo.gif | Bin 0 -> 304 bytes
themes/default/images/studio_save.gif | Bin 0 -> 306 bytes
themes/default/images/studio_undo.gif | Bin 0 -> 330 bytes
.../default/images/sugar-yui-sprites-grey.png | Bin 0 -> 2833 bytes
themes/default/images/sugarColors.xml | 144 +
themes/default/images/sugar_document.png | Bin 0 -> 601 bytes
themes/default/images/sugar_icon.ico | Bin 0 -> 894 bytes
themes/default/images/sugar_icon.png | Bin 0 -> 2641 bytes
themes/default/images/sugarupdate.gif | Bin 0 -> 200 bytes
themes/default/images/tabRowBlueBg.gif | Bin 0 -> 99 bytes
themes/default/images/tabRowGrayBg.gif | Bin 0 -> 99 bytes
themes/default/images/tabRowGreenBg.gif | Bin 0 -> 99 bytes
themes/default/images/tabRowOcherBg.gif | Bin 0 -> 99 bytes
themes/default/images/tabRowPurpleBg.gif | Bin 0 -> 99 bytes
themes/default/images/tabRowRedBg.gif | Bin 0 -> 99 bytes
themes/default/images/tentative_inline.gif | Bin 0 -> 97 bytes
themes/default/images/themePreview.png | Bin 0 -> 5862 bytes
themes/default/images/txt_image_inline.gif | Bin 0 -> 554 bytes
themes/default/images/unpublish_inline.gif | Bin 0 -> 82 bytes
themes/default/images/unscheduled_inline.gif | Bin 0 -> 84 bytes
themes/default/images/uparrow.gif | Bin 0 -> 66 bytes
themes/default/images/uparrow_big.gif | Bin 0 -> 66 bytes
themes/default/images/uparrow_inline.gif | Bin 0 -> 79 bytes
themes/default/images/view.gif | Bin 0 -> 82 bytes
themes/default/images/view_inline.gif | Bin 0 -> 82 bytes
themes/default/images/view_status.gif | Bin 0 -> 83 bytes
themes/default/images/xls_image_inline.gif | Bin 0 -> 352 bytes
themes/default/images/yellow_camp.gif | Bin 0 -> 1828 bytes
themes/default/images/yes.gif | Bin 0 -> 845 bytes
themes/default/js/style.js | 37 +
vCard.php | 61 +
vcal_server.php | 48 +
5776 files changed, 1110106 insertions(+)
create mode 100644 HandleAjaxCall.php
create mode 100644 LICENSE.txt
create mode 100644 ModuleInstall/ModuleInstaller.php
create mode 100644 ModuleInstall/ModuleScanner.php
create mode 100644 ModuleInstall/PackageManager/ListViewPackages.php
create mode 100644 ModuleInstall/PackageManager/PackageController.php
create mode 100644 ModuleInstall/PackageManager/PackageManager.php
create mode 100644 ModuleInstall/PackageManager/PackageManagerComm.php
create mode 100644 ModuleInstall/PackageManager/PackageManagerDisplay.php
create mode 100644 ModuleInstall/PackageManager/PackageManagerDownloader.php
create mode 100644 ModuleInstall/PackageManager/metadata/listviewdefs.php
create mode 100644 ModuleInstall/PackageManager/tpls/ModuleLoaderListView.tpl
create mode 100644 ModuleInstall/PackageManager/tpls/PackageForm.tpl
create mode 100644 ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl
create mode 100644 ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl
create mode 100644 SugarSecurity.php
create mode 100644 TreeData.php
create mode 100644 WebToLeadCapture.php
create mode 100644 XTemplate/LICENSE
create mode 100644 XTemplate/xtpl.php
create mode 100644 Zend/Crypt.php
create mode 100644 Zend/Crypt/DiffieHellman.php
create mode 100644 Zend/Crypt/DiffieHellman/Exception.php
create mode 100644 Zend/Crypt/Exception.php
create mode 100644 Zend/Crypt/Hmac.php
create mode 100644 Zend/Crypt/Hmac/Exception.php
create mode 100644 Zend/Crypt/Math.php
create mode 100644 Zend/Crypt/Math/BigInteger.php
create mode 100644 Zend/Crypt/Math/BigInteger/Bcmath.php
create mode 100644 Zend/Crypt/Math/BigInteger/Exception.php
create mode 100644 Zend/Crypt/Math/BigInteger/Gmp.php
create mode 100644 Zend/Crypt/Math/BigInteger/Interface.php
create mode 100644 Zend/Crypt/Math/Exception.php
create mode 100644 Zend/Crypt/Rsa.php
create mode 100644 Zend/Crypt/Rsa/Key.php
create mode 100644 Zend/Crypt/Rsa/Key/Private.php
create mode 100644 Zend/Crypt/Rsa/Key/Public.php
create mode 100644 Zend/Exception.php
create mode 100644 Zend/Gdata.php
create mode 100644 Zend/Gdata/App.php
create mode 100644 Zend/Gdata/App/AuthException.php
create mode 100644 Zend/Gdata/App/BadMethodCallException.php
create mode 100644 Zend/Gdata/App/Base.php
create mode 100644 Zend/Gdata/App/BaseMediaSource.php
create mode 100644 Zend/Gdata/App/CaptchaRequiredException.php
create mode 100644 Zend/Gdata/App/Entry.php
create mode 100644 Zend/Gdata/App/Exception.php
create mode 100644 Zend/Gdata/App/Extension.php
create mode 100644 Zend/Gdata/App/Extension/Author.php
create mode 100644 Zend/Gdata/App/Extension/Category.php
create mode 100644 Zend/Gdata/App/Extension/Content.php
create mode 100644 Zend/Gdata/App/Extension/Contributor.php
create mode 100644 Zend/Gdata/App/Extension/Control.php
create mode 100644 Zend/Gdata/App/Extension/Draft.php
create mode 100644 Zend/Gdata/App/Extension/Edited.php
create mode 100644 Zend/Gdata/App/Extension/Element.php
create mode 100644 Zend/Gdata/App/Extension/Email.php
create mode 100644 Zend/Gdata/App/Extension/Generator.php
create mode 100644 Zend/Gdata/App/Extension/Icon.php
create mode 100644 Zend/Gdata/App/Extension/Id.php
create mode 100644 Zend/Gdata/App/Extension/Link.php
create mode 100644 Zend/Gdata/App/Extension/Logo.php
create mode 100644 Zend/Gdata/App/Extension/Name.php
create mode 100644 Zend/Gdata/App/Extension/Person.php
create mode 100644 Zend/Gdata/App/Extension/Published.php
create mode 100644 Zend/Gdata/App/Extension/Rights.php
create mode 100644 Zend/Gdata/App/Extension/Source.php
create mode 100644 Zend/Gdata/App/Extension/Subtitle.php
create mode 100644 Zend/Gdata/App/Extension/Summary.php
create mode 100644 Zend/Gdata/App/Extension/Text.php
create mode 100644 Zend/Gdata/App/Extension/Title.php
create mode 100644 Zend/Gdata/App/Extension/Updated.php
create mode 100644 Zend/Gdata/App/Extension/Uri.php
create mode 100644 Zend/Gdata/App/Feed.php
create mode 100644 Zend/Gdata/App/FeedEntryParent.php
create mode 100644 Zend/Gdata/App/FeedSourceParent.php
create mode 100644 Zend/Gdata/App/HttpException.php
create mode 100644 Zend/Gdata/App/IOException.php
create mode 100644 Zend/Gdata/App/InvalidArgumentException.php
create mode 100644 Zend/Gdata/App/LoggingHttpClientAdapterSocket.php
create mode 100644 Zend/Gdata/App/MediaEntry.php
create mode 100644 Zend/Gdata/App/MediaFileSource.php
create mode 100644 Zend/Gdata/App/MediaSource.php
create mode 100644 Zend/Gdata/App/Util.php
create mode 100644 Zend/Gdata/App/VersionException.php
create mode 100644 Zend/Gdata/AuthSub.php
create mode 100644 Zend/Gdata/Books.php
create mode 100644 Zend/Gdata/Books/CollectionEntry.php
create mode 100644 Zend/Gdata/Books/CollectionFeed.php
create mode 100644 Zend/Gdata/Books/Extension/AnnotationLink.php
create mode 100644 Zend/Gdata/Books/Extension/BooksCategory.php
create mode 100644 Zend/Gdata/Books/Extension/BooksLink.php
create mode 100644 Zend/Gdata/Books/Extension/Embeddability.php
create mode 100644 Zend/Gdata/Books/Extension/InfoLink.php
create mode 100644 Zend/Gdata/Books/Extension/PreviewLink.php
create mode 100644 Zend/Gdata/Books/Extension/Review.php
create mode 100644 Zend/Gdata/Books/Extension/ThumbnailLink.php
create mode 100644 Zend/Gdata/Books/Extension/Viewability.php
create mode 100644 Zend/Gdata/Books/VolumeEntry.php
create mode 100644 Zend/Gdata/Books/VolumeFeed.php
create mode 100644 Zend/Gdata/Books/VolumeQuery.php
create mode 100644 Zend/Gdata/Calendar.php
create mode 100644 Zend/Gdata/Calendar/EventEntry.php
create mode 100644 Zend/Gdata/Calendar/EventFeed.php
create mode 100644 Zend/Gdata/Calendar/EventQuery.php
create mode 100644 Zend/Gdata/Calendar/Extension/AccessLevel.php
create mode 100644 Zend/Gdata/Calendar/Extension/Color.php
create mode 100644 Zend/Gdata/Calendar/Extension/Hidden.php
create mode 100644 Zend/Gdata/Calendar/Extension/Link.php
create mode 100644 Zend/Gdata/Calendar/Extension/QuickAdd.php
create mode 100644 Zend/Gdata/Calendar/Extension/Selected.php
create mode 100644 Zend/Gdata/Calendar/Extension/SendEventNotifications.php
create mode 100644 Zend/Gdata/Calendar/Extension/Timezone.php
create mode 100644 Zend/Gdata/Calendar/Extension/WebContent.php
create mode 100644 Zend/Gdata/Calendar/ListEntry.php
create mode 100644 Zend/Gdata/Calendar/ListFeed.php
create mode 100644 Zend/Gdata/ClientLogin.php
create mode 100644 Zend/Gdata/Docs.php
create mode 100644 Zend/Gdata/Docs/DocumentListEntry.php
create mode 100644 Zend/Gdata/Docs/DocumentListFeed.php
create mode 100644 Zend/Gdata/Docs/Query.php
create mode 100644 Zend/Gdata/DublinCore.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Creator.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Date.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Description.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Format.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Identifier.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Language.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Publisher.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Rights.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Subject.php
create mode 100644 Zend/Gdata/DublinCore/Extension/Title.php
create mode 100644 Zend/Gdata/Entry.php
create mode 100644 Zend/Gdata/Exif.php
create mode 100644 Zend/Gdata/Exif/Entry.php
create mode 100644 Zend/Gdata/Exif/Extension/Distance.php
create mode 100644 Zend/Gdata/Exif/Extension/Exposure.php
create mode 100644 Zend/Gdata/Exif/Extension/FStop.php
create mode 100644 Zend/Gdata/Exif/Extension/Flash.php
create mode 100644 Zend/Gdata/Exif/Extension/FocalLength.php
create mode 100644 Zend/Gdata/Exif/Extension/ImageUniqueId.php
create mode 100644 Zend/Gdata/Exif/Extension/Iso.php
create mode 100644 Zend/Gdata/Exif/Extension/Make.php
create mode 100644 Zend/Gdata/Exif/Extension/Model.php
create mode 100644 Zend/Gdata/Exif/Extension/Tags.php
create mode 100644 Zend/Gdata/Exif/Extension/Time.php
create mode 100644 Zend/Gdata/Exif/Feed.php
create mode 100644 Zend/Gdata/Extension.php
create mode 100644 Zend/Gdata/Extension/AttendeeStatus.php
create mode 100644 Zend/Gdata/Extension/AttendeeType.php
create mode 100644 Zend/Gdata/Extension/Comments.php
create mode 100644 Zend/Gdata/Extension/EntryLink.php
create mode 100644 Zend/Gdata/Extension/EventStatus.php
create mode 100644 Zend/Gdata/Extension/ExtendedProperty.php
create mode 100644 Zend/Gdata/Extension/FeedLink.php
create mode 100644 Zend/Gdata/Extension/OpenSearchItemsPerPage.php
create mode 100644 Zend/Gdata/Extension/OpenSearchStartIndex.php
create mode 100644 Zend/Gdata/Extension/OpenSearchTotalResults.php
create mode 100644 Zend/Gdata/Extension/OriginalEvent.php
create mode 100644 Zend/Gdata/Extension/Rating.php
create mode 100644 Zend/Gdata/Extension/Recurrence.php
create mode 100644 Zend/Gdata/Extension/RecurrenceException.php
create mode 100644 Zend/Gdata/Extension/Reminder.php
create mode 100644 Zend/Gdata/Extension/Transparency.php
create mode 100644 Zend/Gdata/Extension/Visibility.php
create mode 100644 Zend/Gdata/Extension/When.php
create mode 100644 Zend/Gdata/Extension/Where.php
create mode 100644 Zend/Gdata/Extension/Who.php
create mode 100644 Zend/Gdata/Feed.php
create mode 100644 Zend/Gdata/Gapps.php
create mode 100644 Zend/Gdata/Gapps/EmailListEntry.php
create mode 100644 Zend/Gdata/Gapps/EmailListFeed.php
create mode 100644 Zend/Gdata/Gapps/EmailListQuery.php
create mode 100644 Zend/Gdata/Gapps/EmailListRecipientEntry.php
create mode 100644 Zend/Gdata/Gapps/EmailListRecipientFeed.php
create mode 100644 Zend/Gdata/Gapps/EmailListRecipientQuery.php
create mode 100644 Zend/Gdata/Gapps/Error.php
create mode 100644 Zend/Gdata/Gapps/Extension/EmailList.php
create mode 100644 Zend/Gdata/Gapps/Extension/Login.php
create mode 100644 Zend/Gdata/Gapps/Extension/Name.php
create mode 100644 Zend/Gdata/Gapps/Extension/Nickname.php
create mode 100644 Zend/Gdata/Gapps/Extension/Property.php
create mode 100644 Zend/Gdata/Gapps/Extension/Quota.php
create mode 100644 Zend/Gdata/Gapps/GroupEntry.php
create mode 100644 Zend/Gdata/Gapps/GroupFeed.php
create mode 100644 Zend/Gdata/Gapps/GroupQuery.php
create mode 100644 Zend/Gdata/Gapps/MemberEntry.php
create mode 100644 Zend/Gdata/Gapps/MemberFeed.php
create mode 100644 Zend/Gdata/Gapps/MemberQuery.php
create mode 100644 Zend/Gdata/Gapps/NicknameEntry.php
create mode 100644 Zend/Gdata/Gapps/NicknameFeed.php
create mode 100644 Zend/Gdata/Gapps/NicknameQuery.php
create mode 100644 Zend/Gdata/Gapps/OwnerEntry.php
create mode 100644 Zend/Gdata/Gapps/OwnerFeed.php
create mode 100644 Zend/Gdata/Gapps/OwnerQuery.php
create mode 100644 Zend/Gdata/Gapps/Query.php
create mode 100644 Zend/Gdata/Gapps/ServiceException.php
create mode 100644 Zend/Gdata/Gapps/UserEntry.php
create mode 100644 Zend/Gdata/Gapps/UserFeed.php
create mode 100644 Zend/Gdata/Gapps/UserQuery.php
create mode 100644 Zend/Gdata/Gbase.php
create mode 100644 Zend/Gdata/Gbase/Entry.php
create mode 100644 Zend/Gdata/Gbase/Extension/BaseAttribute.php
create mode 100644 Zend/Gdata/Gbase/Feed.php
create mode 100644 Zend/Gdata/Gbase/ItemEntry.php
create mode 100644 Zend/Gdata/Gbase/ItemFeed.php
create mode 100644 Zend/Gdata/Gbase/ItemQuery.php
create mode 100644 Zend/Gdata/Gbase/Query.php
create mode 100644 Zend/Gdata/Gbase/SnippetEntry.php
create mode 100644 Zend/Gdata/Gbase/SnippetFeed.php
create mode 100644 Zend/Gdata/Gbase/SnippetQuery.php
create mode 100644 Zend/Gdata/Geo.php
create mode 100644 Zend/Gdata/Geo/Entry.php
create mode 100644 Zend/Gdata/Geo/Extension/GeoRssWhere.php
create mode 100644 Zend/Gdata/Geo/Extension/GmlPoint.php
create mode 100644 Zend/Gdata/Geo/Extension/GmlPos.php
create mode 100644 Zend/Gdata/Geo/Feed.php
create mode 100644 Zend/Gdata/Health.php
create mode 100644 Zend/Gdata/Health/Extension/Ccr.php
create mode 100644 Zend/Gdata/Health/ProfileEntry.php
create mode 100644 Zend/Gdata/Health/ProfileFeed.php
create mode 100644 Zend/Gdata/Health/ProfileListEntry.php
create mode 100644 Zend/Gdata/Health/ProfileListFeed.php
create mode 100644 Zend/Gdata/Health/Query.php
create mode 100644 Zend/Gdata/HttpAdapterStreamingProxy.php
create mode 100644 Zend/Gdata/HttpAdapterStreamingSocket.php
create mode 100644 Zend/Gdata/HttpClient.php
create mode 100644 Zend/Gdata/Kind/EventEntry.php
create mode 100644 Zend/Gdata/Media.php
create mode 100644 Zend/Gdata/Media/Entry.php
create mode 100644 Zend/Gdata/Media/Extension/MediaCategory.php
create mode 100644 Zend/Gdata/Media/Extension/MediaContent.php
create mode 100644 Zend/Gdata/Media/Extension/MediaCopyright.php
create mode 100644 Zend/Gdata/Media/Extension/MediaCredit.php
create mode 100644 Zend/Gdata/Media/Extension/MediaDescription.php
create mode 100644 Zend/Gdata/Media/Extension/MediaGroup.php
create mode 100644 Zend/Gdata/Media/Extension/MediaHash.php
create mode 100644 Zend/Gdata/Media/Extension/MediaKeywords.php
create mode 100644 Zend/Gdata/Media/Extension/MediaPlayer.php
create mode 100644 Zend/Gdata/Media/Extension/MediaRating.php
create mode 100644 Zend/Gdata/Media/Extension/MediaRestriction.php
create mode 100644 Zend/Gdata/Media/Extension/MediaText.php
create mode 100644 Zend/Gdata/Media/Extension/MediaThumbnail.php
create mode 100644 Zend/Gdata/Media/Extension/MediaTitle.php
create mode 100644 Zend/Gdata/Media/Feed.php
create mode 100644 Zend/Gdata/MediaMimeStream.php
create mode 100644 Zend/Gdata/MimeBodyString.php
create mode 100644 Zend/Gdata/MimeFile.php
create mode 100644 Zend/Gdata/Photos.php
create mode 100644 Zend/Gdata/Photos/AlbumEntry.php
create mode 100644 Zend/Gdata/Photos/AlbumFeed.php
create mode 100644 Zend/Gdata/Photos/AlbumQuery.php
create mode 100644 Zend/Gdata/Photos/CommentEntry.php
create mode 100644 Zend/Gdata/Photos/Extension/Access.php
create mode 100644 Zend/Gdata/Photos/Extension/AlbumId.php
create mode 100644 Zend/Gdata/Photos/Extension/BytesUsed.php
create mode 100644 Zend/Gdata/Photos/Extension/Checksum.php
create mode 100644 Zend/Gdata/Photos/Extension/Client.php
create mode 100644 Zend/Gdata/Photos/Extension/CommentCount.php
create mode 100644 Zend/Gdata/Photos/Extension/CommentingEnabled.php
create mode 100644 Zend/Gdata/Photos/Extension/Height.php
create mode 100644 Zend/Gdata/Photos/Extension/Id.php
create mode 100644 Zend/Gdata/Photos/Extension/Location.php
create mode 100644 Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php
create mode 100644 Zend/Gdata/Photos/Extension/Name.php
create mode 100644 Zend/Gdata/Photos/Extension/Nickname.php
create mode 100644 Zend/Gdata/Photos/Extension/NumPhotos.php
create mode 100644 Zend/Gdata/Photos/Extension/NumPhotosRemaining.php
create mode 100644 Zend/Gdata/Photos/Extension/PhotoId.php
create mode 100644 Zend/Gdata/Photos/Extension/Position.php
create mode 100644 Zend/Gdata/Photos/Extension/QuotaCurrent.php
create mode 100644 Zend/Gdata/Photos/Extension/QuotaLimit.php
create mode 100644 Zend/Gdata/Photos/Extension/Rotation.php
create mode 100644 Zend/Gdata/Photos/Extension/Size.php
create mode 100644 Zend/Gdata/Photos/Extension/Thumbnail.php
create mode 100644 Zend/Gdata/Photos/Extension/Timestamp.php
create mode 100644 Zend/Gdata/Photos/Extension/User.php
create mode 100644 Zend/Gdata/Photos/Extension/Version.php
create mode 100644 Zend/Gdata/Photos/Extension/Weight.php
create mode 100644 Zend/Gdata/Photos/Extension/Width.php
create mode 100644 Zend/Gdata/Photos/PhotoEntry.php
create mode 100644 Zend/Gdata/Photos/PhotoFeed.php
create mode 100644 Zend/Gdata/Photos/PhotoQuery.php
create mode 100644 Zend/Gdata/Photos/TagEntry.php
create mode 100644 Zend/Gdata/Photos/UserEntry.php
create mode 100644 Zend/Gdata/Photos/UserFeed.php
create mode 100644 Zend/Gdata/Photos/UserQuery.php
create mode 100644 Zend/Gdata/Query.php
create mode 100644 Zend/Gdata/Spreadsheets.php
create mode 100644 Zend/Gdata/Spreadsheets/CellEntry.php
create mode 100644 Zend/Gdata/Spreadsheets/CellFeed.php
create mode 100644 Zend/Gdata/Spreadsheets/CellQuery.php
create mode 100644 Zend/Gdata/Spreadsheets/DocumentQuery.php
create mode 100644 Zend/Gdata/Spreadsheets/Extension/Cell.php
create mode 100644 Zend/Gdata/Spreadsheets/Extension/ColCount.php
create mode 100644 Zend/Gdata/Spreadsheets/Extension/Custom.php
create mode 100644 Zend/Gdata/Spreadsheets/Extension/RowCount.php
create mode 100644 Zend/Gdata/Spreadsheets/ListEntry.php
create mode 100644 Zend/Gdata/Spreadsheets/ListFeed.php
create mode 100644 Zend/Gdata/Spreadsheets/ListQuery.php
create mode 100644 Zend/Gdata/Spreadsheets/SpreadsheetEntry.php
create mode 100644 Zend/Gdata/Spreadsheets/SpreadsheetFeed.php
create mode 100644 Zend/Gdata/Spreadsheets/WorksheetEntry.php
create mode 100644 Zend/Gdata/Spreadsheets/WorksheetFeed.php
create mode 100644 Zend/Gdata/YouTube.php
create mode 100644 Zend/Gdata/YouTube/ActivityEntry.php
create mode 100644 Zend/Gdata/YouTube/ActivityFeed.php
create mode 100644 Zend/Gdata/YouTube/CommentEntry.php
create mode 100644 Zend/Gdata/YouTube/CommentFeed.php
create mode 100644 Zend/Gdata/YouTube/ContactEntry.php
create mode 100644 Zend/Gdata/YouTube/ContactFeed.php
create mode 100644 Zend/Gdata/YouTube/Extension/AboutMe.php
create mode 100644 Zend/Gdata/YouTube/Extension/Age.php
create mode 100644 Zend/Gdata/YouTube/Extension/Books.php
create mode 100644 Zend/Gdata/YouTube/Extension/Company.php
create mode 100644 Zend/Gdata/YouTube/Extension/Control.php
create mode 100644 Zend/Gdata/YouTube/Extension/CountHint.php
create mode 100644 Zend/Gdata/YouTube/Extension/Description.php
create mode 100644 Zend/Gdata/YouTube/Extension/Duration.php
create mode 100644 Zend/Gdata/YouTube/Extension/FirstName.php
create mode 100644 Zend/Gdata/YouTube/Extension/Gender.php
create mode 100644 Zend/Gdata/YouTube/Extension/Hobbies.php
create mode 100644 Zend/Gdata/YouTube/Extension/Hometown.php
create mode 100644 Zend/Gdata/YouTube/Extension/LastName.php
create mode 100644 Zend/Gdata/YouTube/Extension/Link.php
create mode 100644 Zend/Gdata/YouTube/Extension/Location.php
create mode 100644 Zend/Gdata/YouTube/Extension/MediaContent.php
create mode 100644 Zend/Gdata/YouTube/Extension/MediaCredit.php
create mode 100644 Zend/Gdata/YouTube/Extension/MediaGroup.php
create mode 100644 Zend/Gdata/YouTube/Extension/MediaRating.php
create mode 100644 Zend/Gdata/YouTube/Extension/Movies.php
create mode 100644 Zend/Gdata/YouTube/Extension/Music.php
create mode 100644 Zend/Gdata/YouTube/Extension/NoEmbed.php
create mode 100644 Zend/Gdata/YouTube/Extension/Occupation.php
create mode 100644 Zend/Gdata/YouTube/Extension/PlaylistId.php
create mode 100644 Zend/Gdata/YouTube/Extension/PlaylistTitle.php
create mode 100644 Zend/Gdata/YouTube/Extension/Position.php
create mode 100644 Zend/Gdata/YouTube/Extension/Private.php
create mode 100644 Zend/Gdata/YouTube/Extension/QueryString.php
create mode 100644 Zend/Gdata/YouTube/Extension/Racy.php
create mode 100644 Zend/Gdata/YouTube/Extension/Recorded.php
create mode 100644 Zend/Gdata/YouTube/Extension/Relationship.php
create mode 100644 Zend/Gdata/YouTube/Extension/ReleaseDate.php
create mode 100644 Zend/Gdata/YouTube/Extension/School.php
create mode 100644 Zend/Gdata/YouTube/Extension/State.php
create mode 100644 Zend/Gdata/YouTube/Extension/Statistics.php
create mode 100644 Zend/Gdata/YouTube/Extension/Status.php
create mode 100644 Zend/Gdata/YouTube/Extension/Token.php
create mode 100644 Zend/Gdata/YouTube/Extension/Uploaded.php
create mode 100644 Zend/Gdata/YouTube/Extension/Username.php
create mode 100644 Zend/Gdata/YouTube/Extension/VideoId.php
create mode 100644 Zend/Gdata/YouTube/InboxEntry.php
create mode 100644 Zend/Gdata/YouTube/InboxFeed.php
create mode 100644 Zend/Gdata/YouTube/MediaEntry.php
create mode 100644 Zend/Gdata/YouTube/PlaylistListEntry.php
create mode 100644 Zend/Gdata/YouTube/PlaylistListFeed.php
create mode 100644 Zend/Gdata/YouTube/PlaylistVideoEntry.php
create mode 100644 Zend/Gdata/YouTube/PlaylistVideoFeed.php
create mode 100644 Zend/Gdata/YouTube/SubscriptionEntry.php
create mode 100644 Zend/Gdata/YouTube/SubscriptionFeed.php
create mode 100644 Zend/Gdata/YouTube/UserProfileEntry.php
create mode 100644 Zend/Gdata/YouTube/VideoEntry.php
create mode 100644 Zend/Gdata/YouTube/VideoFeed.php
create mode 100644 Zend/Gdata/YouTube/VideoQuery.php
create mode 100644 Zend/Http/Client.php
create mode 100644 Zend/Http/Client/Adapter/Curl.php
create mode 100644 Zend/Http/Client/Adapter/Exception.php
create mode 100644 Zend/Http/Client/Adapter/Interface.php
create mode 100644 Zend/Http/Client/Adapter/Proxy.php
create mode 100644 Zend/Http/Client/Adapter/Socket.php
create mode 100644 Zend/Http/Client/Adapter/Stream.php
create mode 100644 Zend/Http/Client/Adapter/Test.php
create mode 100644 Zend/Http/Client/Exception.php
create mode 100644 Zend/Http/Exception.php
create mode 100644 Zend/Http/Response.php
create mode 100644 Zend/Http/Response/Stream.php
create mode 100644 Zend/Loader.php
create mode 100644 Zend/Oauth.php
create mode 100644 Zend/Oauth/Client.php
create mode 100644 Zend/Oauth/Config.php
create mode 100644 Zend/Oauth/Config/ConfigInterface.php
create mode 100644 Zend/Oauth/Consumer.php
create mode 100644 Zend/Oauth/Exception.php
create mode 100644 Zend/Oauth/Http.php
create mode 100644 Zend/Oauth/Http/AccessToken.php
create mode 100644 Zend/Oauth/Http/RequestToken.php
create mode 100644 Zend/Oauth/Http/UserAuthorization.php
create mode 100644 Zend/Oauth/Http/Utility.php
create mode 100644 Zend/Oauth/Signature/Hmac.php
create mode 100644 Zend/Oauth/Signature/Plaintext.php
create mode 100644 Zend/Oauth/Signature/Rsa.php
create mode 100644 Zend/Oauth/Signature/SignatureAbstract.php
create mode 100644 Zend/Oauth/Token.php
create mode 100644 Zend/Oauth/Token/Access.php
create mode 100644 Zend/Oauth/Token/AuthorizedRequest.php
create mode 100644 Zend/Oauth/Token/Request.php
create mode 100644 Zend/Registry.php
create mode 100644 Zend/Uri.php
create mode 100644 Zend/Uri/Exception.php
create mode 100644 Zend/Uri/Http.php
create mode 100644 Zend/Validate/Abstract.php
create mode 100644 Zend/Validate/Hostname.php
create mode 100644 Zend/Validate/Hostname/Biz.php
create mode 100644 Zend/Validate/Hostname/Cn.php
create mode 100644 Zend/Validate/Hostname/Com.php
create mode 100644 Zend/Validate/Hostname/Jp.php
create mode 100644 Zend/Validate/Interface.php
create mode 100644 Zend/Validate/Ip.php
create mode 100644 Zend/Version.php
create mode 100644 acceptDecline.php
create mode 100644 cache/csv/index.html
create mode 100644 cache/feeds/index.html
create mode 100644 cache/images/index.html
create mode 100644 cache/import/index.html
create mode 100644 cache/index.html
create mode 100644 cache/layout/index.html
create mode 100644 cache/pdf/index.html
create mode 100644 cache/upload/index.html
create mode 100644 cache/xml/index.html
create mode 100644 campaign_tracker.php
create mode 100644 campaign_trackerv2.php
create mode 100644 config.php
create mode 100644 cron.php
create mode 100644 custom/index.html
create mode 100644 data/Link.php
create mode 100644 data/SugarBean.php
create mode 100644 data/Tracker.php
create mode 100644 data/upload/index.html
create mode 100644 dictionary.php
create mode 100644 download.php
create mode 100644 emailmandelivery.php
create mode 100644 examples/EXAMPLES_README.txt
create mode 100644 examples/ExampleLeadCapture.php
create mode 100644 examples/FormValidationTest.php
create mode 100644 examples/ProgressBarTest.php
create mode 100644 examples/SoapTest.php
create mode 100644 examples/SoapTestPortal.php
create mode 100644 examples/SoapTestPortal2.php
create mode 100644 export.php
create mode 100644 files.md5
create mode 100644 image.php
create mode 100644 include/Dashlets/Dashlet.php
create mode 100644 include/Dashlets/DashletCacheBuilder.php
create mode 100644 include/Dashlets/DashletGeneric.php
create mode 100644 include/Dashlets/DashletGenericAutoRefresh.tpl
create mode 100644 include/Dashlets/DashletGenericAutoRefreshDynamic.tpl
create mode 100644 include/Dashlets/DashletGenericChart.php
create mode 100644 include/Dashlets/DashletGenericChartConfigure.tpl
create mode 100644 include/Dashlets/DashletGenericConfigure.tpl
create mode 100644 include/Dashlets/DashletGenericDisplay.tpl
create mode 100644 include/DetailView/DetailView.php
create mode 100644 include/DetailView/DetailView.tpl
create mode 100644 include/DetailView/DetailView2.php
create mode 100644 include/DetailView/footer.tpl
create mode 100644 include/DetailView/header.tpl
create mode 100644 include/EditView/EditView.php
create mode 100644 include/EditView/EditView.tpl
create mode 100644 include/EditView/EditView2.php
create mode 100644 include/EditView/PopupQuickCreate.php
create mode 100644 include/EditView/QuickCreate.php
create mode 100644 include/EditView/QuickCreate.tpl
create mode 100644 include/EditView/SubpanelQuickCreate.php
create mode 100644 include/EditView/SugarVCR.php
create mode 100644 include/EditView/footer.tpl
create mode 100644 include/EditView/header.tpl
create mode 100644 include/GroupedTabs/GroupedTabStructure.php
create mode 100644 include/HTTP_WebDAV_Server/README
create mode 100644 include/HTTP_WebDAV_Server/Server.php
create mode 100644 include/HTTP_WebDAV_Server/Tools/_parse_lockinfo.php
create mode 100644 include/HTTP_WebDAV_Server/Tools/_parse_propfind.php
create mode 100644 include/HTTP_WebDAV_Server/Tools/_parse_proppatch.php
create mode 100644 include/HTTP_WebDAV_Server/dav.txt
create mode 100644 include/HTTP_WebDAV_Server/license.txt
create mode 100644 include/JSON.js
create mode 100644 include/JSON.php
create mode 100644 include/ListView/ListView.php
create mode 100644 include/ListView/ListViewDCMenu.tpl
create mode 100644 include/ListView/ListViewData.php
create mode 100644 include/ListView/ListViewDisplay.php
create mode 100644 include/ListView/ListViewFacade.php
create mode 100644 include/ListView/ListViewGeneric.tpl
create mode 100644 include/ListView/ListViewNoMassUpdate.tpl
create mode 100644 include/ListView/ListViewPagination.tpl
create mode 100644 include/ListView/ListViewSmarty.php
create mode 100644 include/ListView/ListViewXTPL.php
create mode 100644 include/Localization/Localization.php
create mode 100644 include/MVC/Controller/ControllerFactory.php
create mode 100644 include/MVC/Controller/SugarController.php
create mode 100644 include/MVC/Controller/action_file_map.php
create mode 100644 include/MVC/Controller/action_view_map.php
create mode 100644 include/MVC/Controller/entry_point_registry.php
create mode 100644 include/MVC/Controller/file_access_control_map.php
create mode 100644 include/MVC/SugarApplication.php
create mode 100644 include/MVC/SugarModule.php
create mode 100644 include/MVC/View/SugarView.php
create mode 100644 include/MVC/View/ViewFactory.php
create mode 100644 include/MVC/View/tpls/Importvcard.tpl
create mode 100644 include/MVC/View/tpls/modulelistmenu.tpl
create mode 100644 include/MVC/View/tpls/xsrf.tpl
create mode 100644 include/MVC/View/views/view.ajax.php
create mode 100644 include/MVC/View/views/view.classic.config.php
create mode 100644 include/MVC/View/views/view.classic.php
create mode 100644 include/MVC/View/views/view.config.php
create mode 100644 include/MVC/View/views/view.detail.php
create mode 100644 include/MVC/View/views/view.edit.php
create mode 100644 include/MVC/View/views/view.html.php
create mode 100644 include/MVC/View/views/view.importvcard.php
create mode 100644 include/MVC/View/views/view.importvcardsave.php
create mode 100644 include/MVC/View/views/view.json.php
create mode 100644 include/MVC/View/views/view.list.php
create mode 100644 include/MVC/View/views/view.modulelistmenu.php
create mode 100644 include/MVC/View/views/view.multiedit.php
create mode 100644 include/MVC/View/views/view.noaccess.php
create mode 100644 include/MVC/View/views/view.popup.php
create mode 100644 include/MVC/View/views/view.quick.php
create mode 100644 include/MVC/View/views/view.quickcreate.php
create mode 100644 include/MVC/View/views/view.serialized.php
create mode 100644 include/MVC/View/views/view.sugarpdf.config.php
create mode 100644 include/MVC/View/views/view.sugarpdf.php
create mode 100644 include/MVC/View/views/view.vcard.php
create mode 100644 include/MVC/View/views/view.xml.php
create mode 100644 include/MassUpdate.php
create mode 100644 include/MySugar/DashletsDialog/DashletsDialog.php
create mode 100644 include/MySugar/MySugar.php
create mode 100644 include/MySugar/javascript/MySugar.js
create mode 100644 include/MySugar/tpls/MySugar.tpl
create mode 100644 include/MySugar/tpls/addDashletsDialog.tpl
create mode 100644 include/MySugar/tpls/chartDashletsSearchResults.tpl
create mode 100644 include/MySugar/tpls/dashletsSearchResults.tpl
create mode 100644 include/MySugar/tpls/retrievePage.tpl
create mode 100644 include/MySugar/tpls/retrieveReportCharts.tpl
create mode 100644 include/OutboundEmail/OutboundEmail.php
create mode 100644 include/Pear/Crypt_Blowfish/Blowfish.php
create mode 100644 include/Pear/Crypt_Blowfish/Blowfish/DefaultKey.php
create mode 100644 include/Pear/Crypt_Blowfish/license.txt
create mode 100644 include/Pear/HTML_Safe/Safe.php
create mode 100644 include/Pear/HTML_Safe/license.txt
create mode 100644 include/Pear/XML_HTMLSax3/HTMLSax3.php
create mode 100644 include/Pear/XML_HTMLSax3/HTMLSax3/Decorators.php
create mode 100644 include/Pear/XML_HTMLSax3/HTMLSax3/States.php
create mode 100644 include/Pear/XML_HTMLSax3/LICENSE
create mode 100644 include/Popups/PopupSmarty.php
create mode 100644 include/Popups/Popup_picker.php
create mode 100644 include/Popups/tpls/PopupGeneric.tpl
create mode 100644 include/Popups/tpls/footer.tpl
create mode 100644 include/Popups/tpls/header.tpl
create mode 100644 include/QuickSearchDefaults.php
create mode 100644 include/SearchForm/SearchForm.php
create mode 100644 include/SearchForm/SearchForm2.php
create mode 100644 include/SearchForm/SugarSpot.php
create mode 100644 include/SearchForm/tpls/SearchFormGeneric.tpl
create mode 100644 include/SearchForm/tpls/SearchFormGenericAdvanced.tpl
create mode 100644 include/SearchForm/tpls/footer.tpl
create mode 100644 include/SearchForm/tpls/header.tpl
create mode 100644 include/Smarty/COPYING.lib
create mode 100644 include/Smarty/Config_File.class.php
create mode 100644 include/Smarty/LICENSE
create mode 100644 include/Smarty/README
create mode 100644 include/Smarty/Smarty.class.php
create mode 100644 include/Smarty/Smarty_Compiler.class.php
create mode 100644 include/Smarty/debug.tpl
create mode 100644 include/Smarty/internals/core.assemble_plugin_filepath.php
create mode 100644 include/Smarty/internals/core.assign_smarty_interface.php
create mode 100644 include/Smarty/internals/core.create_dir_structure.php
create mode 100644 include/Smarty/internals/core.display_debug_console.php
create mode 100644 include/Smarty/internals/core.get_include_path.php
create mode 100644 include/Smarty/internals/core.get_microtime.php
create mode 100644 include/Smarty/internals/core.get_php_resource.php
create mode 100644 include/Smarty/internals/core.is_secure.php
create mode 100644 include/Smarty/internals/core.is_trusted.php
create mode 100644 include/Smarty/internals/core.load_plugins.php
create mode 100644 include/Smarty/internals/core.load_resource_plugin.php
create mode 100644 include/Smarty/internals/core.process_cached_inserts.php
create mode 100644 include/Smarty/internals/core.process_compiled_include.php
create mode 100644 include/Smarty/internals/core.read_cache_file.php
create mode 100644 include/Smarty/internals/core.rm_auto.php
create mode 100644 include/Smarty/internals/core.rmdir.php
create mode 100644 include/Smarty/internals/core.run_insert_handler.php
create mode 100644 include/Smarty/internals/core.smarty_include_php.php
create mode 100644 include/Smarty/internals/core.write_cache_file.php
create mode 100644 include/Smarty/internals/core.write_compiled_include.php
create mode 100644 include/Smarty/internals/core.write_compiled_resource.php
create mode 100644 include/Smarty/internals/core.write_file.php
create mode 100644 include/Smarty/plugins/block.textformat.php
create mode 100644 include/Smarty/plugins/compiler.assign.php
create mode 100644 include/Smarty/plugins/function.assign_debug_info.php
create mode 100644 include/Smarty/plugins/function.config_load.php
create mode 100644 include/Smarty/plugins/function.counter.php
create mode 100644 include/Smarty/plugins/function.cycle.php
create mode 100644 include/Smarty/plugins/function.debug.php
create mode 100644 include/Smarty/plugins/function.eval.php
create mode 100644 include/Smarty/plugins/function.ext_includes.php
create mode 100644 include/Smarty/plugins/function.fetch.php
create mode 100644 include/Smarty/plugins/function.html_checkboxes.php
create mode 100644 include/Smarty/plugins/function.html_image.php
create mode 100644 include/Smarty/plugins/function.html_options.php
create mode 100644 include/Smarty/plugins/function.html_radios.php
create mode 100644 include/Smarty/plugins/function.html_select_date.php
create mode 100644 include/Smarty/plugins/function.html_select_time.php
create mode 100644 include/Smarty/plugins/function.html_table.php
create mode 100644 include/Smarty/plugins/function.mailto.php
create mode 100644 include/Smarty/plugins/function.math.php
create mode 100644 include/Smarty/plugins/function.multienum_to_array.php
create mode 100644 include/Smarty/plugins/function.overlib_includes.php
create mode 100644 include/Smarty/plugins/function.popup.php
create mode 100644 include/Smarty/plugins/function.popup_init.php
create mode 100644 include/Smarty/plugins/function.sugar_button.php
create mode 100644 include/Smarty/plugins/function.sugar_button_slider.php
create mode 100644 include/Smarty/plugins/function.sugar_connector_display.php
create mode 100644 include/Smarty/plugins/function.sugar_currency_format.php
create mode 100644 include/Smarty/plugins/function.sugar_evalcolumn.php
create mode 100644 include/Smarty/plugins/function.sugar_evalcolumn_old.php
create mode 100644 include/Smarty/plugins/function.sugar_fetch.php
create mode 100644 include/Smarty/plugins/function.sugar_field.php
create mode 100644 include/Smarty/plugins/function.sugar_getimagepath.php
create mode 100644 include/Smarty/plugins/function.sugar_getjspath.php
create mode 100644 include/Smarty/plugins/function.sugar_getwebpath.php
create mode 100644 include/Smarty/plugins/function.sugar_help.php
create mode 100644 include/Smarty/plugins/function.sugar_image.php
create mode 100644 include/Smarty/plugins/function.sugar_include.php
create mode 100644 include/Smarty/plugins/function.sugar_link.php
create mode 100644 include/Smarty/plugins/function.sugar_number_format.php
create mode 100644 include/Smarty/plugins/function.sugar_phone.php
create mode 100644 include/Smarty/plugins/function.sugar_replace_vars.php
create mode 100644 include/Smarty/plugins/function.sugar_run_helper.php
create mode 100644 include/Smarty/plugins/function.sugar_translate.php
create mode 100644 include/Smarty/plugins/function.sugar_variable_constructor.php
create mode 100644 include/Smarty/plugins/function.sugarvar.php
create mode 100644 include/Smarty/plugins/function.sugarvar_connector.php
create mode 100644 include/Smarty/plugins/modifier.capitalize.php
create mode 100644 include/Smarty/plugins/modifier.cat.php
create mode 100644 include/Smarty/plugins/modifier.count_characters.php
create mode 100644 include/Smarty/plugins/modifier.count_paragraphs.php
create mode 100644 include/Smarty/plugins/modifier.count_sentences.php
create mode 100644 include/Smarty/plugins/modifier.count_words.php
create mode 100644 include/Smarty/plugins/modifier.date_format.php
create mode 100644 include/Smarty/plugins/modifier.debug_print_var.php
create mode 100644 include/Smarty/plugins/modifier.default.php
create mode 100644 include/Smarty/plugins/modifier.default_date_value.php
create mode 100644 include/Smarty/plugins/modifier.escape.php
create mode 100644 include/Smarty/plugins/modifier.in_array.php
create mode 100644 include/Smarty/plugins/modifier.indent.php
create mode 100644 include/Smarty/plugins/modifier.lower.php
create mode 100644 include/Smarty/plugins/modifier.nl2br.php
create mode 100644 include/Smarty/plugins/modifier.regex_replace.php
create mode 100644 include/Smarty/plugins/modifier.replace.php
create mode 100644 include/Smarty/plugins/modifier.spacify.php
create mode 100644 include/Smarty/plugins/modifier.string_format.php
create mode 100644 include/Smarty/plugins/modifier.strip.php
create mode 100644 include/Smarty/plugins/modifier.strip_semicolon.php
create mode 100644 include/Smarty/plugins/modifier.strip_tags.php
create mode 100644 include/Smarty/plugins/modifier.to_url.php
create mode 100644 include/Smarty/plugins/modifier.truncate.php
create mode 100644 include/Smarty/plugins/modifier.upper.php
create mode 100644 include/Smarty/plugins/modifier.wordwrap.php
create mode 100644 include/Smarty/plugins/outputfilter.trimwhitespace.php
create mode 100644 include/Smarty/plugins/shared.escape_special_chars.php
create mode 100644 include/Smarty/plugins/shared.make_timestamp.php
create mode 100644 include/SubPanel/SubPanel.php
create mode 100644 include/SubPanel/SubPanelDefinitions.php
create mode 100644 include/SubPanel/SubPanelDynamic.html
create mode 100644 include/SubPanel/SubPanelTiles.js
create mode 100644 include/SubPanel/SubPanelTiles.php
create mode 100644 include/SubPanel/SubPanelTilesTabs.php
create mode 100644 include/SubPanel/SubPanelViewer.php
create mode 100644 include/SubPanel/SugarTab.php
create mode 100644 include/SubPanel/registered_layout_defs.php
create mode 100644 include/SubPanel/subpanels.txt
create mode 100644 include/SubPanel/tpls/singletabmenu.tpl
create mode 100644 include/SugarCache/SugarCache.php
create mode 100644 include/SugarCache/SugarCacheAPC.php
create mode 100644 include/SugarCache/SugarCacheAbstract.php
create mode 100644 include/SugarCache/SugarCacheFile.php
create mode 100644 include/SugarCache/SugarCacheMemcache.php
create mode 100644 include/SugarCache/SugarCacheMemcached.php
create mode 100644 include/SugarCache/SugarCacheMemory.php
create mode 100644 include/SugarCache/SugarCacheRedis.php
create mode 100644 include/SugarCache/SugarCacheWincache.php
create mode 100644 include/SugarCache/SugarCacheZend.php
create mode 100644 include/SugarCache/SugarCachesMash.php
create mode 100644 include/SugarCharts/Jit/FlashCanvas/canvas2png.js
create mode 100644 include/SugarCharts/Jit/FlashCanvas/flashcanvas.js
create mode 100644 include/SugarCharts/Jit/FlashCanvas/flashcanvas.swf
create mode 100644 include/SugarCharts/Jit/FlashCanvas/proxy.php
create mode 100644 include/SugarCharts/Jit/FlashCanvas/save.php
create mode 100644 include/SugarCharts/Jit/Jit.php
create mode 100644 include/SugarCharts/Jit/JitReports.php
create mode 100644 include/SugarCharts/Jit/css/base.css
create mode 100644 include/SugarCharts/Jit/js/Jit/jit.js
create mode 100644 include/SugarCharts/Jit/js/mySugarCharts.js
create mode 100644 include/SugarCharts/Jit/js/sugarCharts.js
create mode 100644 include/SugarCharts/Jit/tpls/DashletGenericChartScript.tpl
create mode 100644 include/SugarCharts/Jit/tpls/chart.tpl
create mode 100644 include/SugarCharts/JsChart.php
create mode 100644 include/SugarCharts/SugarChart.php
create mode 100644 include/SugarCharts/SugarChartFactory.php
create mode 100644 include/SugarCharts/swf/barChart.swf
create mode 100644 include/SugarCharts/swf/chart.swf
create mode 100644 include/SugarCharts/swf/groupByChart.swf
create mode 100644 include/SugarCharts/swf/horizontalBarChart.swf
create mode 100644 include/SugarCharts/swf/horizontalGroupByChart.swf
create mode 100644 include/SugarCharts/swf/lineChart.swf
create mode 100644 include/SugarCharts/swf/pieChart.swf
create mode 100644 include/SugarCharts/swf/stackedGroupByChart.swf
create mode 100644 include/SugarDateTime.php
create mode 100644 include/SugarDependentDropdown/SugarDependentDropdown.php
create mode 100644 include/SugarDependentDropdown/javascript/SugarDependentDropdown.js
create mode 100644 include/SugarDependentDropdown/metadata/dependentDropdown.php
create mode 100644 include/SugarEmailAddress/SugarEmailAddress.js
create mode 100644 include/SugarEmailAddress/SugarEmailAddress.php
create mode 100644 include/SugarEmailAddress/templates/forDetailView.tpl
create mode 100644 include/SugarEmailAddress/templates/forDuplicatesView.tpl
create mode 100644 include/SugarEmailAddress/templates/forEditView.tpl
create mode 100644 include/SugarEmailAddress/templates/forWideFormBodyView.tpl
create mode 100644 include/SugarFields/Fields/Address/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Address/EditView.tpl
create mode 100644 include/SugarFields/Fields/Address/SugarFieldAddress.js
create mode 100644 include/SugarFields/Fields/Address/SugarFieldAddress.php
create mode 100644 include/SugarFields/Fields/Address/en_us.DetailView.tpl
create mode 100644 include/SugarFields/Fields/Address/en_us.EditView.tpl
create mode 100644 include/SugarFields/Fields/Assigned_user_name/EditViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Assigned_user_name/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Assigned_user_name/SugarFieldAssigned_user_name.php
create mode 100644 include/SugarFields/Fields/Base/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Base/DetailViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Base/EditView.tpl
create mode 100644 include/SugarFields/Fields/Base/EditViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Base/ImportViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Base/InlineEdit.tpl
create mode 100644 include/SugarFields/Fields/Base/InlineEditView.tpl
create mode 100644 include/SugarFields/Fields/Base/ListView.tpl
create mode 100644 include/SugarFields/Fields/Base/SearchForm.tpl
create mode 100644 include/SugarFields/Fields/Base/SugarFieldBase.php
create mode 100644 include/SugarFields/Fields/Bool/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Bool/EditView.tpl
create mode 100644 include/SugarFields/Fields/Bool/InlineEdit.tpl
create mode 100644 include/SugarFields/Fields/Bool/InlineEditView.tpl
create mode 100644 include/SugarFields/Fields/Bool/ListView.tpl
create mode 100644 include/SugarFields/Fields/Bool/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Bool/SugarFieldBool.php
create mode 100644 include/SugarFields/Fields/Collection/CollectionDetailView.tpl
create mode 100644 include/SugarFields/Fields/Collection/CollectionEditView.tpl
create mode 100644 include/SugarFields/Fields/Collection/CollectionEditViewRow.tpl
create mode 100644 include/SugarFields/Fields/Collection/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Collection/EditView.tpl
create mode 100644 include/SugarFields/Fields/Collection/SugarFieldCollection.js
create mode 100644 include/SugarFields/Fields/Collection/SugarFieldCollection.php
create mode 100644 include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php
create mode 100644 include/SugarFields/Fields/Collection/view.sugarfieldcollection.php
create mode 100644 include/SugarFields/Fields/Currency/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Currency/EditView.tpl
create mode 100644 include/SugarFields/Fields/Currency/ListView.tpl
create mode 100644 include/SugarFields/Fields/Currency/SugarFieldCurrency.php
create mode 100644 include/SugarFields/Fields/Datetime/EditView.tpl
create mode 100644 include/SugarFields/Fields/Datetime/SugarFieldDatetime.php
create mode 100644 include/SugarFields/Fields/Datetimecombo/Datetimecombo.js
create mode 100644 include/SugarFields/Fields/Datetimecombo/EditView.tpl
create mode 100644 include/SugarFields/Fields/Datetimecombo/RangeSearchForm.tpl
create mode 100644 include/SugarFields/Fields/Datetimecombo/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Datetimecombo/SugarFieldDatetimecombo.php
create mode 100644 include/SugarFields/Fields/Download/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Download/SugarFieldDownload.php
create mode 100644 include/SugarFields/Fields/Enum/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Enum/DetailViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Enum/EditView.tpl
create mode 100644 include/SugarFields/Fields/Enum/EditViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Enum/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Enum/SugarFieldEnum.php
create mode 100644 include/SugarFields/Fields/File/DetailView.tpl
create mode 100644 include/SugarFields/Fields/File/EditView.tpl
create mode 100644 include/SugarFields/Fields/File/ListView.tpl
create mode 100644 include/SugarFields/Fields/File/SearchView.tpl
create mode 100644 include/SugarFields/Fields/File/SugarFieldFile.js
create mode 100644 include/SugarFields/Fields/File/SugarFieldFile.php
create mode 100644 include/SugarFields/Fields/Float/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Float/EditView.tpl
create mode 100644 include/SugarFields/Fields/Float/SugarFieldFloat.php
create mode 100644 include/SugarFields/Fields/Fullname/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Fullname/SugarFieldFullname.php
create mode 100644 include/SugarFields/Fields/Html/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Html/SugarFieldHtml.php
create mode 100644 include/SugarFields/Fields/Id/SugarFieldId.php
create mode 100644 include/SugarFields/Fields/Iframe/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Iframe/EditView.tpl
create mode 100644 include/SugarFields/Fields/Int/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Int/EditView.tpl
create mode 100644 include/SugarFields/Fields/Int/RangeSearchForm.tpl
create mode 100644 include/SugarFields/Fields/Int/SearchForm.tpl
create mode 100644 include/SugarFields/Fields/Int/SugarFieldInt.php
create mode 100644 include/SugarFields/Fields/Link/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Link/EditView.tpl
create mode 100644 include/SugarFields/Fields/Link/ListView.tpl
create mode 100644 include/SugarFields/Fields/Multienum/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Multienum/EditView.tpl
create mode 100644 include/SugarFields/Fields/Multienum/EditViewFunction.tpl
create mode 100644 include/SugarFields/Fields/Multienum/ListView.tpl
create mode 100644 include/SugarFields/Fields/Multienum/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Multienum/SugarFieldMultienum.php
create mode 100644 include/SugarFields/Fields/Parent/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Parent/EditView.tpl
create mode 100644 include/SugarFields/Fields/Parent/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Parent/SugarFieldParent.php
create mode 100644 include/SugarFields/Fields/Password/EditView.tpl
create mode 100644 include/SugarFields/Fields/Password/SugarFieldPassword.php
create mode 100644 include/SugarFields/Fields/Phone/EditView.tpl
create mode 100644 include/SugarFields/Fields/Phone/SugarFieldPhone.php
create mode 100644 include/SugarFields/Fields/Radioenum/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Radioenum/EditView.tpl
create mode 100644 include/SugarFields/Fields/Readonly/SugarFieldReadonly.php
create mode 100644 include/SugarFields/Fields/Relate/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Relate/EditView.tpl
create mode 100644 include/SugarFields/Fields/Relate/SearchView.tpl
create mode 100644 include/SugarFields/Fields/Relate/SugarFieldRelate.php
create mode 100644 include/SugarFields/Fields/Text/ClassicEditView.tpl
create mode 100644 include/SugarFields/Fields/Text/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Text/EditView.tpl
create mode 100644 include/SugarFields/Fields/Text/SugarFieldText.php
create mode 100644 include/SugarFields/Fields/URL/DetailView.tpl
create mode 100644 include/SugarFields/Fields/URL/EditView.tpl
create mode 100644 include/SugarFields/Fields/URL/ListView.tpl
create mode 100644 include/SugarFields/Fields/Username/DetailView.tpl
create mode 100644 include/SugarFields/Fields/Username/SugarFieldUsername.php
create mode 100644 include/SugarFields/Parsers/DetailViewMetaParser.php
create mode 100644 include/SugarFields/Parsers/EditViewMetaParser.php
create mode 100644 include/SugarFields/Parsers/MetaParser.php
create mode 100644 include/SugarFields/Parsers/QuickCreateMetaParser.php
create mode 100644 include/SugarFields/Parsers/Rules/AccountsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/ActivitiesParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/AddressRule.php
create mode 100644 include/SugarFields/Parsers/Rules/BaseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/BugsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/CallsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/CampaignsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/ContactsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/ContractsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/DocumentsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/EmailAddressRule.php
create mode 100644 include/SugarFields/Parsers/Rules/EmptyRowRule.php
create mode 100644 include/SugarFields/Parsers/Rules/LeadsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/MeetingsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/NotesParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/OpportunitiesParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/ParseRules.php
create mode 100644 include/SugarFields/Parsers/Rules/ProductsParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/QuotesParseRule.php
create mode 100644 include/SugarFields/Parsers/Rules/UndefinedVardefRule.php
create mode 100644 include/SugarFields/Parsers/Rules/VariableCleanupRule.php
create mode 100644 include/SugarFields/Parsers/Rules/VariableSubstitutionRule.php
create mode 100644 include/SugarFields/Parsers/SearchFormMetaParser.php
create mode 100644 include/SugarFields/SugarFieldHandler.php
create mode 100644 include/SugarFolders/SugarFolders.php
create mode 100644 include/SugarLogger/LoggerManager.php
create mode 100644 include/SugarLogger/LoggerTemplate.php
create mode 100644 include/SugarLogger/SugarLogger.php
create mode 100644 include/SugarOauth.php
create mode 100644 include/SugarObjects/LanguageManager.php
create mode 100644 include/SugarObjects/SugarConfig.php
create mode 100644 include/SugarObjects/SugarRegistry.php
create mode 100644 include/SugarObjects/SugarSession.php
create mode 100644 include/SugarObjects/VardefManager.php
create mode 100644 include/SugarObjects/implements/assignable/language/en_us.lang.php
create mode 100644 include/SugarObjects/implements/assignable/vardefs.php
create mode 100644 include/SugarObjects/implements/team_security/language/en_us.lang.php
create mode 100644 include/SugarObjects/implements/team_security/vardefs.php
create mode 100644 include/SugarObjects/templates/basic/Basic.php
create mode 100644 include/SugarObjects/templates/basic/Dashlets/Dashlet/m-n-Dashlet.meta.php
create mode 100644 include/SugarObjects/templates/basic/Dashlets/Dashlet/m-n-Dashlet.php
create mode 100644 include/SugarObjects/templates/basic/icons/Createbasic.gif
create mode 100644 include/SugarObjects/templates/basic/icons/basic.gif
create mode 100644 include/SugarObjects/templates/basic/icons/basic_32.gif
create mode 100644 include/SugarObjects/templates/basic/language/en_us.lang.php
create mode 100644 include/SugarObjects/templates/basic/metadata/SearchFields.php
create mode 100644 include/SugarObjects/templates/basic/metadata/dashletviewdefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/detailviewdefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/editviewdefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/listviewdefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/metafiles.php
create mode 100644 include/SugarObjects/templates/basic/metadata/popupdefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/quickcreatedefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/searchdefs.php
create mode 100644 include/SugarObjects/templates/basic/metadata/subpanels/default.php
create mode 100644 include/SugarObjects/templates/basic/vardefs.php
create mode 100644 include/SugarObjects/templates/company/Company.php
create mode 100644 include/SugarObjects/templates/company/config.php
create mode 100644 include/SugarObjects/templates/company/icons/Createcompany.gif
create mode 100644 include/SugarObjects/templates/company/icons/company.gif
create mode 100644 include/SugarObjects/templates/company/icons/company_32.gif
create mode 100644 include/SugarObjects/templates/company/language/application/en_us.lang.php
create mode 100644 include/SugarObjects/templates/company/language/en_us.lang.php
create mode 100644 include/SugarObjects/templates/company/metadata/SearchFields.php
create mode 100644 include/SugarObjects/templates/company/metadata/dashletviewdefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/detailviewdefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/editviewdefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/listviewdefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/metafiles.php
create mode 100644 include/SugarObjects/templates/company/metadata/popupdefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/quickcreatedefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/searchdefs.php
create mode 100644 include/SugarObjects/templates/company/metadata/subpanels/default.php
create mode 100644 include/SugarObjects/templates/company/vardefs.php
create mode 100644 include/SugarObjects/templates/file/File.php
create mode 100644 include/SugarObjects/templates/file/controller.php
create mode 100644 include/SugarObjects/templates/file/icons/Createfile.gif
create mode 100644 include/SugarObjects/templates/file/icons/file.gif
create mode 100644 include/SugarObjects/templates/file/icons/file_32.gif
create mode 100644 include/SugarObjects/templates/file/language/application/en_us.lang.php
create mode 100644 include/SugarObjects/templates/file/language/en_us.lang.php
create mode 100644 include/SugarObjects/templates/file/metadata/SearchFields.php
create mode 100644 include/SugarObjects/templates/file/metadata/dashletviewdefs.php
create mode 100644 include/SugarObjects/templates/file/metadata/detailviewdefs.php
create mode 100644 include/SugarObjects/templates/file/metadata/editviewdefs.php
create mode 100644 include/SugarObjects/templates/file/metadata/listviewdefs.php
create mode 100644 include/SugarObjects/templates/file/metadata/metafiles.php
create mode 100644 include/SugarObjects/templates/file/metadata/quickcreatedefs.php
create mode 100644 include/SugarObjects/templates/file/metadata/searchdefs.php
create mode 100644 include/SugarObjects/templates/file/metadata/subpanels/default.php
create mode 100644 include/SugarObjects/templates/file/vardefs.php
create mode 100644 include/SugarObjects/templates/file/views/view.edit.php
create mode 100644 include/SugarObjects/templates/issue/Issue.php
create mode 100644 include/SugarObjects/templates/issue/config.php
create mode 100644 include/SugarObjects/templates/issue/icons/Createissue.gif
create mode 100644 include/SugarObjects/templates/issue/icons/issue.gif
create mode 100644 include/SugarObjects/templates/issue/icons/issue_32.gif
create mode 100644 include/SugarObjects/templates/issue/language/application/en_us.lang.php
create mode 100644 include/SugarObjects/templates/issue/language/en_us.lang.php
create mode 100644 include/SugarObjects/templates/issue/metadata/SearchFields.php
create mode 100644 include/SugarObjects/templates/issue/metadata/dashletviewdefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/detailviewdefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/editviewdefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/listviewdefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/metafiles.php
create mode 100644 include/SugarObjects/templates/issue/metadata/popupdefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/quickcreatedefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/searchdefs.php
create mode 100644 include/SugarObjects/templates/issue/metadata/subpanels/default.php
create mode 100644 include/SugarObjects/templates/issue/vardefs.php
create mode 100644 include/SugarObjects/templates/person/Person.php
create mode 100644 include/SugarObjects/templates/person/config.php
create mode 100644 include/SugarObjects/templates/person/icons/Createperson.gif
create mode 100644 include/SugarObjects/templates/person/icons/person.gif
create mode 100644 include/SugarObjects/templates/person/icons/person_32.gif
create mode 100644 include/SugarObjects/templates/person/language/en_us.lang.php
create mode 100644 include/SugarObjects/templates/person/metadata/SearchFields.php
create mode 100644 include/SugarObjects/templates/person/metadata/dashletviewdefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/detailviewdefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/editviewdefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/listviewdefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/metafiles.php
create mode 100644 include/SugarObjects/templates/person/metadata/popupdefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/quickcreatedefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/searchdefs.php
create mode 100644 include/SugarObjects/templates/person/metadata/subpanels/default.php
create mode 100644 include/SugarObjects/templates/person/vardefs.php
create mode 100644 include/SugarObjects/templates/sale/Chance.php
create mode 100644 include/SugarObjects/templates/sale/Sale.php
create mode 100644 include/SugarObjects/templates/sale/config.php
create mode 100644 include/SugarObjects/templates/sale/icons/Createchance.gif
create mode 100644 include/SugarObjects/templates/sale/icons/Createsale.gif
create mode 100644 include/SugarObjects/templates/sale/icons/chance.gif
create mode 100644 include/SugarObjects/templates/sale/icons/chance_32.gif
create mode 100644 include/SugarObjects/templates/sale/icons/sale.gif
create mode 100644 include/SugarObjects/templates/sale/icons/sale_32.gif
create mode 100644 include/SugarObjects/templates/sale/language/application/en_us.lang.php
create mode 100644 include/SugarObjects/templates/sale/language/en_us.lang.php
create mode 100644 include/SugarObjects/templates/sale/metadata/SearchFields.php
create mode 100644 include/SugarObjects/templates/sale/metadata/dashletviewdefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/detailviewdefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/editviewdefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/listviewdefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/metafiles.php
create mode 100644 include/SugarObjects/templates/sale/metadata/popupdefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/quickcreatedefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/searchdefs.php
create mode 100644 include/SugarObjects/templates/sale/metadata/subpanels/default.php
create mode 100644 include/SugarObjects/templates/sale/vardefs.php
create mode 100644 include/SugarPHPMailer.php
create mode 100644 include/SugarTheme/SugarTheme.php
create mode 100644 include/SugarTheme/cssmin.php
create mode 100644 include/SugarTheme/getImage.php
create mode 100644 include/SugarTinyMCE.php
create mode 100644 include/Sugar_Smarty.php
create mode 100644 include/Sugarpdf/FontManager.php
create mode 100644 include/Sugarpdf/Sugarpdf.php
create mode 100644 include/Sugarpdf/SugarpdfFactory.php
create mode 100644 include/Sugarpdf/SugarpdfHelper.php
create mode 100644 include/Sugarpdf/sugarpdf/sugarpdf.smarty.php
create mode 100644 include/Sugarpdf/sugarpdf_config.php
create mode 100644 include/Sugarpdf/sugarpdf_default.php
create mode 100644 include/TemplateHandler/TemplateHandler.php
create mode 100644 include/TimeDate.php
create mode 100644 include/VarDefHandler/VarDefHandler.php
create mode 100644 include/VarDefHandler/listvardefoverride.php
create mode 100644 include/VarDefHandler/vardef_meta_arrays.php
create mode 100644 include/connectors/ConnectorFactory.php
create mode 100644 include/connectors/component.php
create mode 100644 include/connectors/filters/FilterFactory.php
create mode 100644 include/connectors/filters/default/filter.php
create mode 100644 include/connectors/formatters/FormatterFactory.php
create mode 100644 include/connectors/formatters/default/company_detail.js
create mode 100644 include/connectors/formatters/default/formatter.php
create mode 100644 include/connectors/formatters/ext/rest/tpls/default.tpl
create mode 100644 include/connectors/formatters/ext/soap/tpls/default.tpl
create mode 100644 include/connectors/sources/SourceFactory.php
create mode 100644 include/connectors/sources/default/source.php
create mode 100644 include/connectors/sources/ext/rest/rest.php
create mode 100644 include/connectors/sources/ext/soap/soap.php
create mode 100644 include/connectors/sources/loc/xml.php
create mode 100644 include/connectors/utils/ConnectorUtils.php
create mode 100644 include/contextMenus/contextMenu.php
create mode 100644 include/contextMenus/menuDefs/sugarAccount.php
create mode 100644 include/contextMenus/menuDefs/sugarObject.php
create mode 100644 include/contextMenus/menuDefs/sugarPerson.php
create mode 100644 include/controller/Controller.php
create mode 100644 include/database/DBHelper.php
create mode 100644 include/database/DBManager.php
create mode 100644 include/database/DBManagerFactory.php
create mode 100644 include/database/FreeTDSHelper.php
create mode 100644 include/database/FreeTDSManager.php
create mode 100644 include/database/MssqlHelper.php
create mode 100644 include/database/MssqlManager.php
create mode 100644 include/database/MysqlHelper.php
create mode 100644 include/database/MysqlManager.php
create mode 100644 include/database/MysqliHelper.php
create mode 100644 include/database/MysqliManager.php
create mode 100644 include/database/PearDatabase.php
create mode 100644 include/database/SqlsrvHelper.php
create mode 100644 include/database/SqlsrvManager.php
create mode 100644 include/dir_inc.php
create mode 100644 include/entryPoint.php
create mode 100644 include/export_utils.php
create mode 100644 include/externalAPI/Base/ExternalAPIBase.php
create mode 100644 include/externalAPI/Base/ExternalAPIPlugin.php
create mode 100644 include/externalAPI/Base/ExternalOAuthAPIPlugin.php
create mode 100644 include/externalAPI/Base/OAuthPluginBase.php
create mode 100644 include/externalAPI/Base/WebDocument.php
create mode 100644 include/externalAPI/Base/WebFeed.php
create mode 100644 include/externalAPI/Base/WebMeeting.php
create mode 100644 include/externalAPI/ExternalAPIFactory.php
create mode 100644 include/fonts/Courier-Bold.afm
create mode 100644 include/fonts/Courier-BoldOblique.afm
create mode 100644 include/fonts/Courier-Oblique.afm
create mode 100644 include/fonts/Courier.afm
create mode 100644 include/fonts/Helvetica-Bold.afm
create mode 100644 include/fonts/Helvetica-BoldOblique.afm
create mode 100644 include/fonts/Helvetica-Oblique.afm
create mode 100644 include/fonts/Helvetica.afm
create mode 100644 include/fonts/License.html
create mode 100644 include/fonts/Times-Bold.afm
create mode 100644 include/fonts/Times-BoldItalic.afm
create mode 100644 include/fonts/Times-Italic.afm
create mode 100644 include/fonts/Times-Roman.afm
create mode 100644 include/formbase.php
create mode 100644 include/generic/DeleteRelationship.php
create mode 100644 include/generic/LayoutManager.php
create mode 100644 include/generic/Save2.php
create mode 100644 include/generic/SugarWidgets/SugarWidget.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetField.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldbool.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldchar.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldcurrency.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielddate.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielddatepicker.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielddatetime.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielddatetimecombo.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielddecimal.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielddouble.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldemail.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldenum.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldfile.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldfloat.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldfullname.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldid.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldimage.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldint.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldlongtext.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldmultienum.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldname.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldnum.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldparent_type.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldphone.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldradioenum.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldrelate.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldsingleenum.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldtext.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldtime.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldurl.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFielduser_name.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetFieldvarchar.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetReportField.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelActivitiesStatusField.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelCloseButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelConcat.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelDetailViewLink.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelEditButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelEditRoleButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelEmailLink.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelGetLatestButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelIcon.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelLoadSignedButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelRemoveButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelRemoveButtonMeetings.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelRemoveButtonProjects.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopArchiveEmailButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopButtonQuickCreate.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateAccountNameButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateCampaignLogEntryButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateLeadNameButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateNoteButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateTaskButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopScheduleCallButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopScheduleMeetingButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopSelectButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopSelectContactsButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopSelectUsersButton.php
create mode 100644 include/generic/SugarWidgets/SugarWidgetSubPanelTopSummaryButton.php
create mode 100644 include/globalControlLinks.php
create mode 100644 include/images/1.gif
create mode 100644 include/images/SugarPlanet.swf
create mode 100644 include/images/blank.gif
create mode 100644 include/images/cube_bg.gif
create mode 100644 include/images/default_user_feed_picture.png
create mode 100644 include/images/docs.png
create mode 100644 include/images/forums.png
create mode 100644 include/images/install_themes.jpg
create mode 100644 include/images/iphone-listArrow.png
create mode 100644 include/images/iphone-toolbar.png
create mode 100644 include/images/kb.png
create mode 100644 include/images/options.gif
create mode 100644 include/images/options_up.gif
create mode 100644 include/images/powered_by_sugarcrm.gif
create mode 100644 include/images/poweredby_sugarcrm.png
create mode 100644 include/images/rss_xml.gif
create mode 100644 include/images/seed_chris_id.gif
create mode 100644 include/images/seed_jim_id.gif
create mode 100644 include/images/seed_max_id.gif
create mode 100644 include/images/seed_sally_id.gif
create mode 100644 include/images/seed_sarah_id.gif
create mode 100644 include/images/seed_will_id.gif
create mode 100644 include/images/spacer.png
create mode 100644 include/images/sugar_icon.ico
create mode 100644 include/images/sugar_md_open.png
create mode 100644 include/images/sugar_wizard_welcome.jpg
create mode 100644 include/images/sugarcrm_about_logo.gif
create mode 100644 include/images/sugarcrm_copyright_logo.jpg
create mode 100644 include/images/sugarcrm_login.png
create mode 100644 include/images/sugarsales_myarea.png
create mode 100644 include/images/university.png
create mode 100644 include/images/wiki.png
create mode 100644 include/javascript/calendar.js
create mode 100644 include/javascript/cookie.js
create mode 100644 include/javascript/dashlets.js
create mode 100644 include/javascript/getYUIComboFile.php
create mode 100644 include/javascript/include.js
create mode 100644 include/javascript/iscroll.js
create mode 100644 include/javascript/javascript.php
create mode 100644 include/javascript/jsAlerts.php
create mode 100644 include/javascript/jsclass_async.js
create mode 100644 include/javascript/jsclass_base.js
create mode 100644 include/javascript/menu.js
create mode 100644 include/javascript/overlibmws.js
create mode 100644 include/javascript/overlibmws_iframe.js
create mode 100644 include/javascript/popup_helper.js
create mode 100644 include/javascript/popup_parent_helper.js
create mode 100644 include/javascript/quickCompose.js
create mode 100644 include/javascript/quicksearch.js
create mode 100644 include/javascript/report_additionals.js
create mode 100644 include/javascript/sugar_3.js
create mode 100644 include/javascript/sugar_connection_event_listener.js
create mode 100644 include/javascript/sugar_grp1.js
create mode 100644 include/javascript/sugar_grp1_yui.js
create mode 100644 include/javascript/sugar_grp_emails.js
create mode 100644 include/javascript/sugar_grp_overlib.js
create mode 100644 include/javascript/sugar_grp_quickcomp.js
create mode 100644 include/javascript/sugar_grp_yui2.js
create mode 100644 include/javascript/sugar_grp_yui_widgets.css
create mode 100644 include/javascript/sugar_grp_yui_widgets.js
create mode 100644 include/javascript/sugarwidgets/SugarYUILoader.js
create mode 100644 include/javascript/sugarwidgets/SugarYUIWidgets.js
create mode 100644 include/javascript/swfobject.js
create mode 100644 include/javascript/tiny_mce/langs/en.js
create mode 100644 include/javascript/tiny_mce/license.txt
create mode 100644 include/javascript/tiny_mce/plugins/advhr/css/advhr.css
create mode 100644 include/javascript/tiny_mce/plugins/advhr/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/advhr/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/advhr/js/rule.js
create mode 100644 include/javascript/tiny_mce/plugins/advhr/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/advhr/rule.htm
create mode 100644 include/javascript/tiny_mce/plugins/advimage/css/advimage.css
create mode 100644 include/javascript/tiny_mce/plugins/advimage/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/advimage/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/advimage/image.htm
create mode 100644 include/javascript/tiny_mce/plugins/advimage/img/sample.gif
create mode 100644 include/javascript/tiny_mce/plugins/advimage/js/image.js
create mode 100644 include/javascript/tiny_mce/plugins/advimage/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/advlink/css/advlink.css
create mode 100644 include/javascript/tiny_mce/plugins/advlink/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/advlink/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/advlink/js/advlink.js
create mode 100644 include/javascript/tiny_mce/plugins/advlink/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/advlink/link.htm
create mode 100644 include/javascript/tiny_mce/plugins/autosave/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/autosave/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/bbcode/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/bbcode/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/compat2x/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/compat2x/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/contextmenu/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/contextmenu/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/directionality/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/directionality/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/emotions/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/emotions/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/emotions/emotions.htm
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-cool.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-cry.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-frown.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-innocent.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-kiss.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-laughing.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-sealed.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-smile.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-surprised.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-undecided.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-wink.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/img/smiley-yell.gif
create mode 100644 include/javascript/tiny_mce/plugins/emotions/js/emotions.js
create mode 100644 include/javascript/tiny_mce/plugins/emotions/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/example/dialog.htm
create mode 100644 include/javascript/tiny_mce/plugins/example/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/example/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/example/img/example.gif
create mode 100644 include/javascript/tiny_mce/plugins/example/js/dialog.js
create mode 100644 include/javascript/tiny_mce/plugins/example/langs/en.js
create mode 100644 include/javascript/tiny_mce/plugins/example/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/fullpage/css/fullpage.css
create mode 100644 include/javascript/tiny_mce/plugins/fullpage/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/fullpage/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/fullpage/fullpage.htm
create mode 100644 include/javascript/tiny_mce/plugins/fullpage/js/fullpage.js
create mode 100644 include/javascript/tiny_mce/plugins/fullpage/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/fullscreen/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/fullscreen/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/fullscreen/fullscreen.htm
create mode 100644 include/javascript/tiny_mce/plugins/iespell/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/iespell/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
create mode 100644 include/javascript/tiny_mce/plugins/inlinepopups/template.htm
create mode 100644 include/javascript/tiny_mce/plugins/insertdatetime/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/layer/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/layer/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/media/css/content.css
create mode 100644 include/javascript/tiny_mce/plugins/media/css/media.css
create mode 100644 include/javascript/tiny_mce/plugins/media/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/media/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/media/img/flash.gif
create mode 100644 include/javascript/tiny_mce/plugins/media/img/flv_player.swf
create mode 100644 include/javascript/tiny_mce/plugins/media/img/quicktime.gif
create mode 100644 include/javascript/tiny_mce/plugins/media/img/realmedia.gif
create mode 100644 include/javascript/tiny_mce/plugins/media/img/shockwave.gif
create mode 100644 include/javascript/tiny_mce/plugins/media/img/trans.gif
create mode 100644 include/javascript/tiny_mce/plugins/media/img/windowsmedia.gif
create mode 100644 include/javascript/tiny_mce/plugins/media/js/embed.js
create mode 100644 include/javascript/tiny_mce/plugins/media/js/media.js
create mode 100644 include/javascript/tiny_mce/plugins/media/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/media/media.htm
create mode 100644 include/javascript/tiny_mce/plugins/nonbreaking/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/noneditable/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/noneditable/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/pagebreak/css/content.css
create mode 100644 include/javascript/tiny_mce/plugins/pagebreak/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/pagebreak/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/pagebreak/img/pagebreak.gif
create mode 100644 include/javascript/tiny_mce/plugins/pagebreak/img/trans.gif
create mode 100644 include/javascript/tiny_mce/plugins/paste/blank.htm
create mode 100644 include/javascript/tiny_mce/plugins/paste/css/blank.css
create mode 100644 include/javascript/tiny_mce/plugins/paste/css/pasteword.css
create mode 100644 include/javascript/tiny_mce/plugins/paste/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/paste/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/paste/js/pastetext.js
create mode 100644 include/javascript/tiny_mce/plugins/paste/js/pasteword.js
create mode 100644 include/javascript/tiny_mce/plugins/paste/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/paste/pastetext.htm
create mode 100644 include/javascript/tiny_mce/plugins/paste/pasteword.htm
create mode 100644 include/javascript/tiny_mce/plugins/preview/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/preview/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/preview/example.html
create mode 100644 include/javascript/tiny_mce/plugins/preview/jscripts/embed.js
create mode 100644 include/javascript/tiny_mce/plugins/preview/preview.html
create mode 100644 include/javascript/tiny_mce/plugins/print/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/print/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/safari/blank.htm
create mode 100644 include/javascript/tiny_mce/plugins/safari/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/safari/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/save/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/save/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/searchreplace/css/searchreplace.css
create mode 100644 include/javascript/tiny_mce/plugins/searchreplace/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/searchreplace/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/searchreplace/js/searchreplace.js
create mode 100644 include/javascript/tiny_mce/plugins/searchreplace/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/searchreplace/searchreplace.htm
create mode 100644 include/javascript/tiny_mce/plugins/spellchecker/css/content.css
create mode 100644 include/javascript/tiny_mce/plugins/spellchecker/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/spellchecker/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/spellchecker/img/wline.gif
create mode 100644 include/javascript/tiny_mce/plugins/style/css/props.css
create mode 100644 include/javascript/tiny_mce/plugins/style/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/style/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/style/js/props.js
create mode 100644 include/javascript/tiny_mce/plugins/style/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/style/props.htm
create mode 100644 include/javascript/tiny_mce/plugins/table/cell.htm
create mode 100644 include/javascript/tiny_mce/plugins/table/css/cell.css
create mode 100644 include/javascript/tiny_mce/plugins/table/css/row.css
create mode 100644 include/javascript/tiny_mce/plugins/table/css/table.css
create mode 100644 include/javascript/tiny_mce/plugins/table/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/table/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/table/js/cell.js
create mode 100644 include/javascript/tiny_mce/plugins/table/js/merge_cells.js
create mode 100644 include/javascript/tiny_mce/plugins/table/js/row.js
create mode 100644 include/javascript/tiny_mce/plugins/table/js/table.js
create mode 100644 include/javascript/tiny_mce/plugins/table/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/table/merge_cells.htm
create mode 100644 include/javascript/tiny_mce/plugins/table/row.htm
create mode 100644 include/javascript/tiny_mce/plugins/table/table.htm
create mode 100644 include/javascript/tiny_mce/plugins/template/blank.htm
create mode 100644 include/javascript/tiny_mce/plugins/template/css/template.css
create mode 100644 include/javascript/tiny_mce/plugins/template/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/template/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/template/js/template.js
create mode 100644 include/javascript/tiny_mce/plugins/template/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/plugins/template/template.htm
create mode 100644 include/javascript/tiny_mce/plugins/visualchars/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/visualchars/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/abbr.htm
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/acronym.htm
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/attributes.htm
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/cite.htm
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/css/attributes.css
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/css/popup.css
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/del.htm
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/ins.htm
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/abbr.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/acronym.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/attributes.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/cite.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/del.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/element_common.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/js/ins.js
create mode 100644 include/javascript/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/about.htm
create mode 100644 include/javascript/tiny_mce/themes/advanced/anchor.htm
create mode 100644 include/javascript/tiny_mce/themes/advanced/charmap.htm
create mode 100644 include/javascript/tiny_mce/themes/advanced/color_picker.htm
create mode 100644 include/javascript/tiny_mce/themes/advanced/editor_template.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/editor_template_src.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/image.htm
create mode 100644 include/javascript/tiny_mce/themes/advanced/img/colorpicker.jpg
create mode 100644 include/javascript/tiny_mce/themes/advanced/img/icons.gif
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/about.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/anchor.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/charmap.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/color_picker.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/image.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/link.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/js/source_editor.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/langs/en.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/langs/en_dlg.js
create mode 100644 include/javascript/tiny_mce/themes/advanced/link.htm
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/content.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/dialog.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/img/buttons.png
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/img/items.gif
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/img/progress.gif
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/img/tabs.gif
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/default/ui.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/content.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/dialog.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/ui.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
create mode 100644 include/javascript/tiny_mce/themes/advanced/source_editor.htm
create mode 100644 include/javascript/tiny_mce/themes/simple/editor_template.js
create mode 100644 include/javascript/tiny_mce/themes/simple/editor_template_src.js
create mode 100644 include/javascript/tiny_mce/themes/simple/img/icons.gif
create mode 100644 include/javascript/tiny_mce/themes/simple/langs/en.js
create mode 100644 include/javascript/tiny_mce/themes/simple/skins/default/content.css
create mode 100644 include/javascript/tiny_mce/themes/simple/skins/default/ui.css
create mode 100644 include/javascript/tiny_mce/themes/simple/skins/o2k7/content.css
create mode 100644 include/javascript/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
create mode 100644 include/javascript/tiny_mce/themes/simple/skins/o2k7/ui.css
create mode 100644 include/javascript/tiny_mce/tiny_mce.js
create mode 100644 include/javascript/tiny_mce/tiny_mce_popup.js
create mode 100644 include/javascript/tiny_mce/tiny_mce_src.js
create mode 100644 include/javascript/tiny_mce/utils/editable_selects.js
create mode 100644 include/javascript/tiny_mce/utils/form_utils.js
create mode 100644 include/javascript/tiny_mce/utils/mctabs.js
create mode 100644 include/javascript/tiny_mce/utils/validate.js
create mode 100644 include/javascript/yui/LICENSE.txt
create mode 100644 include/javascript/yui/README
create mode 100644 include/javascript/yui/build/animation/animation-min.js
create mode 100644 include/javascript/yui/build/animation/animation.js
create mode 100644 include/javascript/yui/build/assets/skins/sam/ajax-loader.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/asc.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/autocomplete.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/back-h.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/back-v.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/bar-h.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/bar-v.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/bg-h.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/bg-v.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/blankimage.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/button.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/calendar.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/carousel.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/check0.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/check1.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/check2.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/colorpicker.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/container.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/datatable.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/desc.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/dt-arrow-dn.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/dt-arrow-up.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/editor-knob.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/editor-sprite-active.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/editor-sprite.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/editor.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/header_background.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/hue_bg.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/imagecropper.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/layout.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/layout_sprite.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/loading.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/logger.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/menu-button-arrow-disabled.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menu-button-arrow.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menu.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/menubaritem_submenuindicator.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menuitem_checkbox.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menuitem_checkbox_disabled.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menuitem_submenuindicator.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/menuitem_submenuindicator_disabled.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/paginator.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/picker_mask.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/profilerviewer.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/progressbar.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/resize.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/simpleeditor.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/skin.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/slider.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/split-button-arrow-active.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/split-button-arrow-disabled.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/split-button-arrow-focus.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/split-button-arrow-hover.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/split-button-arrow.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/sprite.png
create mode 100644 include/javascript/yui/build/assets/skins/sam/sprite.psd
create mode 100644 include/javascript/yui/build/assets/skins/sam/tabview.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/treeview-loading.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/treeview-sprite.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/treeview.css
create mode 100644 include/javascript/yui/build/assets/skins/sam/wait.gif
create mode 100644 include/javascript/yui/build/assets/skins/sam/yuitest.css
create mode 100644 include/javascript/yui/build/autocomplete/assets/autocomplete-core.css
create mode 100644 include/javascript/yui/build/autocomplete/assets/skins/sam/autocomplete-skin.css
create mode 100644 include/javascript/yui/build/autocomplete/assets/skins/sam/autocomplete.css
create mode 100644 include/javascript/yui/build/autocomplete/autocomplete-min.js
create mode 100644 include/javascript/yui/build/autocomplete/autocomplete.js
create mode 100644 include/javascript/yui/build/base/base-min.css
create mode 100644 include/javascript/yui/build/base/base.css
create mode 100644 include/javascript/yui/build/button/assets/button-core.css
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/button-skin.css
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/button.css
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/menu-button-arrow-disabled.png
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/menu-button-arrow.png
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-active.png
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-disabled.png
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-focus.png
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-hover.png
create mode 100644 include/javascript/yui/build/button/assets/skins/sam/split-button-arrow.png
create mode 100644 include/javascript/yui/build/button/button-min.js
create mode 100644 include/javascript/yui/build/button/button.js
create mode 100644 include/javascript/yui/build/calendar/assets/calendar-core.css
create mode 100644 include/javascript/yui/build/calendar/assets/calendar.css
create mode 100644 include/javascript/yui/build/calendar/assets/calgrad.png
create mode 100644 include/javascript/yui/build/calendar/assets/callt.gif
create mode 100644 include/javascript/yui/build/calendar/assets/calrt.gif
create mode 100644 include/javascript/yui/build/calendar/assets/calx.gif
create mode 100644 include/javascript/yui/build/calendar/assets/skins/sam/calendar-skin.css
create mode 100644 include/javascript/yui/build/calendar/assets/skins/sam/calendar.css
create mode 100644 include/javascript/yui/build/calendar/calendar-min.js
create mode 100644 include/javascript/yui/build/calendar/calendar.js
create mode 100644 include/javascript/yui/build/carousel/assets/ajax-loader.gif
create mode 100644 include/javascript/yui/build/carousel/assets/carousel-core.css
create mode 100644 include/javascript/yui/build/carousel/assets/skins/sam/ajax-loader.gif
create mode 100644 include/javascript/yui/build/carousel/assets/skins/sam/carousel-skin.css
create mode 100644 include/javascript/yui/build/carousel/assets/skins/sam/carousel.css
create mode 100644 include/javascript/yui/build/carousel/carousel-min.js
create mode 100644 include/javascript/yui/build/carousel/carousel.js
create mode 100644 include/javascript/yui/build/charts/assets/charts.swf
create mode 100644 include/javascript/yui/build/charts/charts-min.js
create mode 100644 include/javascript/yui/build/charts/charts.js
create mode 100644 include/javascript/yui/build/colorpicker/assets/colorpicker-core.css
create mode 100644 include/javascript/yui/build/colorpicker/assets/hue_thumb.png
create mode 100644 include/javascript/yui/build/colorpicker/assets/picker_mask.png
create mode 100644 include/javascript/yui/build/colorpicker/assets/picker_thumb.png
create mode 100644 include/javascript/yui/build/colorpicker/assets/skins/sam/colorpicker-skin.css
create mode 100644 include/javascript/yui/build/colorpicker/assets/skins/sam/colorpicker.css
create mode 100644 include/javascript/yui/build/colorpicker/assets/skins/sam/hue_bg.png
create mode 100644 include/javascript/yui/build/colorpicker/assets/skins/sam/picker_mask.png
create mode 100644 include/javascript/yui/build/colorpicker/colorpicker-min.js
create mode 100644 include/javascript/yui/build/colorpicker/colorpicker.js
create mode 100644 include/javascript/yui/build/connection/connection-min.js
create mode 100644 include/javascript/yui/build/connection/connection.js
create mode 100644 include/javascript/yui/build/connection/connection.swf
create mode 100644 include/javascript/yui/build/connection/connection_core-debug.js
create mode 100644 include/javascript/yui/build/connection/connection_core-min.js
create mode 100644 include/javascript/yui/build/connection/connection_core.js
create mode 100644 include/javascript/yui/build/container/assets/alrt16_1.gif
create mode 100644 include/javascript/yui/build/container/assets/blck16_1.gif
create mode 100644 include/javascript/yui/build/container/assets/close12_1.gif
create mode 100644 include/javascript/yui/build/container/assets/container-core.css
create mode 100644 include/javascript/yui/build/container/assets/container.css
create mode 100644 include/javascript/yui/build/container/assets/hlp16_1.gif
create mode 100644 include/javascript/yui/build/container/assets/info16_1.gif
create mode 100644 include/javascript/yui/build/container/assets/skins/sam/container-skin.css
create mode 100644 include/javascript/yui/build/container/assets/skins/sam/container.css
create mode 100644 include/javascript/yui/build/container/assets/tip16_1.gif
create mode 100644 include/javascript/yui/build/container/assets/warn16_1.gif
create mode 100644 include/javascript/yui/build/container/container-min.js
create mode 100644 include/javascript/yui/build/container/container.js
create mode 100644 include/javascript/yui/build/container/container_core-min.js
create mode 100644 include/javascript/yui/build/cookie/cookie-min.js
create mode 100644 include/javascript/yui/build/cookie/cookie.js
create mode 100644 include/javascript/yui/build/datasource/datasource-min.js
create mode 100644 include/javascript/yui/build/datasource/datasource.js
create mode 100644 include/javascript/yui/build/datatable/assets/datatable-core.css
create mode 100644 include/javascript/yui/build/datatable/assets/datatable.css
create mode 100644 include/javascript/yui/build/datatable/assets/skins/sam/datatable-skin.css
create mode 100644 include/javascript/yui/build/datatable/assets/skins/sam/datatable.css
create mode 100644 include/javascript/yui/build/datatable/assets/skins/sam/dt-arrow-dn.png
create mode 100644 include/javascript/yui/build/datatable/assets/skins/sam/dt-arrow-up.png
create mode 100644 include/javascript/yui/build/datatable/datatable-min.js
create mode 100644 include/javascript/yui/build/datatable/datatable.js
create mode 100644 include/javascript/yui/build/datemath/datemath-debug.js
create mode 100644 include/javascript/yui/build/datemath/datemath-min.js
create mode 100644 include/javascript/yui/build/datemath/datemath.js
create mode 100644 include/javascript/yui/build/dom/dom-min.js
create mode 100644 include/javascript/yui/build/dom/dom.js
create mode 100644 include/javascript/yui/build/dragdrop/dragdrop-min.js
create mode 100644 include/javascript/yui/build/dragdrop/dragdrop.js
create mode 100644 include/javascript/yui/build/editor/assets/editor-core.css
create mode 100644 include/javascript/yui/build/editor/assets/simpleeditor-core.css
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/blankimage.png
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/editor-knob.gif
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/editor-skin.css
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/editor-sprite-active.gif
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/editor-sprite.gif
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/editor.css
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/simpleeditor-skin.css
create mode 100644 include/javascript/yui/build/editor/assets/skins/sam/simpleeditor.css
create mode 100644 include/javascript/yui/build/editor/editor-min.js
create mode 100644 include/javascript/yui/build/editor/editor.js
create mode 100644 include/javascript/yui/build/editor/simpleeditor-min.js
create mode 100644 include/javascript/yui/build/editor/simpleeditor.js
create mode 100644 include/javascript/yui/build/element-delegate/element-delegate-debug.js
create mode 100644 include/javascript/yui/build/element-delegate/element-delegate-min.js
create mode 100644 include/javascript/yui/build/element-delegate/element-delegate.js
create mode 100644 include/javascript/yui/build/element/element-min.js
create mode 100644 include/javascript/yui/build/element/element.js
create mode 100644 include/javascript/yui/build/event-delegate/event-delegate-debug.js
create mode 100644 include/javascript/yui/build/event-delegate/event-delegate-min.js
create mode 100644 include/javascript/yui/build/event-delegate/event-delegate.js
create mode 100644 include/javascript/yui/build/event-mouseenter/event-mouseenter-debug.js
create mode 100644 include/javascript/yui/build/event-mouseenter/event-mouseenter-min.js
create mode 100644 include/javascript/yui/build/event-mouseenter/event-mouseenter.js
create mode 100644 include/javascript/yui/build/event-simulate/event-simulate-debug.js
create mode 100644 include/javascript/yui/build/event-simulate/event-simulate-min.js
create mode 100644 include/javascript/yui/build/event-simulate/event-simulate.js
create mode 100644 include/javascript/yui/build/event/event-min.js
create mode 100644 include/javascript/yui/build/event/event.js
create mode 100644 include/javascript/yui/build/fonts/fonts-min.css
create mode 100644 include/javascript/yui/build/fonts/fonts.css
create mode 100644 include/javascript/yui/build/get/get-min.js
create mode 100644 include/javascript/yui/build/get/get.js
create mode 100644 include/javascript/yui/build/grids/grids-min.css
create mode 100644 include/javascript/yui/build/grids/grids.css
create mode 100644 include/javascript/yui/build/history/assets/blank.html
create mode 100644 include/javascript/yui/build/history/history-min.js
create mode 100644 include/javascript/yui/build/history/history.js
create mode 100644 include/javascript/yui/build/imagecropper/assets/imagecropper-core.css
create mode 100644 include/javascript/yui/build/imagecropper/assets/skins/sam/imagecropper-skin.css
create mode 100644 include/javascript/yui/build/imagecropper/assets/skins/sam/imagecropper.css
create mode 100644 include/javascript/yui/build/imagecropper/imagecropper-min.js
create mode 100644 include/javascript/yui/build/imagecropper/imagecropper.js
create mode 100644 include/javascript/yui/build/imageloader/imageloader-min.js
create mode 100644 include/javascript/yui/build/imageloader/imageloader.js
create mode 100644 include/javascript/yui/build/json/json-min.js
create mode 100644 include/javascript/yui/build/json/json.js
create mode 100644 include/javascript/yui/build/layout/assets/layout-core.css
create mode 100644 include/javascript/yui/build/layout/assets/skins/sam/layout-skin.css
create mode 100644 include/javascript/yui/build/layout/assets/skins/sam/layout.css
create mode 100644 include/javascript/yui/build/layout/assets/skins/sam/layout_sprite.png
create mode 100644 include/javascript/yui/build/layout/layout-min.js
create mode 100644 include/javascript/yui/build/layout/layout.js
create mode 100644 include/javascript/yui/build/logger/assets/logger-core.css
create mode 100644 include/javascript/yui/build/logger/assets/logger.css
create mode 100644 include/javascript/yui/build/logger/assets/skins/sam/logger-skin.css
create mode 100644 include/javascript/yui/build/logger/assets/skins/sam/logger.css
create mode 100644 include/javascript/yui/build/logger/logger-min.js
create mode 100644 include/javascript/yui/build/logger/logger.js
create mode 100644 include/javascript/yui/build/menu/assets/menu-core.css
create mode 100644 include/javascript/yui/build/menu/assets/menu.css
create mode 100644 include/javascript/yui/build/menu/assets/menu_down_arrow.png
create mode 100644 include/javascript/yui/build/menu/assets/menu_down_arrow_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/menu_up_arrow.png
create mode 100644 include/javascript/yui/build/menu/assets/menu_up_arrow_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/menubaritem_submenuindicator.png
create mode 100644 include/javascript/yui/build/menu/assets/menubaritem_submenuindicator_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/menubaritem_submenuindicator_selected.png
create mode 100644 include/javascript/yui/build/menu/assets/menuitem_checkbox.png
create mode 100644 include/javascript/yui/build/menu/assets/menuitem_checkbox_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/menuitem_checkbox_selected.png
create mode 100644 include/javascript/yui/build/menu/assets/menuitem_submenuindicator.png
create mode 100644 include/javascript/yui/build/menu/assets/menuitem_submenuindicator_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/menuitem_submenuindicator_selected.png
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menu-skin.css
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menu.css
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menubaritem_submenuindicator.png
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menubaritem_submenuindicator_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menuitem_checkbox.png
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menuitem_checkbox_disabled.png
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menuitem_submenuindicator.png
create mode 100644 include/javascript/yui/build/menu/assets/skins/sam/menuitem_submenuindicator_disabled.png
create mode 100644 include/javascript/yui/build/menu/menu-min.js
create mode 100644 include/javascript/yui/build/menu/menu.js
create mode 100644 include/javascript/yui/build/paginator/assets/paginator-core.css
create mode 100644 include/javascript/yui/build/paginator/assets/skins/sam/paginator-skin.css
create mode 100644 include/javascript/yui/build/paginator/assets/skins/sam/paginator.css
create mode 100644 include/javascript/yui/build/paginator/paginator-min.js
create mode 100644 include/javascript/yui/build/paginator/paginator.js
create mode 100644 include/javascript/yui/build/profiler/profiler-min.js
create mode 100644 include/javascript/yui/build/profiler/profiler.js
create mode 100644 include/javascript/yui/build/profilerviewer/assets/profilerviewer-core.css
create mode 100644 include/javascript/yui/build/profilerviewer/assets/skins/sam/asc.gif
create mode 100644 include/javascript/yui/build/profilerviewer/assets/skins/sam/desc.gif
create mode 100644 include/javascript/yui/build/profilerviewer/assets/skins/sam/header_background.png
create mode 100644 include/javascript/yui/build/profilerviewer/assets/skins/sam/profilerviewer-skin.css
create mode 100644 include/javascript/yui/build/profilerviewer/assets/skins/sam/profilerviewer.css
create mode 100644 include/javascript/yui/build/profilerviewer/assets/skins/sam/wait.gif
create mode 100644 include/javascript/yui/build/profilerviewer/profilerviewer-min.js
create mode 100644 include/javascript/yui/build/profilerviewer/profilerviewer.js
create mode 100644 include/javascript/yui/build/progressbar/assets/progressbar-core.css
create mode 100644 include/javascript/yui/build/progressbar/assets/skins/sam/back-h.png
create mode 100644 include/javascript/yui/build/progressbar/assets/skins/sam/back-v.png
create mode 100644 include/javascript/yui/build/progressbar/assets/skins/sam/bar-h.png
create mode 100644 include/javascript/yui/build/progressbar/assets/skins/sam/bar-v.png
create mode 100644 include/javascript/yui/build/progressbar/assets/skins/sam/progressbar-skin.css
create mode 100644 include/javascript/yui/build/progressbar/assets/skins/sam/progressbar.css
create mode 100644 include/javascript/yui/build/progressbar/progressbar-debug.js
create mode 100644 include/javascript/yui/build/progressbar/progressbar-min.js
create mode 100644 include/javascript/yui/build/progressbar/progressbar.js
create mode 100644 include/javascript/yui/build/reset-fonts-grids/reset-fonts-grids.css
create mode 100644 include/javascript/yui/build/reset-fonts/reset-fonts.css
create mode 100644 include/javascript/yui/build/reset/reset-min.css
create mode 100644 include/javascript/yui/build/reset/reset.css
create mode 100644 include/javascript/yui/build/resize/assets/resize-core.css
create mode 100644 include/javascript/yui/build/resize/assets/skins/sam/layout_sprite.png
create mode 100644 include/javascript/yui/build/resize/assets/skins/sam/resize-skin.css
create mode 100644 include/javascript/yui/build/resize/assets/skins/sam/resize.css
create mode 100644 include/javascript/yui/build/resize/resize-min.js
create mode 100644 include/javascript/yui/build/resize/resize.js
create mode 100644 include/javascript/yui/build/selector/selector-min.js
create mode 100644 include/javascript/yui/build/selector/selector.js
create mode 100644 include/javascript/yui/build/slider/assets/bg-fader.gif
create mode 100644 include/javascript/yui/build/slider/assets/bg-h.gif
create mode 100644 include/javascript/yui/build/slider/assets/bg-v-e.gif
create mode 100644 include/javascript/yui/build/slider/assets/bg-v.gif
create mode 100644 include/javascript/yui/build/slider/assets/left-thumb.png
create mode 100644 include/javascript/yui/build/slider/assets/right-thumb.png
create mode 100644 include/javascript/yui/build/slider/assets/skins/sam/bg-h.gif
create mode 100644 include/javascript/yui/build/slider/assets/skins/sam/bg-v.gif
create mode 100644 include/javascript/yui/build/slider/assets/skins/sam/slider-skin.css
create mode 100644 include/javascript/yui/build/slider/assets/skins/sam/slider.css
create mode 100644 include/javascript/yui/build/slider/assets/slider-core.css
create mode 100644 include/javascript/yui/build/slider/assets/slider-skin.css
create mode 100644 include/javascript/yui/build/slider/assets/thumb-bar.gif
create mode 100644 include/javascript/yui/build/slider/assets/thumb-e.gif
create mode 100644 include/javascript/yui/build/slider/assets/thumb-fader.gif
create mode 100644 include/javascript/yui/build/slider/assets/thumb-n.gif
create mode 100644 include/javascript/yui/build/slider/assets/thumb-s.gif
create mode 100644 include/javascript/yui/build/slider/assets/thumb-w.gif
create mode 100644 include/javascript/yui/build/slider/slider-min.js
create mode 100644 include/javascript/yui/build/slider/slider.js
create mode 100644 include/javascript/yui/build/storage/storage-debug.js
create mode 100644 include/javascript/yui/build/storage/storage-min.js
create mode 100644 include/javascript/yui/build/storage/storage.js
create mode 100644 include/javascript/yui/build/stylesheet/stylesheet-debug.js
create mode 100644 include/javascript/yui/build/stylesheet/stylesheet-min.js
create mode 100644 include/javascript/yui/build/stylesheet/stylesheet.js
create mode 100644 include/javascript/yui/build/swf/swf-debug.js
create mode 100644 include/javascript/yui/build/swf/swf-min.js
create mode 100644 include/javascript/yui/build/swf/swf.js
create mode 100644 include/javascript/yui/build/swfdetect/swfdetect-debug.js
create mode 100644 include/javascript/yui/build/swfdetect/swfdetect-min.js
create mode 100644 include/javascript/yui/build/swfdetect/swfdetect.js
create mode 100644 include/javascript/yui/build/swfstore/swf.js
create mode 100644 include/javascript/yui/build/swfstore/swfstore-debug.js
create mode 100644 include/javascript/yui/build/swfstore/swfstore-min.js
create mode 100644 include/javascript/yui/build/swfstore/swfstore.js
create mode 100644 include/javascript/yui/build/swfstore/swfstore.swf
create mode 100644 include/javascript/yui/build/tabview/assets/border_tabs.css
create mode 100644 include/javascript/yui/build/tabview/assets/loading.gif
create mode 100644 include/javascript/yui/build/tabview/assets/skin-sam.css
create mode 100644 include/javascript/yui/build/tabview/assets/skins/sam/tabview-skin.css
create mode 100644 include/javascript/yui/build/tabview/assets/skins/sam/tabview.css
create mode 100644 include/javascript/yui/build/tabview/assets/tabview-core.css
create mode 100644 include/javascript/yui/build/tabview/assets/tabview.css
create mode 100644 include/javascript/yui/build/tabview/tabview-min.js
create mode 100644 include/javascript/yui/build/tabview/tabview.js
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/check0.gif
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/check1.gif
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/check2.gif
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/loading.gif
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/treeview-loading.gif
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/treeview-skin.css
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/treeview-sprite.gif
create mode 100644 include/javascript/yui/build/treeview/assets/skins/sam/treeview.css
create mode 100644 include/javascript/yui/build/treeview/assets/treeview-core.css
create mode 100644 include/javascript/yui/build/treeview/treeview-min.js
create mode 100644 include/javascript/yui/build/treeview/treeview.js
create mode 100644 include/javascript/yui/build/uploader/assets/uploader.swf
create mode 100644 include/javascript/yui/build/uploader/uploader-min.js
create mode 100644 include/javascript/yui/build/uploader/uploader.js
create mode 100644 include/javascript/yui/build/utilities/utilities.js
create mode 100644 include/javascript/yui/build/yahoo-dom-event/yahoo-dom-event.js
create mode 100644 include/javascript/yui/build/yahoo/yahoo-min.js
create mode 100644 include/javascript/yui/build/yahoo/yahoo.js
create mode 100644 include/javascript/yui/build/yuiloader-dom-event/yuiloader-dom-event.js
create mode 100644 include/javascript/yui/build/yuiloader/yuiloader-min.js
create mode 100644 include/javascript/yui/build/yuiloader/yuiloader.js
create mode 100644 include/javascript/yui/build/yuitest/assets/skins/sam/yuitest-skin.css
create mode 100644 include/javascript/yui/build/yuitest/assets/skins/sam/yuitest.css
create mode 100644 include/javascript/yui/build/yuitest/assets/testlogger.css
create mode 100644 include/javascript/yui/build/yuitest/assets/yuitest-core.css
create mode 100644 include/javascript/yui/build/yuitest/yuitest-min.js
create mode 100644 include/javascript/yui/build/yuitest/yuitest.js
create mode 100644 include/javascript/yui/build/yuitest/yuitest_core-min.js
create mode 100644 include/javascript/yui/build/yuitest/yuitest_core.js
create mode 100644 include/javascript/yui/ext/yui-ext.js
create mode 100644 include/javascript/yui/index.html
create mode 100644 include/javascript/yui/ygDDList.js
create mode 100644 include/javascript/yui3/README
create mode 100644 include/javascript/yui3/assets/bg_hd.gif
create mode 100644 include/javascript/yui3/assets/bullet-box6x6.gif
create mode 100644 include/javascript/yui3/assets/bullet4x4.png
create mode 100644 include/javascript/yui3/assets/cheatsheet-shadow.jpg
create mode 100644 include/javascript/yui3/assets/cheatsheet-thumbnail.png
create mode 100644 include/javascript/yui3/assets/download-arrow.png
create mode 100644 include/javascript/yui3/assets/dpSyntaxHighlighter.css
create mode 100644 include/javascript/yui3/assets/dpSyntaxHighlighter.js
create mode 100644 include/javascript/yui3/assets/example-hd-bg.gif
create mode 100644 include/javascript/yui3/assets/gradient-ex-box.png
create mode 100644 include/javascript/yui3/assets/gradient-mod.png
create mode 100644 include/javascript/yui3/assets/gradient-promo.png
create mode 100644 include/javascript/yui3/assets/logo.gif
create mode 100644 include/javascript/yui3/assets/syntax.js
create mode 100644 include/javascript/yui3/assets/title_h_bg.gif
create mode 100644 include/javascript/yui3/assets/yui-candy.jpg
create mode 100644 include/javascript/yui3/assets/yui.css
create mode 100644 include/javascript/yui3/assets/yui.gif
create mode 100644 include/javascript/yui3/assets/yuiDistribution.css
create mode 100644 include/javascript/yui3/build/anim/anim-base-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-base.js
create mode 100644 include/javascript/yui3/build/anim/anim-color-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-color.js
create mode 100644 include/javascript/yui3/build/anim/anim-curve-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-curve.js
create mode 100644 include/javascript/yui3/build/anim/anim-easing-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-easing.js
create mode 100644 include/javascript/yui3/build/anim/anim-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-node-plugin-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-node-plugin.js
create mode 100644 include/javascript/yui3/build/anim/anim-scroll-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-scroll.js
create mode 100644 include/javascript/yui3/build/anim/anim-xy-min.js
create mode 100644 include/javascript/yui3/build/anim/anim-xy.js
create mode 100644 include/javascript/yui3/build/anim/anim.js
create mode 100644 include/javascript/yui3/build/assets/skins/sam/bg.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/console-filters.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/console.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/horizontal-menu-submenu-indicator.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/horizontal-menu-submenu-toggle.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/node-menunav.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/overlay.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/rail-classic-x.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/rail-classic-y.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/skin.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/slider.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/sprite.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/thumb-classic-x.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/thumb-classic-y.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/vertical-menu-submenu-indicator.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/warn_error.png
create mode 100644 include/javascript/yui3/build/assets/skins/sam/widget-stack.css
create mode 100644 include/javascript/yui3/build/assets/skins/sam/widget.css
create mode 100644 include/javascript/yui3/build/async-queue/async-queue-min.js
create mode 100644 include/javascript/yui3/build/async-queue/async-queue.js
create mode 100644 include/javascript/yui3/build/attribute/attribute-base-min.js
create mode 100644 include/javascript/yui3/build/attribute/attribute-base.js
create mode 100644 include/javascript/yui3/build/attribute/attribute-complex-min.js
create mode 100644 include/javascript/yui3/build/attribute/attribute-complex.js
create mode 100644 include/javascript/yui3/build/attribute/attribute-min.js
create mode 100644 include/javascript/yui3/build/attribute/attribute.js
create mode 100644 include/javascript/yui3/build/base/base-base-min.js
create mode 100644 include/javascript/yui3/build/base/base-base.js
create mode 100644 include/javascript/yui3/build/base/base-build-min.js
create mode 100644 include/javascript/yui3/build/base/base-build.js
create mode 100644 include/javascript/yui3/build/base/base-min.js
create mode 100644 include/javascript/yui3/build/base/base-pluginhost-min.js
create mode 100644 include/javascript/yui3/build/base/base-pluginhost.js
create mode 100644 include/javascript/yui3/build/base/base.js
create mode 100644 include/javascript/yui3/build/cache/cache-min.js
create mode 100644 include/javascript/yui3/build/cache/cache.js
create mode 100644 include/javascript/yui3/build/classnamemanager/classnamemanager-min.js
create mode 100644 include/javascript/yui3/build/classnamemanager/classnamemanager.js
create mode 100644 include/javascript/yui3/build/collection/collection-min.js
create mode 100644 include/javascript/yui3/build/collection/collection.js
create mode 100644 include/javascript/yui3/build/compat/compat-min.js
create mode 100644 include/javascript/yui3/build/compat/compat.js
create mode 100644 include/javascript/yui3/build/console/assets/console-core.css
create mode 100644 include/javascript/yui3/build/console/assets/console-filters-core.css
create mode 100644 include/javascript/yui3/build/console/assets/skins/sam/bg.png
create mode 100644 include/javascript/yui3/build/console/assets/skins/sam/console-filters-skin.css
create mode 100644 include/javascript/yui3/build/console/assets/skins/sam/console-filters.css
create mode 100644 include/javascript/yui3/build/console/assets/skins/sam/console-skin.css
create mode 100644 include/javascript/yui3/build/console/assets/skins/sam/console.css
create mode 100644 include/javascript/yui3/build/console/assets/skins/sam/warn_error.png
create mode 100644 include/javascript/yui3/build/console/assets/warn_error.png
create mode 100644 include/javascript/yui3/build/console/console-filters-min.js
create mode 100644 include/javascript/yui3/build/console/console-filters.js
create mode 100644 include/javascript/yui3/build/console/console-min.js
create mode 100644 include/javascript/yui3/build/console/console.js
create mode 100644 include/javascript/yui3/build/cookie/cookie-min.js
create mode 100644 include/javascript/yui3/build/cookie/cookie.js
create mode 100644 include/javascript/yui3/build/cssbase/base-context-min.css
create mode 100644 include/javascript/yui3/build/cssbase/base-context.css
create mode 100644 include/javascript/yui3/build/cssbase/base-min.css
create mode 100644 include/javascript/yui3/build/cssbase/base.css
create mode 100644 include/javascript/yui3/build/cssfonts/fonts-context-min.css
create mode 100644 include/javascript/yui3/build/cssfonts/fonts-context.css
create mode 100644 include/javascript/yui3/build/cssfonts/fonts-min.css
create mode 100644 include/javascript/yui3/build/cssfonts/fonts.css
create mode 100644 include/javascript/yui3/build/cssgrids/grids-context-min.css
create mode 100644 include/javascript/yui3/build/cssgrids/grids-context.css
create mode 100644 include/javascript/yui3/build/cssgrids/grids-min.css
create mode 100644 include/javascript/yui3/build/cssgrids/grids.css
create mode 100644 include/javascript/yui3/build/cssreset/reset-context-min.css
create mode 100644 include/javascript/yui3/build/cssreset/reset-context.css
create mode 100644 include/javascript/yui3/build/cssreset/reset-min.css
create mode 100644 include/javascript/yui3/build/cssreset/reset.css
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-array-min.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-array.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-base-min.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-base.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-json-min.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-json.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-min.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-text-min.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-text.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-xml-min.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema-xml.js
create mode 100644 include/javascript/yui3/build/dataschema/dataschema.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-arrayschema-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-arrayschema.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-cache-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-cache.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-function-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-function.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-get-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-get.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-io-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-io.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-jsonschema-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-jsonschema.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-local-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-local.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-polling-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-polling.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-textschema-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-textschema.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-xmlschema-min.js
create mode 100644 include/javascript/yui3/build/datasource/datasource-xmlschema.js
create mode 100644 include/javascript/yui3/build/datasource/datasource.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-date-format-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-date-format.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-date-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-date-parse-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-date-parse.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-date.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-number-format-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-number-format.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-number-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-number-parse-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-number-parse.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-number.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-xml-format-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-xml-format.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-xml-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-xml-parse-min.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-xml-parse.js
create mode 100644 include/javascript/yui3/build/datatype/datatype-xml.js
create mode 100644 include/javascript/yui3/build/datatype/datatype.js
create mode 100644 include/javascript/yui3/build/dd/dd-constrain-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-constrain.js
create mode 100644 include/javascript/yui3/build/dd/dd-ddm-base-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-ddm-base.js
create mode 100644 include/javascript/yui3/build/dd/dd-ddm-drop-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-ddm-drop.js
create mode 100644 include/javascript/yui3/build/dd/dd-ddm-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-ddm.js
create mode 100644 include/javascript/yui3/build/dd/dd-drag-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-drag.js
create mode 100644 include/javascript/yui3/build/dd/dd-drop-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-drop-plugin-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-drop-plugin.js
create mode 100644 include/javascript/yui3/build/dd/dd-drop.js
create mode 100644 include/javascript/yui3/build/dd/dd-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-plugin-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-plugin.js
create mode 100644 include/javascript/yui3/build/dd/dd-proxy-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-proxy.js
create mode 100644 include/javascript/yui3/build/dd/dd-scroll-min.js
create mode 100644 include/javascript/yui3/build/dd/dd-scroll.js
create mode 100644 include/javascript/yui3/build/dd/dd.js
create mode 100644 include/javascript/yui3/build/dom/dom-base-min.js
create mode 100644 include/javascript/yui3/build/dom/dom-base.js
create mode 100644 include/javascript/yui3/build/dom/dom-min.js
create mode 100644 include/javascript/yui3/build/dom/dom-screen-min.js
create mode 100644 include/javascript/yui3/build/dom/dom-screen.js
create mode 100644 include/javascript/yui3/build/dom/dom-style-min.js
create mode 100644 include/javascript/yui3/build/dom/dom-style.js
create mode 100644 include/javascript/yui3/build/dom/dom.js
create mode 100644 include/javascript/yui3/build/dom/selector-css2-min.js
create mode 100644 include/javascript/yui3/build/dom/selector-css2.js
create mode 100644 include/javascript/yui3/build/dom/selector-css3-min.js
create mode 100644 include/javascript/yui3/build/dom/selector-css3.js
create mode 100644 include/javascript/yui3/build/dom/selector-min.js
create mode 100644 include/javascript/yui3/build/dom/selector-native-min.js
create mode 100644 include/javascript/yui3/build/dom/selector-native.js
create mode 100644 include/javascript/yui3/build/dom/selector.js
create mode 100644 include/javascript/yui3/build/dump/dump-min.js
create mode 100644 include/javascript/yui3/build/dump/dump.js
create mode 100644 include/javascript/yui3/build/event-custom/event-custom-base-min.js
create mode 100644 include/javascript/yui3/build/event-custom/event-custom-base.js
create mode 100644 include/javascript/yui3/build/event-custom/event-custom-complex-min.js
create mode 100644 include/javascript/yui3/build/event-custom/event-custom-complex.js
create mode 100644 include/javascript/yui3/build/event-custom/event-custom-min.js
create mode 100644 include/javascript/yui3/build/event-custom/event-custom.js
create mode 100644 include/javascript/yui3/build/event-simulate/event-simulate-min.js
create mode 100644 include/javascript/yui3/build/event-simulate/event-simulate.js
create mode 100644 include/javascript/yui3/build/event/event-base-min.js
create mode 100644 include/javascript/yui3/build/event/event-base.js
create mode 100644 include/javascript/yui3/build/event/event-delegate-min.js
create mode 100644 include/javascript/yui3/build/event/event-delegate.js
create mode 100644 include/javascript/yui3/build/event/event-focus-min.js
create mode 100644 include/javascript/yui3/build/event/event-focus.js
create mode 100644 include/javascript/yui3/build/event/event-key-min.js
create mode 100644 include/javascript/yui3/build/event/event-key.js
create mode 100644 include/javascript/yui3/build/event/event-min.js
create mode 100644 include/javascript/yui3/build/event/event-mouseenter-min.js
create mode 100644 include/javascript/yui3/build/event/event-mouseenter.js
create mode 100644 include/javascript/yui3/build/event/event-mousewheel-min.js
create mode 100644 include/javascript/yui3/build/event/event-mousewheel.js
create mode 100644 include/javascript/yui3/build/event/event-resize-min.js
create mode 100644 include/javascript/yui3/build/event/event-resize.js
create mode 100644 include/javascript/yui3/build/event/event.js
create mode 100644 include/javascript/yui3/build/get/get-min.js
create mode 100644 include/javascript/yui3/build/get/get.js
create mode 100644 include/javascript/yui3/build/history/history-min.js
create mode 100644 include/javascript/yui3/build/history/history.js
create mode 100644 include/javascript/yui3/build/imageloader/imageloader-min.js
create mode 100644 include/javascript/yui3/build/imageloader/imageloader.js
create mode 100644 include/javascript/yui3/build/io/io-base-min.js
create mode 100644 include/javascript/yui3/build/io/io-base.js
create mode 100644 include/javascript/yui3/build/io/io-form-min.js
create mode 100644 include/javascript/yui3/build/io/io-form.js
create mode 100644 include/javascript/yui3/build/io/io-min.js
create mode 100644 include/javascript/yui3/build/io/io-queue-min.js
create mode 100644 include/javascript/yui3/build/io/io-queue.js
create mode 100644 include/javascript/yui3/build/io/io-upload-iframe-min.js
create mode 100644 include/javascript/yui3/build/io/io-upload-iframe.js
create mode 100644 include/javascript/yui3/build/io/io-xdr-min.js
create mode 100644 include/javascript/yui3/build/io/io-xdr.js
create mode 100644 include/javascript/yui3/build/io/io.js
create mode 100644 include/javascript/yui3/build/io/io.swf
create mode 100644 include/javascript/yui3/build/json/json-min.js
create mode 100644 include/javascript/yui3/build/json/json-parse-min.js
create mode 100644 include/javascript/yui3/build/json/json-parse.js
create mode 100644 include/javascript/yui3/build/json/json-stringify-min.js
create mode 100644 include/javascript/yui3/build/json/json-stringify.js
create mode 100644 include/javascript/yui3/build/json/json.js
create mode 100644 include/javascript/yui3/build/loader/loader-min.js
create mode 100644 include/javascript/yui3/build/loader/loader.js
create mode 100644 include/javascript/yui3/build/node-focusmanager/node-focusmanager-min.js
create mode 100644 include/javascript/yui3/build/node-focusmanager/node-focusmanager.js
create mode 100644 include/javascript/yui3/build/node-menunav/assets/node-menunav-core.css
create mode 100644 include/javascript/yui3/build/node-menunav/assets/skins/sam/horizontal-menu-submenu-indicator.png
create mode 100644 include/javascript/yui3/build/node-menunav/assets/skins/sam/horizontal-menu-submenu-toggle.png
create mode 100644 include/javascript/yui3/build/node-menunav/assets/skins/sam/node-menunav-skin.css
create mode 100644 include/javascript/yui3/build/node-menunav/assets/skins/sam/node-menunav.css
create mode 100644 include/javascript/yui3/build/node-menunav/assets/skins/sam/vertical-menu-submenu-indicator.png
create mode 100644 include/javascript/yui3/build/node-menunav/node-menunav-min.js
create mode 100644 include/javascript/yui3/build/node-menunav/node-menunav.js
create mode 100644 include/javascript/yui3/build/node/node-aria-min.js
create mode 100644 include/javascript/yui3/build/node/node-aria.js
create mode 100644 include/javascript/yui3/build/node/node-base-min.js
create mode 100644 include/javascript/yui3/build/node/node-base.js
create mode 100644 include/javascript/yui3/build/node/node-event-delegate-min.js
create mode 100644 include/javascript/yui3/build/node/node-event-delegate.js
create mode 100644 include/javascript/yui3/build/node/node-event-simulate-min.js
create mode 100644 include/javascript/yui3/build/node/node-event-simulate.js
create mode 100644 include/javascript/yui3/build/node/node-min.js
create mode 100644 include/javascript/yui3/build/node/node-pluginhost-min.js
create mode 100644 include/javascript/yui3/build/node/node-pluginhost.js
create mode 100644 include/javascript/yui3/build/node/node-screen-min.js
create mode 100644 include/javascript/yui3/build/node/node-screen.js
create mode 100644 include/javascript/yui3/build/node/node-style-min.js
create mode 100644 include/javascript/yui3/build/node/node-style.js
create mode 100644 include/javascript/yui3/build/node/node.js
create mode 100644 include/javascript/yui3/build/oop/oop-min.js
create mode 100644 include/javascript/yui3/build/oop/oop.js
create mode 100644 include/javascript/yui3/build/overlay/assets/overlay-core.css
create mode 100644 include/javascript/yui3/build/overlay/assets/skins/sam/overlay-skin.css
create mode 100644 include/javascript/yui3/build/overlay/assets/skins/sam/overlay.css
create mode 100644 include/javascript/yui3/build/overlay/overlay-min.js
create mode 100644 include/javascript/yui3/build/overlay/overlay.js
create mode 100644 include/javascript/yui3/build/plugin/plugin-min.js
create mode 100644 include/javascript/yui3/build/plugin/plugin.js
create mode 100644 include/javascript/yui3/build/pluginhost/pluginhost-min.js
create mode 100644 include/javascript/yui3/build/pluginhost/pluginhost.js
create mode 100644 include/javascript/yui3/build/profiler/profiler-min.js
create mode 100644 include/javascript/yui3/build/profiler/profiler.js
create mode 100644 include/javascript/yui3/build/queue-promote/queue-promote-min.js
create mode 100644 include/javascript/yui3/build/queue-promote/queue-promote.js
create mode 100644 include/javascript/yui3/build/slider/assets/skins/sam/rail-classic-x.png
create mode 100644 include/javascript/yui3/build/slider/assets/skins/sam/rail-classic-y.png
create mode 100644 include/javascript/yui3/build/slider/assets/skins/sam/slider-skin.css
create mode 100644 include/javascript/yui3/build/slider/assets/skins/sam/slider.css
create mode 100644 include/javascript/yui3/build/slider/assets/skins/sam/thumb-classic-x.png
create mode 100644 include/javascript/yui3/build/slider/assets/skins/sam/thumb-classic-y.png
create mode 100644 include/javascript/yui3/build/slider/assets/slider-core.css
create mode 100644 include/javascript/yui3/build/slider/slider-min.js
create mode 100644 include/javascript/yui3/build/slider/slider.js
create mode 100644 include/javascript/yui3/build/stylesheet/stylesheet-min.js
create mode 100644 include/javascript/yui3/build/stylesheet/stylesheet.js
create mode 100644 include/javascript/yui3/build/substitute/substitute-min.js
create mode 100644 include/javascript/yui3/build/substitute/substitute.js
create mode 100644 include/javascript/yui3/build/test/assets/test-console.css
create mode 100644 include/javascript/yui3/build/test/test-min.js
create mode 100644 include/javascript/yui3/build/test/test.js
create mode 100644 include/javascript/yui3/build/widget/assets/skins/sam/widget-skin.css
create mode 100644 include/javascript/yui3/build/widget/assets/skins/sam/widget-stack-skin.css
create mode 100644 include/javascript/yui3/build/widget/assets/skins/sam/widget-stack.css
create mode 100644 include/javascript/yui3/build/widget/assets/skins/sam/widget.css
create mode 100644 include/javascript/yui3/build/widget/assets/widget-core.css
create mode 100644 include/javascript/yui3/build/widget/assets/widget-stack-core.css
create mode 100644 include/javascript/yui3/build/widget/widget-min.js
create mode 100644 include/javascript/yui3/build/widget/widget-position-ext-min.js
create mode 100644 include/javascript/yui3/build/widget/widget-position-ext.js
create mode 100644 include/javascript/yui3/build/widget/widget-position-min.js
create mode 100644 include/javascript/yui3/build/widget/widget-position.js
create mode 100644 include/javascript/yui3/build/widget/widget-stack-min.js
create mode 100644 include/javascript/yui3/build/widget/widget-stack.js
create mode 100644 include/javascript/yui3/build/widget/widget-stdmod-min.js
create mode 100644 include/javascript/yui3/build/widget/widget-stdmod.js
create mode 100644 include/javascript/yui3/build/widget/widget.js
create mode 100644 include/javascript/yui3/build/yui-base/yui-base-min.js
create mode 100644 include/javascript/yui3/build/yui-base/yui-base.js
create mode 100644 include/javascript/yui3/build/yui/get-min.js
create mode 100644 include/javascript/yui3/build/yui/get.js
create mode 100644 include/javascript/yui3/build/yui/yui-base-min.js
create mode 100644 include/javascript/yui3/build/yui/yui-base.js
create mode 100644 include/javascript/yui3/build/yui/yui-later-min.js
create mode 100644 include/javascript/yui3/build/yui/yui-later.js
create mode 100644 include/javascript/yui3/build/yui/yui-log-min.js
create mode 100644 include/javascript/yui3/build/yui/yui-log.js
create mode 100644 include/javascript/yui3/build/yui/yui-min.js
create mode 100644 include/javascript/yui3/build/yui/yui.js
create mode 100644 include/javascript/yui3/index.html
create mode 100644 include/jsolait/LICENSE
create mode 100644 include/jsolait/copying.txt
create mode 100644 include/jsolait/init.js
create mode 100644 include/jsolait/lib/codecs.js
create mode 100644 include/jsolait/lib/crypto.js
create mode 100644 include/jsolait/lib/jsonrpc.js
create mode 100644 include/jsolait/lib/jsonrpclite.js
create mode 100644 include/jsolait/lib/lang.js
create mode 100644 include/jsolait/lib/langlite.js
create mode 100644 include/jsolait/lib/urllib.js
create mode 100644 include/jsolait/lib/xml.js
create mode 100644 include/jsolait/lib/xmlrpc.js
create mode 100644 include/jsolait/missingmixin.js
create mode 100644 include/json_config.php
create mode 100644 include/language/en_us.lang.php
create mode 100644 include/language/en_us.notify_template.html
create mode 100644 include/language/jsLanguage.php
create mode 100644 include/modules.php
create mode 100644 include/nusoap/changelog
create mode 100644 include/nusoap/class.nusoap_base.php
create mode 100644 include/nusoap/class.soap_fault.php
create mode 100644 include/nusoap/class.soap_parser.php
create mode 100644 include/nusoap/class.soap_server.php
create mode 100644 include/nusoap/class.soap_transport_http.php
create mode 100644 include/nusoap/class.soap_val.php
create mode 100644 include/nusoap/class.soapclient.php
create mode 100644 include/nusoap/class.wsdl.php
create mode 100644 include/nusoap/class.wsdlcache.php
create mode 100644 include/nusoap/class.xmlschema.php
create mode 100644 include/nusoap/license.txt
create mode 100644 include/nusoap/nusoap.php
create mode 100644 include/nusoap/nusoapmime.php
create mode 100644 include/pclzip/gnu-lgpl.txt
create mode 100644 include/pclzip/pclzip.lib.php
create mode 100644 include/pclzip/readme.txt
create mode 100644 include/phpmailer/README
create mode 100644 include/phpmailer/class.phpmailer.php
create mode 100644 include/phpmailer/class.smtp.php
create mode 100644 include/phpmailer/language/phpmailer.lang-ar.php
create mode 100644 include/phpmailer/language/phpmailer.lang-br.php
create mode 100644 include/phpmailer/language/phpmailer.lang-ca.php
create mode 100644 include/phpmailer/language/phpmailer.lang-cz.php
create mode 100644 include/phpmailer/language/phpmailer.lang-de.php
create mode 100644 include/phpmailer/language/phpmailer.lang-dk.php
create mode 100644 include/phpmailer/language/phpmailer.lang-en.php
create mode 100644 include/phpmailer/language/phpmailer.lang-es.php
create mode 100644 include/phpmailer/language/phpmailer.lang-et.php
create mode 100644 include/phpmailer/language/phpmailer.lang-fi.php
create mode 100644 include/phpmailer/language/phpmailer.lang-fo.php
create mode 100644 include/phpmailer/language/phpmailer.lang-fr.php
create mode 100644 include/phpmailer/language/phpmailer.lang-hu.php
create mode 100644 include/phpmailer/language/phpmailer.lang-it.php
create mode 100644 include/phpmailer/language/phpmailer.lang-ja.php
create mode 100644 include/phpmailer/language/phpmailer.lang-nl.php
create mode 100644 include/phpmailer/language/phpmailer.lang-no.php
create mode 100644 include/phpmailer/language/phpmailer.lang-pl.php
create mode 100644 include/phpmailer/language/phpmailer.lang-ro.php
create mode 100644 include/phpmailer/language/phpmailer.lang-ru.php
create mode 100644 include/phpmailer/language/phpmailer.lang-se.php
create mode 100644 include/phpmailer/language/phpmailer.lang-tr.php
create mode 100644 include/phpmailer/license.txt
create mode 100644 include/reCaptcha/LICENSE
create mode 100644 include/reCaptcha/README
create mode 100644 include/reCaptcha/recaptchalib.php
create mode 100644 include/resource/Observers/ResourceObserver.php
create mode 100644 include/resource/Observers/SoapResourceObserver.php
create mode 100644 include/resource/Observers/WebResourceObserver.php
create mode 100644 include/resource/ResourceManager.php
create mode 100644 include/tabConfig.php
create mode 100644 include/tabs.php
create mode 100644 include/tcpdf/2dbarcodes.php
create mode 100644 include/tcpdf/CHANGELOG.TXT
create mode 100644 include/tcpdf/LICENSE.TXT
create mode 100644 include/tcpdf/README.TXT
create mode 100644 include/tcpdf/barcodes.php
create mode 100644 include/tcpdf/config/lang/eng.php
create mode 100644 include/tcpdf/config/lang/ita.php
create mode 100644 include/tcpdf/config/tcpdf_config.php
create mode 100644 include/tcpdf/config/tcpdf_config_alt.php
create mode 100644 include/tcpdf/fonts/uni2cid_ac15.php
create mode 100644 include/tcpdf/fonts/uni2cid_ag15.php
create mode 100644 include/tcpdf/fonts/uni2cid_aj16.php
create mode 100644 include/tcpdf/fonts/uni2cid_ak12.php
create mode 100644 include/tcpdf/fonts/utils/enc/cp1250.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1251.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1252.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1253.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1254.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1255.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1257.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp1258.map
create mode 100644 include/tcpdf/fonts/utils/enc/cp874.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-1.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-11.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-15.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-16.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-2.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-4.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-5.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-7.map
create mode 100644 include/tcpdf/fonts/utils/enc/iso-8859-9.map
create mode 100644 include/tcpdf/fonts/utils/enc/koi8-r.map
create mode 100644 include/tcpdf/fonts/utils/enc/koi8-u.map
create mode 100644 include/tcpdf/fonts/utils/makefont.php
create mode 100644 include/tcpdf/htmlcolors.php
create mode 100644 include/tcpdf/tcpdf.php
create mode 100644 include/tcpdf/unicode_data.php
create mode 100644 include/templates/Template.php
create mode 100644 include/templates/TemplateDragDropChooser.php
create mode 100644 include/templates/TemplateGroupChooser.php
create mode 100644 include/timezone/timezones.php
create mode 100644 include/upload_file.php
create mode 100644 include/utils.php
create mode 100644 include/utils/LogicHook.php
create mode 100644 include/utils/activity_utils.php
create mode 100644 include/utils/array_utils.php
create mode 100644 include/utils/autoloader.php
create mode 100644 include/utils/db_utils.php
create mode 100644 include/utils/encryption_utils.php
create mode 100644 include/utils/external_cache.php
create mode 100644 include/utils/file_utils.php
create mode 100644 include/utils/layout_utils.php
create mode 100644 include/utils/logic_utils.php
create mode 100644 include/utils/mvc_utils.php
create mode 100644 include/utils/php_zip_utils.php
create mode 100644 include/utils/progress_bar_utils.php
create mode 100644 include/utils/security_utils.php
create mode 100644 include/utils/sugar_file_utils.php
create mode 100644 include/utils/zip_utils.php
create mode 100644 include/vCard.php
create mode 100644 include/ytree/ExtNode.php
create mode 100644 include/ytree/Node.php
create mode 100644 include/ytree/Tree.php
create mode 100644 include/ytree/TreeView/HTMLNode.js
create mode 100644 include/ytree/TreeView/MenuNode.js
create mode 100644 include/ytree/TreeView/Node.js
create mode 100644 include/ytree/TreeView/RootNode.js
create mode 100644 include/ytree/TreeView/TaskNode.js
create mode 100644 include/ytree/TreeView/TextNode.js
create mode 100644 include/ytree/TreeView/TreeView.js
create mode 100644 include/ytree/TreeView/anim/TVAnim.js
create mode 100644 include/ytree/TreeView/anim/TVFadeIn.js
create mode 100644 include/ytree/TreeView/anim/TVFadeOut.js
create mode 100644 include/ytree/TreeView/css/check/tree.css
create mode 100644 include/ytree/TreeView/css/default/tree.css
create mode 100644 include/ytree/TreeView/css/folders/tree.css
create mode 100644 include/ytree/TreeView/css/forecasts/tree.css
create mode 100644 include/ytree/TreeView/img/bullet.gif
create mode 100644 include/ytree/TreeView/img/check/Thumbs.db
create mode 100644 include/ytree/TreeView/img/check/check0.gif
create mode 100644 include/ytree/TreeView/img/check/check1.gif
create mode 100644 include/ytree/TreeView/img/check/check2.gif
create mode 100644 include/ytree/TreeView/img/check/lm.gif
create mode 100644 include/ytree/TreeView/img/check/lmh.gif
create mode 100644 include/ytree/TreeView/img/check/ln.gif
create mode 100644 include/ytree/TreeView/img/check/loading.gif
create mode 100644 include/ytree/TreeView/img/check/lp.gif
create mode 100644 include/ytree/TreeView/img/check/lph.gif
create mode 100644 include/ytree/TreeView/img/check/tm.gif
create mode 100644 include/ytree/TreeView/img/check/tmh.gif
create mode 100644 include/ytree/TreeView/img/check/tn.gif
create mode 100644 include/ytree/TreeView/img/check/tp.gif
create mode 100644 include/ytree/TreeView/img/check/tph.gif
create mode 100644 include/ytree/TreeView/img/check/vline.gif
create mode 100644 include/ytree/TreeView/img/default/lm.gif
create mode 100644 include/ytree/TreeView/img/default/lmh.gif
create mode 100644 include/ytree/TreeView/img/default/ln.gif
create mode 100644 include/ytree/TreeView/img/default/loading.gif
create mode 100644 include/ytree/TreeView/img/default/lp.gif
create mode 100644 include/ytree/TreeView/img/default/lph.gif
create mode 100644 include/ytree/TreeView/img/default/tm.gif
create mode 100644 include/ytree/TreeView/img/default/tmh.gif
create mode 100644 include/ytree/TreeView/img/default/tn.gif
create mode 100644 include/ytree/TreeView/img/default/tp.gif
create mode 100644 include/ytree/TreeView/img/default/tph.gif
create mode 100644 include/ytree/TreeView/img/default/vline.gif
create mode 100644 include/ytree/TreeView/img/folders/lm.gif
create mode 100644 include/ytree/TreeView/img/folders/lmh.gif
create mode 100644 include/ytree/TreeView/img/folders/ln.gif
create mode 100644 include/ytree/TreeView/img/folders/loading.gif
create mode 100644 include/ytree/TreeView/img/folders/lp.gif
create mode 100644 include/ytree/TreeView/img/folders/lph.gif
create mode 100644 include/ytree/TreeView/img/folders/minus.gif
create mode 100644 include/ytree/TreeView/img/folders/plus.gif
create mode 100644 include/ytree/TreeView/img/folders/tm.gif
create mode 100644 include/ytree/TreeView/img/folders/tmh.gif
create mode 100644 include/ytree/TreeView/img/folders/tn.gif
create mode 100644 include/ytree/TreeView/img/folders/tp.gif
create mode 100644 include/ytree/TreeView/img/folders/tph.gif
create mode 100644 include/ytree/TreeView/img/folders/vline.gif
create mode 100644 include/ytree/TreeView/img/greybg.png
create mode 100644 include/ytree/TreeView/img/header.gif
create mode 100644 include/ytree/TreeView/img/logo.gif
create mode 100644 include/ytree/TreeView/img/navHover2.png
create mode 100644 include/ytree/TreeView/img/qbottom.png
create mode 100644 include/ytree/TreeView/img/qmiddle.png
create mode 100644 include/ytree/TreeView/img/qtop.png
create mode 100644 include/ytree/TreeView/license.txt
create mode 100644 include/ytree/treeutil.js
create mode 100644 index.php
create mode 100644 install.php
create mode 100644 install/TeamDemoData.php
create mode 100644 install/UploadLangFileCheck.php
create mode 100644 install/UserDemoData.php
create mode 100644 install/checkDBSettings.php
create mode 100644 install/confirmSettings.php
create mode 100644 install/data/disc_client.php
create mode 100644 install/dbConfig.js
create mode 100644 install/dbConfig_a.php
create mode 100644 install/demoData.en_us.php
create mode 100644 install/download_modules.php
create mode 100644 install/download_patches.php
create mode 100644 install/install.css
create mode 100644 install/installCommon.js
create mode 100644 install/installDisabled.php
create mode 100644 install/installHelp.php
create mode 100644 install/installSystemCheck.php
create mode 100644 install/installType.php
create mode 100644 install/install_defaults.php
create mode 100644 install/install_utils.php
create mode 100644 install/language/en_us.lang.php
create mode 100644 install/license.js
create mode 100644 install/license.php
create mode 100644 install/licensePrint.php
create mode 100644 install/oc_convert.js
create mode 100644 install/oc_install.js
create mode 100644 install/performSetup.php
create mode 100644 install/populateSeedData.php
create mode 100644 install/processing.gif
create mode 100644 install/ready.php
create mode 100644 install/register.js
create mode 100644 install/register.php
create mode 100644 install/seed_data/Advanced_Password_SeedData.php
create mode 100644 install/seed_data/quotes_SeedData.php
create mode 100644 install/siteConfig.js
create mode 100644 install/siteConfig_a.php
create mode 100644 install/siteConfig_b.php
create mode 100644 install/systemOptions.php
create mode 100644 install/welcome.php
create mode 100644 json.php
create mode 100644 json_server.php
create mode 100644 jssource/JSGroupings.php
create mode 100644 jssource/jsmin.php
create mode 100644 jssource/minify.php
create mode 100644 jssource/minify_utils.php
create mode 100644 jssource/src_files/include/JSON.js
create mode 100644 jssource/src_files/include/MySugar/javascript/MySugar.js
create mode 100644 jssource/src_files/include/SubPanel/SubPanelTiles.js
create mode 100644 jssource/src_files/include/SugarCharts/Jit/FlashCanvas/canvas2png.js
create mode 100644 jssource/src_files/include/SugarCharts/Jit/FlashCanvas/flashcanvas.js
create mode 100644 jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js
create mode 100644 jssource/src_files/include/SugarCharts/Jit/js/mySugarCharts.js
create mode 100644 jssource/src_files/include/SugarCharts/Jit/js/sugarCharts.js
create mode 100644 jssource/src_files/include/SugarDependentDropdown/javascript/SugarDependentDropdown.js
create mode 100644 jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js
create mode 100644 jssource/src_files/include/SugarFields/Fields/Address/SugarFieldAddress.js
create mode 100644 jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js
create mode 100644 jssource/src_files/include/SugarFields/Fields/Datetimecombo/Datetimecombo.js
create mode 100644 jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js
create mode 100644 jssource/src_files/include/connectors/formatters/default/company_detail.js
create mode 100644 jssource/src_files/include/javascript/calendar.js
create mode 100644 jssource/src_files/include/javascript/cookie.js
create mode 100644 jssource/src_files/include/javascript/dashlets.js
create mode 100644 jssource/src_files/include/javascript/include.js
create mode 100644 jssource/src_files/include/javascript/iscroll.js
create mode 100644 jssource/src_files/include/javascript/jsclass_async.js
create mode 100644 jssource/src_files/include/javascript/jsclass_base.js
create mode 100644 jssource/src_files/include/javascript/menu.js
create mode 100644 jssource/src_files/include/javascript/overlibmws.js
create mode 100644 jssource/src_files/include/javascript/overlibmws_iframe.js
create mode 100644 jssource/src_files/include/javascript/popup_helper.js
create mode 100644 jssource/src_files/include/javascript/popup_parent_helper.js
create mode 100644 jssource/src_files/include/javascript/quickCompose.js
create mode 100644 jssource/src_files/include/javascript/quicksearch.js
create mode 100644 jssource/src_files/include/javascript/report_additionals.js
create mode 100644 jssource/src_files/include/javascript/sugar_3.js
create mode 100644 jssource/src_files/include/javascript/sugar_connection_event_listener.js
create mode 100644 jssource/src_files/include/javascript/sugarwidgets/SugarYUILoader.js
create mode 100644 jssource/src_files/include/javascript/sugarwidgets/SugarYUIWidgets.js
create mode 100644 jssource/src_files/include/javascript/swfobject.js
create mode 100644 jssource/src_files/include/javascript/yui3/assets/dpSyntaxHighlighter.js
create mode 100644 jssource/src_files/include/javascript/yui3/assets/syntax.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-color-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-color.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-curve-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-curve.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-easing-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-easing.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-node-plugin-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-node-plugin.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-scroll-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-scroll.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-xy-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim-xy.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/anim/anim.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/async-queue/async-queue-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/async-queue/async-queue.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/attribute/attribute-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/attribute/attribute-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/attribute/attribute-complex-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/attribute/attribute-complex.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/attribute/attribute-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/attribute/attribute.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-build-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-build.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-pluginhost-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base-pluginhost.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/base/base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/cache/cache-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/cache/cache.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/classnamemanager/classnamemanager-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/classnamemanager/classnamemanager.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/collection/collection-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/collection/collection.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/compat/compat-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/compat/compat.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/console/console-filters-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/console/console-filters.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/console/console-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/console/console.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/cookie/cookie-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/cookie/cookie.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-array-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-array.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-json-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-json.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-text-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-text.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-xml-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-xml.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dataschema/dataschema.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-arrayschema-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-arrayschema.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-cache-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-cache.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-function-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-function.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-get-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-get.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-io-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-io.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-jsonschema-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-jsonschema.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-local-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-local.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-polling-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-polling.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-textschema-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-textschema.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-xmlschema-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource-xmlschema.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datasource/datasource.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-format-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-format.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-parse-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-parse.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-date.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-format-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-format.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-parse-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-parse.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-number.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-format-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-format.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-parse-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-parse.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/datatype/datatype.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-constrain-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-constrain.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-drop-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-drop.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-ddm.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-drag-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-drag.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-drop-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-drop-plugin-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-drop-plugin.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-drop.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-plugin-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-plugin.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-proxy-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-proxy.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-scroll-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd-scroll.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dd/dd.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-screen-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-screen.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-style-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom-style.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/dom.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-css2-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-css2.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-css3-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-css3.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-native-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector-native.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dom/selector.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dump/dump-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/dump/dump.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-complex-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-complex.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-custom/event-custom.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-simulate/event-simulate-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event-simulate/event-simulate.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-delegate-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-delegate.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-focus-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-focus.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-key-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-key.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-mouseenter-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-mouseenter.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-mousewheel-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-mousewheel.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-resize-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event-resize.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/event/event.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/get/get-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/get/get.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/history/history-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/history/history.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/imageloader/imageloader-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/imageloader/imageloader.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-form-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-form.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-queue-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-queue.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-upload-iframe-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-upload-iframe.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-xdr-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io-xdr.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/io/io.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/json/json-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/json/json-parse-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/json/json-parse.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/json/json-stringify-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/json/json-stringify.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/json/json.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/loader/loader-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/loader/loader.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node-focusmanager/node-focusmanager-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node-focusmanager/node-focusmanager.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node-menunav/node-menunav-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node-menunav/node-menunav.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-aria-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-aria.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-event-delegate-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-event-delegate.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-event-simulate-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-event-simulate.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-pluginhost-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-pluginhost.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-screen-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-screen.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-style-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node-style.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/node/node.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/oop/oop-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/oop/oop.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/overlay/overlay-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/overlay/overlay.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/plugin/plugin-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/plugin/plugin.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/pluginhost/pluginhost-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/pluginhost/pluginhost.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/profiler/profiler-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/profiler/profiler.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/queue-promote/queue-promote-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/queue-promote/queue-promote.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/slider/slider-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/slider/slider.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/stylesheet/stylesheet-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/stylesheet/stylesheet.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/substitute/substitute-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/substitute/substitute.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/test/test-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/test/test.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-position-ext-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-position-ext.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-position-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-position.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-stack-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-stack.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-stdmod-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget-stdmod.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/widget/widget.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui-base/yui-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui-base/yui-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/get-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/get.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-base-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-base.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-later-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-later.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-log-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-log.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui-min.js
create mode 100644 jssource/src_files/include/javascript/yui3/build/yui/yui.js
create mode 100644 jssource/src_files/include/jsolait/init.js
create mode 100644 jssource/src_files/include/jsolait/lib/codecs.js
create mode 100644 jssource/src_files/include/jsolait/lib/crypto.js
create mode 100644 jssource/src_files/include/jsolait/lib/jsonrpc.js
create mode 100644 jssource/src_files/include/jsolait/lib/jsonrpclite.js
create mode 100644 jssource/src_files/include/jsolait/lib/lang.js
create mode 100644 jssource/src_files/include/jsolait/lib/langlite.js
create mode 100644 jssource/src_files/include/jsolait/lib/urllib.js
create mode 100644 jssource/src_files/include/jsolait/lib/xml.js
create mode 100644 jssource/src_files/include/jsolait/lib/xmlrpc.js
create mode 100644 jssource/src_files/include/jsolait/missingmixin.js
create mode 100644 jssource/src_files/include/ytree/TreeView/HTMLNode.js
create mode 100644 jssource/src_files/include/ytree/TreeView/MenuNode.js
create mode 100644 jssource/src_files/include/ytree/TreeView/Node.js
create mode 100644 jssource/src_files/include/ytree/TreeView/RootNode.js
create mode 100644 jssource/src_files/include/ytree/TreeView/TaskNode.js
create mode 100644 jssource/src_files/include/ytree/TreeView/TextNode.js
create mode 100644 jssource/src_files/include/ytree/TreeView/TreeView.js
create mode 100644 jssource/src_files/include/ytree/TreeView/anim/TVAnim.js
create mode 100644 jssource/src_files/include/ytree/TreeView/anim/TVFadeIn.js
create mode 100644 jssource/src_files/include/ytree/TreeView/anim/TVFadeOut.js
create mode 100644 jssource/src_files/include/ytree/treeutil.js
create mode 100644 jssource/src_files/install/dbConfig.js
create mode 100644 jssource/src_files/install/installCommon.js
create mode 100644 jssource/src_files/install/license.js
create mode 100644 jssource/src_files/install/oc_convert.js
create mode 100644 jssource/src_files/install/oc_install.js
create mode 100644 jssource/src_files/install/register.js
create mode 100644 jssource/src_files/install/siteConfig.js
create mode 100644 jssource/src_files/modules/ACLRoles/ACLRoles.js
create mode 100644 jssource/src_files/modules/Accounts/Account.js
create mode 100644 jssource/src_files/modules/Administration/javascript/Administration.js
create mode 100644 jssource/src_files/modules/Administration/javascript/Async.js
create mode 100644 jssource/src_files/modules/Campaigns/DetailView.js
create mode 100644 jssource/src_files/modules/Campaigns/WebToLead.js
create mode 100644 jssource/src_files/modules/Campaigns/wizard.js
create mode 100644 jssource/src_files/modules/Connectors/Connector.js
create mode 100644 jssource/src_files/modules/Contacts/Contact.js
create mode 100644 jssource/src_files/modules/Currencies/EditView.js
create mode 100644 jssource/src_files/modules/Documents/documents.js
create mode 100644 jssource/src_files/modules/EAPM/EAPMEdit.js
create mode 100644 jssource/src_files/modules/EmailTemplates/EmailTemplate.js
create mode 100644 jssource/src_files/modules/Home/about.js
create mode 100644 jssource/src_files/modules/InboundEmail/InboundEmail.js
create mode 100644 jssource/src_files/modules/Leads/Lead.js
create mode 100644 jssource/src_files/modules/Meetings/jsclass_scheduler.js
create mode 100644 jssource/src_files/modules/MergeRecords/Merge.js
create mode 100644 jssource/src_files/modules/Project/Project.js
create mode 100644 jssource/src_files/modules/ProjectTask/ProjectTask.js
create mode 100644 jssource/src_files/modules/Studio/JSTransaction.js
create mode 100644 jssource/src_files/modules/Studio/studio.js
create mode 100644 jssource/src_files/modules/Studio/studiodd.js
create mode 100644 jssource/src_files/modules/Studio/studiotabgroups.js
create mode 100644 jssource/src_files/modules/Studio/ygDDListStudio.js
create mode 100644 jssource/src_files/modules/UpgradeWizard/upgradeWizard.js
create mode 100644 jssource/src_files/modules/Users/DetailView.js
create mode 100644 jssource/src_files/modules/Users/PasswordRequirementBox.js
create mode 100644 jssource/src_files/modules/Users/User.js
create mode 100644 jssource/src_files/modules/Users/login.js
create mode 100644 jssource/src_files/service/utils/SugarRest.js
create mode 100644 jssource/src_files/themes/Sugar5/js/style.js
create mode 100644 jssource/src_files/themes/default/js/style.js
create mode 100644 leadCapture.php
create mode 100644 log4php/LoggerManager.php
create mode 100644 log_file_restricted.html
create mode 100644 maintenance.php
create mode 100644 metadata/accounts_bugsMetaData.php
create mode 100644 metadata/accounts_casesMetaData.php
create mode 100644 metadata/accounts_contactsMetaData.php
create mode 100644 metadata/accounts_opportunitiesMetaData.php
create mode 100644 metadata/acl_roles_actionsMetaData.php
create mode 100644 metadata/acl_roles_usersMetaData.php
create mode 100644 metadata/addressBookMetaData.php
create mode 100644 metadata/audit_templateMetaData.php
create mode 100644 metadata/calls_contactsMetaData.php
create mode 100644 metadata/calls_leadsMetaData.php
create mode 100644 metadata/calls_usersMetaData.php
create mode 100644 metadata/cases_bugsMetaData.php
create mode 100644 metadata/configMetaData.php
create mode 100644 metadata/contacts_bugsMetaData.php
create mode 100644 metadata/contacts_casesMetaData.php
create mode 100644 metadata/contacts_usersMetaData.php
create mode 100644 metadata/custom_fieldsMetaData.php
create mode 100644 metadata/documents_accountsMetaData.php
create mode 100644 metadata/documents_bugsMetaData.php
create mode 100644 metadata/documents_casesMetaData.php
create mode 100644 metadata/documents_contactsMetaData.php
create mode 100644 metadata/documents_opportunitiesMetaData.php
create mode 100644 metadata/email_addressesMetaData.php
create mode 100644 metadata/email_cacheMetaData.php
create mode 100644 metadata/email_marketing_prospect_listsMetaData.php
create mode 100644 metadata/emails_beansMetaData.php
create mode 100644 metadata/fields_meta_dataMetaData.php
create mode 100644 metadata/foldersMetaData.php
create mode 100644 metadata/import_mapsMetaData.php
create mode 100644 metadata/inboundEmail_autoreplyMetaData.php
create mode 100644 metadata/inboundEmail_cacheTimestampMetaData.php
create mode 100644 metadata/kbdocuments_views_ratingsMetaData.php
create mode 100644 metadata/linked_documentsMetaData.php
create mode 100644 metadata/meetings_contactsMetaData.php
create mode 100644 metadata/meetings_leadsMetaData.php
create mode 100644 metadata/meetings_usersMetaData.php
create mode 100644 metadata/opportunities_contactsMetaData.php
create mode 100644 metadata/outboundEmailMetaData.php
create mode 100644 metadata/project_bugsMetaData.php
create mode 100644 metadata/project_casesMetaData.php
create mode 100644 metadata/project_productsMetaData.php
create mode 100644 metadata/project_relationMetaData.php
create mode 100644 metadata/project_task_project_tasksMetaData.php
create mode 100644 metadata/projects_accountsMetaData.php
create mode 100644 metadata/projects_contactsMetaData.php
create mode 100644 metadata/projects_opportunitiesMetaData.php
create mode 100644 metadata/projects_quotesMetaData.php
create mode 100644 metadata/prospect_list_campaignsMetaData.php
create mode 100644 metadata/prospect_lists_prospectsMetaData.php
create mode 100644 metadata/queues_beansMetaData.php
create mode 100644 metadata/queues_queueMetaData.php
create mode 100644 metadata/roles_modulesMetaData.php
create mode 100644 metadata/roles_usersMetaData.php
create mode 100644 metadata/schedulers_timesMetaData.php
create mode 100644 metadata/user_feedsMetaData.php
create mode 100644 metadata/usersMetaData.php
create mode 100644 metadata/users_last_importMetaData.php
create mode 100644 metadata/users_passwordLinkMetaData.php
create mode 100644 metadata/users_signaturesMetaData.php
create mode 100644 metagen.php
create mode 100644 modules/ACL/ACLController.php
create mode 100644 modules/ACL/ACLJSController.php
create mode 100644 modules/ACL/Forms.php
create mode 100644 modules/ACL/List.php
create mode 100644 modules/ACL/Menu.php
create mode 100644 modules/ACL/Save.php
create mode 100644 modules/ACL/install_actions.php
create mode 100644 modules/ACL/language/en_us.lang.php
create mode 100644 modules/ACL/metadata/subpaneldefs.php
create mode 100644 modules/ACL/remove_actions.php
create mode 100644 modules/ACL/vardefs.php
create mode 100644 modules/ACLActions/ACLAction.php
create mode 100644 modules/ACLActions/Forms.php
create mode 100644 modules/ACLActions/Menu.php
create mode 100644 modules/ACLActions/actiondefs.php
create mode 100644 modules/ACLActions/language/en_us.lang.php
create mode 100644 modules/ACLActions/metadata/subpaneldefs.php
create mode 100644 modules/ACLActions/vardefs.php
create mode 100644 modules/ACLRoles/ACLRole.php
create mode 100644 modules/ACLRoles/ACLRoles.js
create mode 100644 modules/ACLRoles/Delete.php
create mode 100644 modules/ACLRoles/DetailUserRole.php
create mode 100644 modules/ACLRoles/DetailView.php
create mode 100644 modules/ACLRoles/DetailView.tpl
create mode 100644 modules/ACLRoles/DetailViewBody.tpl
create mode 100644 modules/ACLRoles/DetailViewUser.tpl
create mode 100644 modules/ACLRoles/EditAllBody.tpl
create mode 100644 modules/ACLRoles/EditRole.php
create mode 100644 modules/ACLRoles/EditRole.tpl
create mode 100644 modules/ACLRoles/EditView.php
create mode 100644 modules/ACLRoles/EditView.tpl
create mode 100644 modules/ACLRoles/EditViewBody.tpl
create mode 100644 modules/ACLRoles/Forms.php
create mode 100644 modules/ACLRoles/ListUsers.php
create mode 100644 modules/ACLRoles/Menu.php
create mode 100644 modules/ACLRoles/Popup_picker.html
create mode 100644 modules/ACLRoles/Popup_picker.php
create mode 100644 modules/ACLRoles/Save.php
create mode 100644 modules/ACLRoles/language/en_us.lang.php
create mode 100644 modules/ACLRoles/metadata/SearchFields.php
create mode 100644 modules/ACLRoles/metadata/listviewdefs.php
create mode 100644 modules/ACLRoles/metadata/popupdefs.php
create mode 100644 modules/ACLRoles/metadata/searchdefs.php
create mode 100644 modules/ACLRoles/metadata/subpaneldefs.php
create mode 100644 modules/ACLRoles/metadata/subpanels/admin.php
create mode 100644 modules/ACLRoles/metadata/subpanels/default.php
create mode 100644 modules/ACLRoles/popup.tpl
create mode 100644 modules/ACLRoles/vardefs.php
create mode 100644 modules/ACLRoles/views/view.list.php
create mode 100644 modules/Accounts/Account.js
create mode 100644 modules/Accounts/Account.php
create mode 100644 modules/Accounts/AccountFormBase.php
create mode 100644 modules/Accounts/AccountsQuickCreate.php
create mode 100644 modules/Accounts/Dashlets/MyAccountsDashlet/MyAccountsDashlet.data.php
create mode 100644 modules/Accounts/Dashlets/MyAccountsDashlet/MyAccountsDashlet.meta.php
create mode 100644 modules/Accounts/Dashlets/MyAccountsDashlet/MyAccountsDashlet.php
create mode 100644 modules/Accounts/Menu.php
create mode 100644 modules/Accounts/Popup_picker.html
create mode 100644 modules/Accounts/Save.php
create mode 100644 modules/Accounts/ShowDuplicates.html
create mode 100644 modules/Accounts/ShowDuplicates.php
create mode 100644 modules/Accounts/field_arrays.php
create mode 100644 modules/Accounts/language/en_us.lang.php
create mode 100644 modules/Accounts/metadata/SearchFields.php
create mode 100644 modules/Accounts/metadata/acldefs.php
create mode 100644 modules/Accounts/metadata/additionalDetails.php
create mode 100644 modules/Accounts/metadata/detailviewdefs.php
create mode 100644 modules/Accounts/metadata/editviewdefs.php
create mode 100644 modules/Accounts/metadata/fieldGroups.php
create mode 100644 modules/Accounts/metadata/listviewdefs.php
create mode 100644 modules/Accounts/metadata/metafiles.php
create mode 100644 modules/Accounts/metadata/popupdefs.php
create mode 100644 modules/Accounts/metadata/quickcreatedefs.php
create mode 100644 modules/Accounts/metadata/searchdefs.php
create mode 100644 modules/Accounts/metadata/studio.php
create mode 100644 modules/Accounts/metadata/subpaneldefs.php
create mode 100644 modules/Accounts/metadata/subpanels/ForEmails.php
create mode 100644 modules/Accounts/metadata/subpanels/ForProspectLists.php
create mode 100644 modules/Accounts/metadata/subpanels/default.php
create mode 100644 modules/Accounts/tpls/QuickCreate.tpl
create mode 100644 modules/Accounts/vardefs.php
create mode 100644 modules/Accounts/views/view.detail.php
create mode 100644 modules/Accounts/views/view.list.php
create mode 100644 modules/Activities/Forms.php
create mode 100644 modules/Activities/Menu.php
create mode 100644 modules/Activities/OpenListView.html
create mode 100644 modules/Activities/OpenListView.php
create mode 100644 modules/Activities/Popup_picker.html
create mode 100644 modules/Activities/Popup_picker.php
create mode 100644 modules/Activities/SetAcceptStatus.php
create mode 100644 modules/Activities/SubPanelView.html
create mode 100644 modules/Activities/SubPanelView.php
create mode 100644 modules/Activities/SubPanelViewContacts.html
create mode 100644 modules/Activities/config.php
create mode 100644 modules/Activities/language/en_us.lang.php
create mode 100644 modules/Activities/metadata/subpaneldefs.php
create mode 100644 modules/Activities/views/view.list.php
create mode 100644 modules/Activities/views/view.modulelistmenu.php
create mode 100644 modules/Administration/Administration.php
create mode 100644 modules/Administration/Async.php
create mode 100644 modules/Administration/Common.php
create mode 100644 modules/Administration/CustomizeFields.php
create mode 100644 modules/Administration/Development.php
create mode 100644 modules/Administration/Diagnostic.php
create mode 100644 modules/Administration/Diagnostic.tpl
create mode 100644 modules/Administration/DiagnosticDelete.php
create mode 100644 modules/Administration/DiagnosticDownload.php
create mode 100644 modules/Administration/DiagnosticRun.php
create mode 100644 modules/Administration/DisplayWarnings.php
create mode 100644 modules/Administration/DstFix.php
create mode 100644 modules/Administration/ExportCustomFieldStructure.php
create mode 100644 modules/Administration/Forms.php
create mode 100644 modules/Administration/ImportCustomFieldStructure.php
create mode 100644 modules/Administration/Locale.php
create mode 100644 modules/Administration/Locale.tpl
create mode 100644 modules/Administration/Menu.php
create mode 100644 modules/Administration/PasswordManager.php
create mode 100644 modules/Administration/PasswordManager.tpl
create mode 100644 modules/Administration/QuickRepairAndRebuild.php
create mode 100644 modules/Administration/RebuildAudit.php
create mode 100644 modules/Administration/RebuildConfig.html
create mode 100644 modules/Administration/RebuildConfig.php
create mode 100644 modules/Administration/RebuildDashlets.php
create mode 100644 modules/Administration/RebuildExpressionPlugins.php
create mode 100644 modules/Administration/RebuildFulltextIndices.php
create mode 100644 modules/Administration/RebuildJSLang.php
create mode 100644 modules/Administration/RebuildRelationship.php
create mode 100644 modules/Administration/RebuildSchedulers.php
create mode 100644 modules/Administration/RepairActivities.php
create mode 100644 modules/Administration/RepairFieldCasing.php
create mode 100644 modules/Administration/RepairIE.php
create mode 100644 modules/Administration/RepairIndex.php
create mode 100644 modules/Administration/RepairJSFile.php
create mode 100644 modules/Administration/RepairSeedUsers.php
create mode 100644 modules/Administration/RepairXSS.php
create mode 100644 modules/Administration/Save.php
create mode 100644 modules/Administration/SupportPortal.php
create mode 100644 modules/Administration/SupportPortal.tpl
create mode 100644 modules/Administration/Updater.html
create mode 100644 modules/Administration/Updater.php
create mode 100644 modules/Administration/Upgrade.php
create mode 100644 modules/Administration/UpgradeAccess.php
create mode 100644 modules/Administration/UpgradeFields.php
create mode 100644 modules/Administration/UpgradeHistory.php
create mode 100644 modules/Administration/UpgradeIISAccess.php
create mode 100644 modules/Administration/UpgradeWizard.php
create mode 100644 modules/Administration/UpgradeWizardCommon.php
create mode 100644 modules/Administration/UpgradeWizard_commit.php
create mode 100644 modules/Administration/UpgradeWizard_prepare.php
create mode 100644 modules/Administration/action_view_map.php
create mode 100644 modules/Administration/callJSRepair.php
create mode 100644 modules/Administration/clear_chart_cache.php
create mode 100644 modules/Administration/controller.php
create mode 100644 modules/Administration/expandDatabase.php
create mode 100644 modules/Administration/index.html
create mode 100644 modules/Administration/index.php
create mode 100644 modules/Administration/index.tpl
create mode 100644 modules/Administration/javascript/Administration.js
create mode 100644 modules/Administration/javascript/Async.js
create mode 100644 modules/Administration/language/en_us.lang.php
create mode 100644 modules/Administration/metadata/SearchFields.php
create mode 100644 modules/Administration/metadata/adminpaneldefs.php
create mode 100644 modules/Administration/ncc_config.php
create mode 100644 modules/Administration/repairDatabase.php
create mode 100644 modules/Administration/repairSelectModule.php
create mode 100644 modules/Administration/repairUniSearch.php
create mode 100644 modules/Administration/templates/ConfigureTabs.tpl
create mode 100644 modules/Administration/templates/GlobalSearchSettings.tpl
create mode 100644 modules/Administration/templates/Languages.tpl
create mode 100644 modules/Administration/templates/QuickRepairAndRebuild.tpl
create mode 100644 modules/Administration/templates/RepairDatabase.tpl
create mode 100644 modules/Administration/templates/RepairXSS.tpl
create mode 100644 modules/Administration/templates/ShortcutBar.tpl
create mode 100644 modules/Administration/templates/themeSettings.tpl
create mode 100644 modules/Administration/undoupdateclass.php
create mode 100644 modules/Administration/updateTimezonePrefs.php
create mode 100644 modules/Administration/updateclass.php
create mode 100644 modules/Administration/updater_utils.php
create mode 100644 modules/Administration/upgrade_custom_relationships.php
create mode 100644 modules/Administration/vardefs.php
create mode 100644 modules/Administration/views/view.backups.php
create mode 100644 modules/Administration/views/view.configuretabs.php
create mode 100644 modules/Administration/views/view.globalsearchsettings.php
create mode 100644 modules/Administration/views/view.languages.php
create mode 100644 modules/Administration/views/view.repair.php
create mode 100644 modules/Administration/views/view.themesettings.php
create mode 100644 modules/Audit/Audit.php
create mode 100644 modules/Audit/Popup_picker.html
create mode 100644 modules/Audit/Popup_picker.php
create mode 100644 modules/Audit/field_assoc.php
create mode 100644 modules/Audit/language/en_us.lang.php
create mode 100644 modules/Audit/vardefs.php
create mode 100644 modules/BeanDictionary.php
create mode 100644 modules/Bugs/Bug.php
create mode 100644 modules/Bugs/BugsQuickCreate.php
create mode 100644 modules/Bugs/Dashlets/MyBugsDashlet/MyBugsDashlet.data.php
create mode 100644 modules/Bugs/Dashlets/MyBugsDashlet/MyBugsDashlet.meta.php
create mode 100644 modules/Bugs/Dashlets/MyBugsDashlet/MyBugsDashlet.php
create mode 100644 modules/Bugs/Menu.php
create mode 100644 modules/Bugs/field_arrays.php
create mode 100644 modules/Bugs/language/en_us.lang.php
create mode 100644 modules/Bugs/metadata/SearchFields.php
create mode 100644 modules/Bugs/metadata/additionalDetails.php
create mode 100644 modules/Bugs/metadata/detailviewdefs.php
create mode 100644 modules/Bugs/metadata/editviewdefs.php
create mode 100644 modules/Bugs/metadata/listviewdefs.php
create mode 100644 modules/Bugs/metadata/metafiles.php
create mode 100644 modules/Bugs/metadata/popupdefs.php
create mode 100644 modules/Bugs/metadata/quickcreatedefs.php
create mode 100644 modules/Bugs/metadata/searchdefs.php
create mode 100644 modules/Bugs/metadata/studio.php
create mode 100644 modules/Bugs/metadata/subpaneldefs.php
create mode 100644 modules/Bugs/metadata/subpanels/ForEmails.php
create mode 100644 modules/Bugs/metadata/subpanels/default.php
create mode 100644 modules/Bugs/tpls/QuickCreate.tpl
create mode 100644 modules/Bugs/vardefs.php
create mode 100644 modules/Bugs/views/view.detail.php
create mode 100644 modules/Bugs/views/view.edit.php
create mode 100644 modules/Calendar/Calendar.php
create mode 100644 modules/Calendar/DateTimeUtil.php
create mode 100644 modules/Calendar/Forms.php
create mode 100644 modules/Calendar/Menu.php
create mode 100644 modules/Calendar/SubPanelSharedCalendar.php
create mode 100644 modules/Calendar/TasksListView.html
create mode 100644 modules/Calendar/TasksListView.php
create mode 100644 modules/Calendar/index.php
create mode 100644 modules/Calendar/language/en_us.lang.php
create mode 100644 modules/Calendar/metadata/listviewdefs.php
create mode 100644 modules/Calendar/small_month.php
create mode 100644 modules/Calendar/templates/template_shared_calendar.php
create mode 100644 modules/Calendar/templates/templates_calendar.php
create mode 100644 modules/Calendar/views/view.list.php
create mode 100644 modules/Calls/Call.php
create mode 100644 modules/Calls/CallFormBase.php
create mode 100644 modules/Calls/CallHelper.php
create mode 100644 modules/Calls/CallsQuickCreate.php
create mode 100644 modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.data.php
create mode 100644 modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.meta.php
create mode 100644 modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.php
create mode 100644 modules/Calls/Menu.php
create mode 100644 modules/Calls/Save.php
create mode 100644 modules/Calls/SubPanelViewInvitees.html
create mode 100644 modules/Calls/SubPanelViewInvitees.php
create mode 100644 modules/Calls/field_arrays.php
create mode 100644 modules/Calls/language/en_us.lang.php
create mode 100644 modules/Calls/metadata/SearchFields.php
create mode 100644 modules/Calls/metadata/additionalDetails.php
create mode 100644 modules/Calls/metadata/detailviewdefs.php
create mode 100644 modules/Calls/metadata/editviewdefs.php
create mode 100644 modules/Calls/metadata/listviewdefs.php
create mode 100644 modules/Calls/metadata/quickcreatedefs.php
create mode 100644 modules/Calls/metadata/searchdefs.php
create mode 100644 modules/Calls/metadata/studio.php
create mode 100644 modules/Calls/metadata/subpaneldefs.php
create mode 100644 modules/Calls/metadata/subpanels/ForActivities.php
create mode 100644 modules/Calls/metadata/subpanels/ForHistory.php
create mode 100644 modules/Calls/metadata/subpanels/default.php
create mode 100644 modules/Calls/tpls/QuickCreate.tpl
create mode 100644 modules/Calls/tpls/footer.tpl
create mode 100644 modules/Calls/vardefs.php
create mode 100644 modules/Calls/views/view.edit.php
create mode 100644 modules/CampaignLog/CampaignLog.php
create mode 100644 modules/CampaignLog/Menu.php
create mode 100644 modules/CampaignLog/Popup_picker.html
create mode 100644 modules/CampaignLog/Popup_picker.php
create mode 100644 modules/CampaignLog/language/en_us.lang.php
create mode 100644 modules/CampaignLog/metadata/subpanels/ForTargets.php
create mode 100644 modules/CampaignLog/metadata/subpanels/default.php
create mode 100644 modules/CampaignLog/vardefs.php
create mode 100644 modules/CampaignTrackers/CampaignTracker.php
create mode 100644 modules/CampaignTrackers/DetailView.html
create mode 100644 modules/CampaignTrackers/DetailView.php
create mode 100644 modules/CampaignTrackers/EditView.html
create mode 100644 modules/CampaignTrackers/EditView.php
create mode 100644 modules/CampaignTrackers/Forms.html
create mode 100644 modules/CampaignTrackers/Forms.php
create mode 100644 modules/CampaignTrackers/Menu.php
create mode 100644 modules/CampaignTrackers/Save.php
create mode 100644 modules/CampaignTrackers/language/en_us.lang.php
create mode 100644 modules/CampaignTrackers/metadata/subpanels/default.php
create mode 100644 modules/CampaignTrackers/vardefs.php
create mode 100644 modules/Campaigns/Campaign.php
create mode 100644 modules/Campaigns/CampaignDiagnostic.html
create mode 100644 modules/Campaigns/CampaignDiagnostic.php
create mode 100644 modules/Campaigns/CaptchaValidate.php
create mode 100644 modules/Campaigns/Charts.php
create mode 100644 modules/Campaigns/Charts1.php
create mode 100644 modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashlet.meta.php
create mode 100644 modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashlet.php
create mode 100644 modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashlet.tpl
create mode 100644 modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashletConfigure.tpl
create mode 100644 modules/Campaigns/Delete.php
create mode 100644 modules/Campaigns/DetailView.js
create mode 100644 modules/Campaigns/EmailQueue.php
create mode 100644 modules/Campaigns/GenerateWebToLeadForm.php
create mode 100644 modules/Campaigns/MailMerge.php
create mode 100644 modules/Campaigns/Menu.php
create mode 100644 modules/Campaigns/PopupCampaignRoi.html
create mode 100644 modules/Campaigns/PopupCampaignRoi.php
create mode 100644 modules/Campaigns/Popup_picker.html
create mode 100644 modules/Campaigns/Popup_picker.php
create mode 100644 modules/Campaigns/ProcessBouncedEmails.php
create mode 100644 modules/Campaigns/QueueCampaign.php
create mode 100644 modules/Campaigns/RemoveMe.php
create mode 100644 modules/Campaigns/RoiDetailView.php
create mode 100644 modules/Campaigns/RoiDetailView.tpl
create mode 100644 modules/Campaigns/Save.php
create mode 100644 modules/Campaigns/Schedule.html
create mode 100644 modules/Campaigns/Schedule.php
create mode 100644 modules/Campaigns/SearchForm_NewsLetter.html
create mode 100644 modules/Campaigns/SubPanelViewer.php
create mode 100644 modules/Campaigns/Subscriptions.html
create mode 100644 modules/Campaigns/Subscriptions.php
create mode 100644 modules/Campaigns/Subscriptions.tpl
create mode 100644 modules/Campaigns/TrackDetailView.php
create mode 100644 modules/Campaigns/TrackDetailView.tpl
create mode 100644 modules/Campaigns/Tracker.php
create mode 100644 modules/Campaigns/WebToLead.js
create mode 100644 modules/Campaigns/WebToLeadCapture.php
create mode 100644 modules/Campaigns/WebToLeadCreation.html
create mode 100644 modules/Campaigns/WebToLeadCreation.php
create mode 100644 modules/Campaigns/WebToLeadDownloadForm.html
create mode 100644 modules/Campaigns/WebToLeadForm.html
create mode 100644 modules/Campaigns/WebToLeadFormSave.php
create mode 100644 modules/Campaigns/WizardEmailSetup.html
create mode 100644 modules/Campaigns/WizardEmailSetup.php
create mode 100644 modules/Campaigns/WizardEmailSetupSave.php
create mode 100644 modules/Campaigns/WizardHome.html
create mode 100644 modules/Campaigns/WizardHome.php
create mode 100644 modules/Campaigns/WizardMarketing.html
create mode 100644 modules/Campaigns/WizardMarketing.php
create mode 100644 modules/Campaigns/WizardMarketingSave.php
create mode 100644 modules/Campaigns/WizardNewsletter.html
create mode 100644 modules/Campaigns/WizardNewsletter.php
create mode 100644 modules/Campaigns/WizardNewsletterSave.php
create mode 100644 modules/Campaigns/action_file_map.php
create mode 100644 modules/Campaigns/chart.tpl
create mode 100644 modules/Campaigns/controller.php
create mode 100644 modules/Campaigns/field_arrays.php
create mode 100644 modules/Campaigns/image.php
create mode 100644 modules/Campaigns/language/en_us.lang.php
create mode 100644 modules/Campaigns/metadata/SearchFields.php
create mode 100644 modules/Campaigns/metadata/additionalDetails.php
create mode 100644 modules/Campaigns/metadata/detailviewdefs.php
create mode 100644 modules/Campaigns/metadata/editviewdefs.php
create mode 100644 modules/Campaigns/metadata/listviewdefs.php
create mode 100644 modules/Campaigns/metadata/popupdefs.php
create mode 100644 modules/Campaigns/metadata/searchdefs.php
create mode 100644 modules/Campaigns/metadata/studio.php
create mode 100644 modules/Campaigns/metadata/subpaneldefs.php
create mode 100644 modules/Campaigns/metadata/subpanels/ForEmailMarketing.php
create mode 100644 modules/Campaigns/metadata/subpanels/default.php
create mode 100644 modules/Campaigns/tpls/WizardCampaignBudget.tpl
create mode 100644 modules/Campaigns/tpls/WizardCampaignHeader.tpl
create mode 100644 modules/Campaigns/tpls/WizardCampaignTargetList.tpl
create mode 100644 modules/Campaigns/tpls/WizardCampaignTargetListForNonNewsLetter.tpl
create mode 100644 modules/Campaigns/tpls/WizardCampaignTracker.tpl
create mode 100644 modules/Campaigns/tpls/WizardHomeStart.tpl
create mode 100644 modules/Campaigns/tpls/WizardNewsletter.tpl
create mode 100644 modules/Campaigns/utils.php
create mode 100644 modules/Campaigns/vardefs.php
create mode 100644 modules/Campaigns/views/view.classic.php
create mode 100644 modules/Campaigns/views/view.detail.php
create mode 100644 modules/Campaigns/views/view.modulelistmenu.php
create mode 100644 modules/Campaigns/views/view.newsletterlist.php
create mode 100644 modules/Campaigns/wizard.js
create mode 100644 modules/Cases/Case.php
create mode 100644 modules/Cases/CasesQuickCreate.php
create mode 100644 modules/Cases/Dashlets/MyCasesDashlet/MyCasesDashlet.data.php
create mode 100644 modules/Cases/Dashlets/MyCasesDashlet/MyCasesDashlet.meta.php
create mode 100644 modules/Cases/Dashlets/MyCasesDashlet/MyCasesDashlet.php
create mode 100644 modules/Cases/Menu.php
create mode 100644 modules/Cases/SugarFeeds/CaseFeed.php
create mode 100644 modules/Cases/field_arrays.php
create mode 100644 modules/Cases/language/en_us.lang.php
create mode 100644 modules/Cases/metadata/SearchFields.php
create mode 100644 modules/Cases/metadata/accountsquickcreatedefs.php
create mode 100644 modules/Cases/metadata/additionalDetails.php
create mode 100644 modules/Cases/metadata/detailviewdefs.php
create mode 100644 modules/Cases/metadata/editviewdefs.php
create mode 100644 modules/Cases/metadata/listviewdefs.php
create mode 100644 modules/Cases/metadata/popupdefs.php
create mode 100644 modules/Cases/metadata/quickcreatedefs.php
create mode 100644 modules/Cases/metadata/searchdefs.php
create mode 100644 modules/Cases/metadata/studio.php
create mode 100644 modules/Cases/metadata/subpaneldefs.php
create mode 100644 modules/Cases/metadata/subpanels/ForAccounts.php
create mode 100644 modules/Cases/metadata/subpanels/ForEmails.php
create mode 100644 modules/Cases/metadata/subpanels/default.php
create mode 100644 modules/Cases/tpls/QuickCreate.tpl
create mode 100644 modules/Cases/vardefs.php
create mode 100644 modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartConfigure.tpl
create mode 100644 modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.data.php
create mode 100644 modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.en_us.lang.php
create mode 100644 modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.meta.php
create mode 100644 modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.php
create mode 100644 modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageConfigure.tpl
create mode 100644 modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.data.php
create mode 100644 modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.en_us.lang.php
create mode 100644 modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.meta.php
create mode 100644 modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php
create mode 100644 modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeConfigure.tpl
create mode 100644 modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.data.php
create mode 100644 modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.en_us.lang.php
create mode 100644 modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.meta.php
create mode 100644 modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.php
create mode 100644 modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceConfigure.tpl
create mode 100644 modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.data.php
create mode 100644 modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.en_us.lang.php
create mode 100644 modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.meta.php
create mode 100644 modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.php
create mode 100644 modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthConfigure.tpl
create mode 100644 modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.data.php
create mode 100644 modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.en_us.lang.php
create mode 100644 modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.meta.php
create mode 100644 modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php
create mode 100644 modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageConfigure.tpl
create mode 100644 modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.data.php
create mode 100644 modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.en_us.lang.php
create mode 100644 modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.meta.php
create mode 100644 modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php
create mode 100644 modules/Charts/Dashlets/PredefinedChartDashletScript.tpl
create mode 100644 modules/Charts/DynamicAction.php
create mode 100644 modules/Charts/PredefinedChart.php
create mode 100644 modules/Charts/chartdefs.php
create mode 100644 modules/Charts/code/Chart_lead_source_by_outcome.php
create mode 100644 modules/Charts/code/Chart_my_pipeline_by_sales_stage.php
create mode 100644 modules/Charts/code/Chart_outcome_by_month.php
create mode 100644 modules/Charts/code/Chart_pipeline_by_lead_source.php
create mode 100644 modules/Charts/code/Chart_pipeline_by_sales_stage.php
create mode 100644 modules/Charts/code/predefined_charts.php
create mode 100644 modules/Charts/language/en_us.lang.php
create mode 100644 modules/Configurator/Configurator.php
create mode 100644 modules/Configurator/Forms.php
create mode 100644 modules/Configurator/LogView.php
create mode 100644 modules/Configurator/Menu.php
create mode 100644 modules/Configurator/UploadFileCheck.php
create mode 100644 modules/Configurator/action_view_map.php
create mode 100644 modules/Configurator/controller.php
create mode 100644 modules/Configurator/language/en_us.lang.php
create mode 100644 modules/Configurator/metadata/SugarpdfSettingsdefs.php
create mode 100644 modules/Configurator/tpls/EditView.tpl
create mode 100644 modules/Configurator/tpls/SugarpdfSettings.tpl
create mode 100644 modules/Configurator/tpls/SugarpdfSettingsFields.tpl
create mode 100644 modules/Configurator/tpls/addFontResult.tpl
create mode 100644 modules/Configurator/tpls/addFontView.tpl
create mode 100644 modules/Configurator/tpls/adminwizard.tpl
create mode 100644 modules/Configurator/tpls/fontmanager.tpl
create mode 100644 modules/Configurator/views/view.addfontresult.php
create mode 100644 modules/Configurator/views/view.addfontview.php
create mode 100644 modules/Configurator/views/view.adminwizard.php
create mode 100644 modules/Configurator/views/view.edit.php
create mode 100644 modules/Configurator/views/view.fontmanager.php
create mode 100644 modules/Configurator/views/view.sugarpdfsettings.php
create mode 100644 modules/Connectors/Connector.js
create mode 100644 modules/Connectors/ConnectorRecord.php
create mode 100644 modules/Connectors/Forms.php
create mode 100644 modules/Connectors/InstallDefaultConnectors.php
create mode 100644 modules/Connectors/Menu.php
create mode 100644 modules/Connectors/action_view_map.php
create mode 100644 modules/Connectors/connectors/formatters/ext/rest/linkedin/linkedin.php
create mode 100644 modules/Connectors/connectors/formatters/ext/rest/linkedin/tpls/default.tpl
create mode 100644 modules/Connectors/connectors/formatters/ext/rest/linkedin/tpls/linkedin.gif
create mode 100644 modules/Connectors/connectors/formatters/ext/rest/twitter/tpls/twitter.gif
create mode 100644 modules/Connectors/connectors/sources/ext/rest/linkedin/config.php
create mode 100644 modules/Connectors/connectors/sources/ext/rest/linkedin/language/en_us.lang.php
create mode 100644 modules/Connectors/connectors/sources/ext/rest/linkedin/linkedin.php
create mode 100644 modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php
create mode 100644 modules/Connectors/connectors/sources/ext/rest/linkedin/vardefs.php
create mode 100644 modules/Connectors/controller.php
create mode 100644 modules/Connectors/language/en_us.lang.php
create mode 100644 modules/Connectors/metadata/searchdefs.php
create mode 100644 modules/Connectors/tpls/administration.tpl
create mode 100644 modules/Connectors/tpls/display_properties.tpl
create mode 100644 modules/Connectors/tpls/listview.tpl
create mode 100644 modules/Connectors/tpls/mapping_properties.tpl
create mode 100644 modules/Connectors/tpls/modify_display.tpl
create mode 100644 modules/Connectors/tpls/modify_mapping.tpl
create mode 100644 modules/Connectors/tpls/modify_properties.tpl
create mode 100644 modules/Connectors/tpls/modify_search.tpl
create mode 100644 modules/Connectors/tpls/search_form.tpl
create mode 100644 modules/Connectors/tpls/search_properties.tpl
create mode 100644 modules/Connectors/tpls/source_properties.tpl
create mode 100644 modules/Connectors/tpls/tabs.css
create mode 100644 modules/Connectors/views/view.connectorsettings.php
create mode 100644 modules/Connectors/views/view.displayproperties.php
create mode 100644 modules/Connectors/views/view.mappingproperties.php
create mode 100644 modules/Connectors/views/view.modifydisplay.php
create mode 100644 modules/Connectors/views/view.modifymapping.php
create mode 100644 modules/Connectors/views/view.modifyproperties.php
create mode 100644 modules/Connectors/views/view.modifysearch.php
create mode 100644 modules/Connectors/views/view.searchproperties.php
create mode 100644 modules/Connectors/views/view.sourceproperties.php
create mode 100644 modules/Contacts/AcceptDecline.php
create mode 100644 modules/Contacts/Address_picker.html
create mode 100644 modules/Contacts/BusinessCard.html
create mode 100644 modules/Contacts/BusinessCard.php
create mode 100644 modules/Contacts/Contact.js
create mode 100644 modules/Contacts/Contact.php
create mode 100644 modules/Contacts/ContactFormBase.php
create mode 100644 modules/Contacts/ContactOpportunityRelationship.php
create mode 100644 modules/Contacts/ContactOpportunityRelationshipEdit.html
create mode 100644 modules/Contacts/ContactOpportunityRelationshipEdit.php
create mode 100644 modules/Contacts/ContactsQuickCreate.php
create mode 100644 modules/Contacts/Dashlets/MyContactsDashlet/MyContactsDashlet.data.php
create mode 100644 modules/Contacts/Dashlets/MyContactsDashlet/MyContactsDashlet.meta.php
create mode 100644 modules/Contacts/Dashlets/MyContactsDashlet/MyContactsDashlet.php
create mode 100644 modules/Contacts/Email_picker.html
create mode 100644 modules/Contacts/MailMergePicker.html
create mode 100644 modules/Contacts/Menu.php
create mode 100644 modules/Contacts/Popup_picker.php
create mode 100644 modules/Contacts/Save.php
create mode 100644 modules/Contacts/SaveContactOpportunityRelationship.php
create mode 100644 modules/Contacts/ShowDuplicates.html
create mode 100644 modules/Contacts/ShowDuplicates.php
create mode 100644 modules/Contacts/SugarFeeds/ContactFeed.php
create mode 100644 modules/Contacts/controller.php
create mode 100644 modules/Contacts/field_arrays.php
create mode 100644 modules/Contacts/language/en_us.lang.php
create mode 100644 modules/Contacts/metadata/SearchFields.php
create mode 100644 modules/Contacts/metadata/additionalDetails.php
create mode 100644 modules/Contacts/metadata/detailviewdefs.php
create mode 100644 modules/Contacts/metadata/editviewdefs.php
create mode 100644 modules/Contacts/metadata/listviewdefs.php
create mode 100644 modules/Contacts/metadata/metafiles.php
create mode 100644 modules/Contacts/metadata/popupdefs.php
create mode 100644 modules/Contacts/metadata/popupdefsEmail.php
create mode 100644 modules/Contacts/metadata/quickcreatedefs.php
create mode 100644 modules/Contacts/metadata/searchdefs.php
create mode 100644 modules/Contacts/metadata/studio.php
create mode 100644 modules/Contacts/metadata/subpaneldefs.php
create mode 100644 modules/Contacts/metadata/subpanels/ForAccounts.php
create mode 100644 modules/Contacts/metadata/subpanels/ForCalls.php
create mode 100644 modules/Contacts/metadata/subpanels/ForCases.php
create mode 100644 modules/Contacts/metadata/subpanels/ForContacts.php
create mode 100644 modules/Contacts/metadata/subpanels/ForEmails.php
create mode 100644 modules/Contacts/metadata/subpanels/ForMeetings.php
create mode 100644 modules/Contacts/metadata/subpanels/ForOpportunities.php
create mode 100644 modules/Contacts/metadata/subpanels/ForProject.php
create mode 100644 modules/Contacts/metadata/subpanels/default.php
create mode 100644 modules/Contacts/tpls/QuickCreate.tpl
create mode 100644 modules/Contacts/vardefs.php
create mode 100644 modules/Contacts/views/view.closecontactaddresspopup.php
create mode 100644 modules/Contacts/views/view.contactaddresspopup.php
create mode 100644 modules/Contacts/views/view.detail.php
create mode 100644 modules/Contacts/views/view.edit.php
create mode 100644 modules/Contacts/views/view.list.php
create mode 100644 modules/Contacts/views/view.mailmergepopup.php
create mode 100644 modules/Contacts/views/view.retrieveemail.php
create mode 100644 modules/Contacts/views/view.validportalusername.php
create mode 100644 modules/Currencies/Currency.php
create mode 100644 modules/Currencies/EditCurrency.php
create mode 100644 modules/Currencies/EditView.js
create mode 100644 modules/Currencies/EditView.tpl
create mode 100644 modules/Currencies/Forms.php
create mode 100644 modules/Currencies/ListCurrency.php
create mode 100644 modules/Currencies/ListView.html
create mode 100644 modules/Currencies/Menu.php
create mode 100644 modules/Currencies/field_arrays.php
create mode 100644 modules/Currencies/index.php
create mode 100644 modules/Currencies/iso4217.php
create mode 100644 modules/Currencies/language/en_us.lang.php
create mode 100644 modules/Currencies/vardefs.php
create mode 100644 modules/DocumentRevisions/DocumentRevision.php
create mode 100644 modules/DocumentRevisions/Forms.php
create mode 100644 modules/DocumentRevisions/ListView.html
create mode 100644 modules/DocumentRevisions/Menu.php
create mode 100644 modules/DocumentRevisions/field_arrays.php
create mode 100644 modules/DocumentRevisions/language/en_us.lang.php
create mode 100644 modules/DocumentRevisions/metadata/detailviewdefs.php
create mode 100644 modules/DocumentRevisions/metadata/editviewdefs.php
create mode 100644 modules/DocumentRevisions/metadata/subpanels/default.php
create mode 100644 modules/DocumentRevisions/subpanels/default.php
create mode 100644 modules/DocumentRevisions/vardefs.php
create mode 100644 modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.data.php
create mode 100644 modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.meta.php
create mode 100644 modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.php
create mode 100644 modules/Documents/Delete.php
create mode 100644 modules/Documents/Document.php
create mode 100644 modules/Documents/DocumentExternalApiDropDown.php
create mode 100644 modules/Documents/DocumentSoap.php
create mode 100644 modules/Documents/GetLatestRevision.php
create mode 100644 modules/Documents/Menu.php
create mode 100644 modules/Documents/Popup.php
create mode 100644 modules/Documents/Popup_picker.html
create mode 100644 modules/Documents/Popup_picker.php
create mode 100644 modules/Documents/TreeData.php
create mode 100644 modules/Documents/action_view_map.php
create mode 100644 modules/Documents/documents.js
create mode 100644 modules/Documents/field_arrays.php
create mode 100644 modules/Documents/language/en_us.lang.php
create mode 100644 modules/Documents/metadata/SearchFields.php
create mode 100644 modules/Documents/metadata/detailviewdefs.php
create mode 100644 modules/Documents/metadata/editviewdefs.php
create mode 100644 modules/Documents/metadata/listviewdefs.php
create mode 100644 modules/Documents/metadata/quickcreatedefs.php
create mode 100644 modules/Documents/metadata/searchdefs.php
create mode 100644 modules/Documents/metadata/studio.php
create mode 100644 modules/Documents/metadata/subpaneldefs.php
create mode 100644 modules/Documents/metadata/subpanels/ForContractType.php
create mode 100644 modules/Documents/metadata/subpanels/default.php
create mode 100644 modules/Documents/tpls/view.extdoc.tpl
create mode 100644 modules/Documents/vardefs.php
create mode 100644 modules/Documents/views/view.detail.php
create mode 100644 modules/Documents/views/view.edit.php
create mode 100644 modules/Documents/views/view.extdoc.php
create mode 100644 modules/DynamicFields/DynamicField.php
create mode 100644 modules/DynamicFields/FieldCases.php
create mode 100644 modules/DynamicFields/FieldViewer.php
create mode 100644 modules/DynamicFields/FieldsMetaData.php
create mode 100644 modules/DynamicFields/Save.php
create mode 100644 modules/DynamicFields/UpgradeFields.php
create mode 100644 modules/DynamicFields/language/en_us.lang.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/address.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/bool.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/coreBottom.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/coreTop.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/currency.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/date.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/date.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/datetimecombo.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/datetimecombo.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/encrypt.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/encrypt.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/enum.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/enum2.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/float.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/html.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/html.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/iframe.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/iframe.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/image.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/image.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/int.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/multienum.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/multienum.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/parent.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/parent.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/phone.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/phone.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/radioenum.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/relate.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/relate.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/text.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/url.php
create mode 100644 modules/DynamicFields/templates/Fields/Forms/url.tpl
create mode 100644 modules/DynamicFields/templates/Fields/Forms/varchar.tpl
create mode 100644 modules/DynamicFields/templates/Fields/TemplateAddress.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateAddressCountry.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateBoolean.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateCurrency.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateCurrencyId.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateDate.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateDatetimecombo.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateDecimal.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateEmail.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateEncrypt.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateEnum.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateField.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateFloat.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateHTML.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateIFrame.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateId.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateImage.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateInt.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateMultiEnum.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateParent.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateParentType.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplatePhone.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateRadioEnum.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateRange.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateRelatedTextField.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateText.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateTextArea.php
create mode 100644 modules/DynamicFields/templates/Fields/TemplateURL.php
create mode 100644 modules/DynamicFields/templates/Files/DetailView.php
create mode 100644 modules/DynamicFields/templates/Files/EditView.php
create mode 100644 modules/DynamicFields/vardefs.php
create mode 100644 modules/EAPM/CheckLogins.php
create mode 100644 modules/EAPM/EAPM.php
create mode 100644 modules/EAPM/EAPMEdit.js
create mode 100644 modules/EAPM/action_view_map.php
create mode 100644 modules/EAPM/controller.php
create mode 100644 modules/EAPM/language/en_us.lang.php
create mode 100644 modules/EAPM/metadata/SearchFields.php
create mode 100644 modules/EAPM/metadata/detailviewdefs.php
create mode 100644 modules/EAPM/metadata/editviewdefs.php
create mode 100644 modules/EAPM/metadata/listviewdefs.php
create mode 100644 modules/EAPM/metadata/metafiles.php
create mode 100644 modules/EAPM/metadata/popupdefs.php
create mode 100644 modules/EAPM/metadata/quickcreatedefs.php
create mode 100644 modules/EAPM/metadata/searchdefs.php
create mode 100644 modules/EAPM/metadata/subpanels/default.php
create mode 100644 modules/EAPM/tpls/DetailViewFooter.tpl
create mode 100644 modules/EAPM/tpls/EditViewFooter.tpl
create mode 100644 modules/EAPM/tpls/EditViewHeader.tpl
create mode 100644 modules/EAPM/vardefs.php
create mode 100644 modules/EAPM/views/view.detail.php
create mode 100644 modules/EAPM/views/view.edit.php
create mode 100644 modules/EmailAddresses/EmailAddress.php
create mode 100644 modules/EmailAddresses/language/en_us.lang.php
create mode 100644 modules/EmailAddresses/vardefs.php
create mode 100644 modules/EmailMan/EmailMan.php
create mode 100644 modules/EmailMan/EmailManDelivery.php
create mode 100644 modules/EmailMan/Forms.php
create mode 100644 modules/EmailMan/Menu.php
create mode 100644 modules/EmailMan/Save.php
create mode 100644 modules/EmailMan/action_view_map.php
create mode 100644 modules/EmailMan/field_arrays.php
create mode 100644 modules/EmailMan/language/en_us.lang.php
create mode 100644 modules/EmailMan/metadata/SearchFields.php
create mode 100644 modules/EmailMan/metadata/listviewdefs.php
create mode 100644 modules/EmailMan/metadata/searchdefs.php
create mode 100644 modules/EmailMan/metadata/subpanels/default.php
create mode 100644 modules/EmailMan/subpanels/default.php
create mode 100644 modules/EmailMan/testOutboundEmail.php
create mode 100644 modules/EmailMan/tpls/campaignconfig.tpl
create mode 100644 modules/EmailMan/tpls/config.tpl
create mode 100644 modules/EmailMan/vardefs.php
create mode 100644 modules/EmailMan/views/view.campaignconfig.php
create mode 100644 modules/EmailMan/views/view.config.php
create mode 100644 modules/EmailMan/views/view.list.php
create mode 100644 modules/EmailMarketing/Delete.php
create mode 100644 modules/EmailMarketing/DetailView.html
create mode 100644 modules/EmailMarketing/DetailView.php
create mode 100644 modules/EmailMarketing/EditView.html
create mode 100644 modules/EmailMarketing/EditView.php
create mode 100644 modules/EmailMarketing/EmailMarketing.php
create mode 100644 modules/EmailMarketing/Forms.php
create mode 100644 modules/EmailMarketing/Menu.php
create mode 100644 modules/EmailMarketing/Save.php
create mode 100644 modules/EmailMarketing/SubPanelView.html
create mode 100644 modules/EmailMarketing/SubPanelView.php
create mode 100644 modules/EmailMarketing/field_arrays.php
create mode 100644 modules/EmailMarketing/language/en_us.lang.php
create mode 100644 modules/EmailMarketing/metadata/subpaneldefs.php
create mode 100644 modules/EmailMarketing/metadata/subpanels/default.php
create mode 100644 modules/EmailMarketing/subpanels/default.php
create mode 100644 modules/EmailMarketing/vardefs.php
create mode 100644 modules/EmailTemplates/AttachFiles.php
create mode 100644 modules/EmailTemplates/CheckDeletable.php
create mode 100644 modules/EmailTemplates/Delete.php
create mode 100644 modules/EmailTemplates/DetailView.html
create mode 100644 modules/EmailTemplates/DetailView.php
create mode 100644 modules/EmailTemplates/EditView.html
create mode 100644 modules/EmailTemplates/EditView.php
create mode 100644 modules/EmailTemplates/EditViewMain.html
create mode 100644 modules/EmailTemplates/EmailTemplate.js
create mode 100644 modules/EmailTemplates/EmailTemplate.php
create mode 100644 modules/EmailTemplates/EmailTemplateFormBase.php
create mode 100644 modules/EmailTemplates/Menu.php
create mode 100644 modules/EmailTemplates/PopupDocumentsCampaignTemplate.html
create mode 100644 modules/EmailTemplates/PopupDocumentsCampaignTemplate.php
create mode 100644 modules/EmailTemplates/Save.php
create mode 100644 modules/EmailTemplates/field_arrays.php
create mode 100644 modules/EmailTemplates/language/en_us.lang.php
create mode 100644 modules/EmailTemplates/metadata/SearchFields.php
create mode 100644 modules/EmailTemplates/metadata/listviewdefs.php
create mode 100644 modules/EmailTemplates/metadata/searchdefs.php
create mode 100644 modules/EmailTemplates/vardefs.php
create mode 100644 modules/Emails/Check.php
create mode 100644 modules/Emails/Compose.php
create mode 100644 modules/Emails/Dashlets/MyEmailsDashlet/MyEmailsDashlet.data.php
create mode 100644 modules/Emails/Dashlets/MyEmailsDashlet/MyEmailsDashlet.meta.php
create mode 100644 modules/Emails/Dashlets/MyEmailsDashlet/MyEmailsDashlet.php
create mode 100644 modules/Emails/Delete.php
create mode 100644 modules/Emails/DetailView.html
create mode 100644 modules/Emails/DetailView.php
create mode 100644 modules/Emails/DetailViewSent.html
create mode 100644 modules/Emails/EditView.html
create mode 100644 modules/Emails/EditView.php
create mode 100644 modules/Emails/EditViewArchive.html
create mode 100644 modules/Emails/Email.php
create mode 100644 modules/Emails/EmailUI.css
create mode 100644 modules/Emails/EmailUI.php
create mode 100644 modules/Emails/EmailUIAjax.php
create mode 100644 modules/Emails/GenerateQuickComposeFrame.php
create mode 100644 modules/Emails/Grab.php
create mode 100644 modules/Emails/ListViewDrafts.html
create mode 100644 modules/Emails/ListViewGroup.php
create mode 100644 modules/Emails/ListViewGroupInbox.html
create mode 100644 modules/Emails/ListViewHome.html
create mode 100644 modules/Emails/ListViewHome.php
create mode 100644 modules/Emails/ListViewMyInbox.html
create mode 100644 modules/Emails/ListViewSent.html
create mode 100644 modules/Emails/MassDelete.php
create mode 100644 modules/Emails/Menu.php
create mode 100644 modules/Emails/PessimisticLock.php
create mode 100644 modules/Emails/Popup.php
create mode 100644 modules/Emails/PopupDocuments.html
create mode 100644 modules/Emails/PopupDocuments.php
create mode 100644 modules/Emails/Popup_picker.html
create mode 100644 modules/Emails/Popup_picker.php
create mode 100644 modules/Emails/Save.php
create mode 100644 modules/Emails/SearchForm.html
create mode 100644 modules/Emails/SearchFormGroupInbox.html
create mode 100644 modules/Emails/SearchFormMyInbox.html
create mode 100644 modules/Emails/SearchFormSent.html
create mode 100644 modules/Emails/Status.html
create mode 100644 modules/Emails/Status.php
create mode 100644 modules/Emails/SubPanelViewRecipients.html
create mode 100644 modules/Emails/SubPanelViewRecipients.php
create mode 100644 modules/Emails/SugarRoutingAsync.php
create mode 100644 modules/Emails/field_arrays.php
create mode 100644 modules/Emails/images/autofit.gif
create mode 100644 modules/Emails/images/colsView.gif
create mode 100644 modules/Emails/images/email.gif
create mode 100644 modules/Emails/images/emailGroup.gif
create mode 100644 modules/Emails/images/fullscreen.gif
create mode 100644 modules/Emails/images/leftarrow_inline.gif
create mode 100644 modules/Emails/images/rightarrow_inline.gif
create mode 100644 modules/Emails/images/rowsView.gif
create mode 100644 modules/Emails/images/sugar.gif
create mode 100644 modules/Emails/images/sugarDynamic.gif
create mode 100644 modules/Emails/images/sugarGroup.gif
create mode 100644 modules/Emails/index.php
create mode 100644 modules/Emails/javascript/Email.js
create mode 100644 modules/Emails/javascript/EmailUI.js
create mode 100644 modules/Emails/javascript/EmailUICompose.js
create mode 100644 modules/Emails/javascript/EmailUIShared.js
create mode 100644 modules/Emails/javascript/ajax.js
create mode 100644 modules/Emails/javascript/complexLayout.js
create mode 100644 modules/Emails/javascript/composeEmailTemplate.js
create mode 100644 modules/Emails/javascript/displayOneEmailTemplate.js
create mode 100644 modules/Emails/javascript/email_popup_helper.js
create mode 100644 modules/Emails/javascript/grid.js
create mode 100644 modules/Emails/javascript/init.js
create mode 100644 modules/Emails/javascript/vars.js
create mode 100644 modules/Emails/javascript/viewPrintable.js
create mode 100644 modules/Emails/language/en_us.lang.php
create mode 100644 modules/Emails/metadata/additionalDetails.php
create mode 100644 modules/Emails/metadata/popupdefs.php
create mode 100644 modules/Emails/metadata/qcmodulesdefs.php
create mode 100644 modules/Emails/metadata/subpaneldefs.php
create mode 100644 modules/Emails/metadata/subpanels/ForContacts.php
create mode 100644 modules/Emails/metadata/subpanels/ForHistory.php
create mode 100644 modules/Emails/metadata/subpanels/ForQueues.php
create mode 100644 modules/Emails/metadata/subpanels/ForUnlinkedEmailHistory.php
create mode 100644 modules/Emails/metadata/subpanels/ForUsers.php
create mode 100644 modules/Emails/subpanels/ForContacts.php
create mode 100644 modules/Emails/subpanels/ForHistory.php
create mode 100644 modules/Emails/subpanels/ForQueues.php
create mode 100644 modules/Emails/subpanels/ForUsers.php
create mode 100644 modules/Emails/templates/_baseConfigData.tpl
create mode 100644 modules/Emails/templates/_baseEmail.tpl
create mode 100644 modules/Emails/templates/_baseJsVars.tpl
create mode 100644 modules/Emails/templates/_blank.html
create mode 100644 modules/Emails/templates/_createGroupFolder.tpl
create mode 100644 modules/Emails/templates/addressBook.tpl
create mode 100644 modules/Emails/templates/addressSearch.tpl
create mode 100644 modules/Emails/templates/addressSearchContent.tpl
create mode 100644 modules/Emails/templates/advancedSearch.tpl
create mode 100644 modules/Emails/templates/assignTo.tpl
create mode 100644 modules/Emails/templates/dceMenuQuickCreate.tpl
create mode 100644 modules/Emails/templates/editAccountDialogue.tpl
create mode 100644 modules/Emails/templates/editContact.tpl
create mode 100644 modules/Emails/templates/editMailingList.tpl
create mode 100644 modules/Emails/templates/emailDetailView.tpl
create mode 100644 modules/Emails/templates/emailSettings.tpl
create mode 100644 modules/Emails/templates/emailSettingsAccountDetails.tpl
create mode 100644 modules/Emails/templates/emailSettingsAccounts.tpl
create mode 100644 modules/Emails/templates/emailSettingsFolders.tpl
create mode 100644 modules/Emails/templates/emailSettingsGeneral.tpl
create mode 100644 modules/Emails/templates/emailSettingsRules.tpl
create mode 100644 modules/Emails/templates/importRelate.tpl
create mode 100644 modules/Emails/templates/outboundDialog.tpl
create mode 100644 modules/Emails/templates/outboundDialogTest.tpl
create mode 100644 modules/Emails/templates/overlay.tpl
create mode 100644 modules/Emails/templates/successMessage.tpl
create mode 100644 modules/Emails/vardefs.php
create mode 100644 modules/Emails/views/view.classic.config.php
create mode 100644 modules/Emails/views/view.modulelistmenu.php
create mode 100644 modules/Emails/views/view.quickcreate.php
create mode 100644 modules/Employees/Employee.php
create mode 100644 modules/Employees/Error.php
create mode 100644 modules/Employees/Forms.php
create mode 100644 modules/Employees/Menu.php
create mode 100644 modules/Employees/Popup_picker.html
create mode 100644 modules/Employees/Popup_picker.php
create mode 100644 modules/Employees/Save.php
create mode 100644 modules/Employees/WapAuthenticate.php
create mode 100644 modules/Employees/WapMenu.php
create mode 100644 modules/Employees/controller.php
create mode 100644 modules/Employees/field_arrays.php
create mode 100644 modules/Employees/language/en_us.lang.php
create mode 100644 modules/Employees/metadata/SearchFields.php
create mode 100644 modules/Employees/metadata/detailviewdefs.php
create mode 100644 modules/Employees/metadata/editviewdefs.php
create mode 100644 modules/Employees/metadata/listviewdefs.php
create mode 100644 modules/Employees/metadata/searchdefs.php
create mode 100644 modules/Employees/vardefs.php
create mode 100644 modules/Employees/views/view.detail.php
create mode 100644 modules/Employees/views/view.edit.php
create mode 100644 modules/Employees/views/view.list.php
create mode 100644 modules/Groups/Delete.php
create mode 100644 modules/Groups/DetailView.html
create mode 100644 modules/Groups/DetailView.php
create mode 100644 modules/Groups/EditView.html
create mode 100644 modules/Groups/EditView.php
create mode 100644 modules/Groups/Forms.php
create mode 100644 modules/Groups/Group.php
create mode 100644 modules/Groups/ListView.html
create mode 100644 modules/Groups/ListView.php
create mode 100644 modules/Groups/Menu.php
create mode 100644 modules/Groups/Save.php
create mode 100644 modules/Groups/index.php
create mode 100644 modules/Groups/language/en_us.lang.php
create mode 100644 modules/Groups/vardefs.php
create mode 100644 modules/Help/Menu.php
create mode 100644 modules/Help/index.php
create mode 100644 modules/Help/language/en_us.lang.php
create mode 100644 modules/History/language/en_us.lang.php
create mode 100644 modules/History/metadata/subpaneldefs.php
create mode 100644 modules/Home/About.php
create mode 100644 modules/Home/AddToFavorites.php
create mode 100644 modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.en_us.lang.php
create mode 100644 modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.meta.php
create mode 100644 modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.php
create mode 100644 modules/Home/Dashlets/ChartsDashlet/ChartsDashletScript.tpl
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.en_us.lang.php
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.icon.jpg
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.meta.php
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.php
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.tpl
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersDashletScript.tpl
create mode 100644 modules/Home/Dashlets/InvadersDashlet/InvadersOptions.tpl
create mode 100644 modules/Home/Dashlets/InvadersDashlet/sprites/alien.png
create mode 100644 modules/Home/Dashlets/InvadersDashlet/sprites/bg.png
create mode 100644 modules/Home/Dashlets/InvadersDashlet/sprites/cube.png
create mode 100644 modules/Home/Dashlets/InvadersDashlet/sprites/player.png
create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.en_us.lang.php
create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.meta.php
create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.php
create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.tpl
create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashletOptions.tpl
create mode 100644 modules/Home/Dashlets/JotPadDashlet/JotPadDashletScript.tpl
create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashlet.en_us.lang.php
create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashlet.icon.jpg
create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashlet.meta.php
create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashlet.php
create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashlet.tpl
create mode 100644 modules/Home/Dashlets/RSSDashlet/RSSDashletOptions.tpl
create mode 100644 modules/Home/Dashlets/SugarNewsDashlet/SugarNewsDashlet.meta.php
create mode 100644 modules/Home/Dashlets/SugarNewsDashlet/SugarNewsDashlet.php
create mode 100644 modules/Home/Dashlets/SugarNewsDashlet/configure.tpl
create mode 100644 modules/Home/Dashlets/iFrameDashlet/configure.tpl
create mode 100644 modules/Home/Dashlets/iFrameDashlet/iFrameDashlet.meta.php
create mode 100644 modules/Home/Dashlets/iFrameDashlet/iFrameDashlet.php
create mode 100644 modules/Home/DynamicAction.php
create mode 100644 modules/Home/Home.html
create mode 100644 modules/Home/Home.tpl
create mode 100644 modules/Home/LastViewed.php
create mode 100644 modules/Home/Menu.php
create mode 100644 modules/Home/PopupSugar.php
create mode 100644 modules/Home/SaveSubpanelLayout.php
create mode 100644 modules/Home/SubpanelCreates.php
create mode 100644 modules/Home/TrainingPortal.php
create mode 100644 modules/Home/TrainingPortal.tpl
create mode 100644 modules/Home/UnifiedSearch.php
create mode 100644 modules/Home/UnifiedSearchAdvanced.php
create mode 100644 modules/Home/UnifiedSearchAdvanced.tpl
create mode 100644 modules/Home/UnifiedSearchAdvancedForm.tpl
create mode 100644 modules/Home/UnifiedSearchAdvancedResults.tpl
create mode 100644 modules/Home/about.js
create mode 100644 modules/Home/action_view_map.php
create mode 100644 modules/Home/dashlets.php
create mode 100644 modules/Home/index.php
create mode 100644 modules/Home/language/en_us.lang.php
create mode 100644 modules/Home/quicksearchQuery.php
create mode 100644 modules/Home/sitemap.php
create mode 100644 modules/Home/sitemap.tpl
create mode 100644 modules/Home/views/view.additionaldetailsretrieve.php
create mode 100644 modules/Home/views/view.list.php
create mode 100644 modules/Home/views/view.modulelistmenu.php
create mode 100644 modules/Import/Forms.php
create mode 100644 modules/Import/ImportCacheFiles.php
create mode 100644 modules/Import/ImportDuplicateCheck.php
create mode 100644 modules/Import/ImportFieldSanitize.php
create mode 100644 modules/Import/ImportFile.php
create mode 100644 modules/Import/ImportFileSplitter.php
create mode 100644 modules/Import/ImportMap.php
create mode 100644 modules/Import/ImportMapAct.php
create mode 100644 modules/Import/ImportMapCsv.php
create mode 100644 modules/Import/ImportMapOther.php
create mode 100644 modules/Import/ImportMapOutlook.php
create mode 100644 modules/Import/ImportMapSalesforce.php
create mode 100644 modules/Import/ImportMapTab.php
create mode 100644 modules/Import/Menu.php
create mode 100644 modules/Import/UsersLastImport.php
create mode 100644 modules/Import/controller.php
create mode 100644 modules/Import/language/en_us.lang.php
create mode 100644 modules/Import/tpls/error.tpl
create mode 100644 modules/Import/tpls/last.tpl
create mode 100644 modules/Import/tpls/step1.tpl
create mode 100644 modules/Import/tpls/step2.tpl
create mode 100644 modules/Import/tpls/step3.tpl
create mode 100644 modules/Import/tpls/undo.tpl
create mode 100644 modules/Import/vardefs.php
create mode 100644 modules/Import/views/view.error.php
create mode 100644 modules/Import/views/view.last.php
create mode 100644 modules/Import/views/view.step1.php
create mode 100644 modules/Import/views/view.step2.php
create mode 100644 modules/Import/views/view.step3.php
create mode 100644 modules/Import/views/view.step4.php
create mode 100644 modules/Import/views/view.undo.php
create mode 100644 modules/InboundEmail/Delete.php
create mode 100644 modules/InboundEmail/DetailView.html
create mode 100644 modules/InboundEmail/DetailView.php
create mode 100644 modules/InboundEmail/EditGroupFolder.php
create mode 100644 modules/InboundEmail/EditView.html
create mode 100644 modules/InboundEmail/EditView.php
create mode 100644 modules/InboundEmail/InboundEmail.js
create mode 100644 modules/InboundEmail/InboundEmail.php
create mode 100644 modules/InboundEmail/InboundEmailTest.php
create mode 100644 modules/InboundEmail/ListView.html
create mode 100644 modules/InboundEmail/ListView.php
create mode 100644 modules/InboundEmail/Menu.php
create mode 100644 modules/InboundEmail/Popup.php
create mode 100644 modules/InboundEmail/Save.php
create mode 100644 modules/InboundEmail/SaveGroupFolder.php
create mode 100644 modules/InboundEmail/ShowInboundFoldersList.php
create mode 100644 modules/InboundEmail/View.html
create mode 100644 modules/InboundEmail/field_arrays.php
create mode 100644 modules/InboundEmail/index.php
create mode 100644 modules/InboundEmail/language/en_us.lang.php
create mode 100644 modules/InboundEmail/vardefs.php
create mode 100644 modules/LabelEditor/EditView.html
create mode 100644 modules/LabelEditor/EditView.php
create mode 100644 modules/LabelEditor/Forms.php
create mode 100644 modules/LabelEditor/LabelList.php
create mode 100644 modules/LabelEditor/Menu.php
create mode 100644 modules/LabelEditor/Save.php
create mode 100644 modules/LabelEditor/language/en_us.lang.php
create mode 100644 modules/Leads/Capture.php
create mode 100644 modules/Leads/Dashlets/MyLeadsDashlet/MyLeadsDashlet.data.php
create mode 100644 modules/Leads/Dashlets/MyLeadsDashlet/MyLeadsDashlet.meta.php
create mode 100644 modules/Leads/Dashlets/MyLeadsDashlet/MyLeadsDashlet.php
create mode 100644 modules/Leads/Lead.js
create mode 100644 modules/Leads/Lead.php
create mode 100644 modules/Leads/LeadFormBase.php
create mode 100644 modules/Leads/LeadsQuickCreate.php
create mode 100644 modules/Leads/Menu.php
create mode 100644 modules/Leads/MyLeads.html
create mode 100644 modules/Leads/MyLeads.php
create mode 100644 modules/Leads/Popup_picker.html
create mode 100644 modules/Leads/Save.php
create mode 100644 modules/Leads/SubPanelView.html
create mode 100644 modules/Leads/SubPanelView.php
create mode 100644 modules/Leads/SugarFeeds/LeadFeed.php
create mode 100644 modules/Leads/action_view_map.php
create mode 100644 modules/Leads/controller.php
create mode 100644 modules/Leads/field_arrays.php
create mode 100644 modules/Leads/language/en_us.lang.php
create mode 100644 modules/Leads/metadata/SearchFields.php
create mode 100644 modules/Leads/metadata/additionalDetails.php
create mode 100644 modules/Leads/metadata/convertdefs.php
create mode 100644 modules/Leads/metadata/detailviewdefs.php
create mode 100644 modules/Leads/metadata/editviewdefs.php
create mode 100644 modules/Leads/metadata/listviewdefs.php
create mode 100644 modules/Leads/metadata/popupdefs.php
create mode 100644 modules/Leads/metadata/quickcreatedefs.php
create mode 100644 modules/Leads/metadata/searchdefs.php
create mode 100644 modules/Leads/metadata/studio.php
create mode 100644 modules/Leads/metadata/subpaneldefs.php
create mode 100644 modules/Leads/metadata/subpanels/ForCalls.php
create mode 100644 modules/Leads/metadata/subpanels/ForEmails.php
create mode 100644 modules/Leads/metadata/subpanels/ForMeetings.php
create mode 100644 modules/Leads/metadata/subpanels/default.php
create mode 100644 modules/Leads/tpls/ConvertLead.tpl
create mode 100644 modules/Leads/tpls/ConvertLeadFooter.tpl
create mode 100644 modules/Leads/tpls/ConvertLeadHeader.tpl
create mode 100644 modules/Leads/tpls/DetailViewHeader.tpl
create mode 100644 modules/Leads/tpls/QuickCreate.tpl
create mode 100644 modules/Leads/vardefs.php
create mode 100644 modules/Leads/views/view.convertlead.php
create mode 100644 modules/Leads/views/view.list.php
create mode 100644 modules/MailMerge/DetailView.php
create mode 100644 modules/MailMerge/EditView.php
create mode 100644 modules/MailMerge/MailMerge.php
create mode 100644 modules/MailMerge/Menu.php
create mode 100644 modules/MailMerge/Merge.html
create mode 100644 modules/MailMerge/Merge.php
create mode 100644 modules/MailMerge/Save.php
create mode 100644 modules/MailMerge/Step1.html
create mode 100644 modules/MailMerge/Step1.php
create mode 100644 modules/MailMerge/Step2.html
create mode 100644 modules/MailMerge/Step2.php
create mode 100644 modules/MailMerge/Step3.html
create mode 100644 modules/MailMerge/Step3.php
create mode 100644 modules/MailMerge/Step4.html
create mode 100644 modules/MailMerge/Step4.php
create mode 100644 modules/MailMerge/Step5.html
create mode 100644 modules/MailMerge/Step5.php
create mode 100644 modules/MailMerge/get_doc.php
create mode 100644 modules/MailMerge/index.php
create mode 100644 modules/MailMerge/language/en_us.lang.php
create mode 100644 modules/MailMerge/modules_array.php
create mode 100644 modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.data.php
create mode 100644 modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.meta.php
create mode 100644 modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.php
create mode 100644 modules/Meetings/JoinExternalMeeting.php
create mode 100644 modules/Meetings/Meeting.php
create mode 100644 modules/Meetings/MeetingFormBase.php
create mode 100644 modules/Meetings/MeetingsQuickCreate.php
create mode 100644 modules/Meetings/Menu.php
create mode 100644 modules/Meetings/Save.php
create mode 100644 modules/Meetings/SubPanelViewInvitees.html
create mode 100644 modules/Meetings/SubPanelViewInvitees.php
create mode 100644 modules/Meetings/action_view_map.php
create mode 100644 modules/Meetings/field_arrays.php
create mode 100644 modules/Meetings/jsclass_scheduler.js
create mode 100644 modules/Meetings/language/en_us.lang.php
create mode 100644 modules/Meetings/metadata/SearchFields.php
create mode 100644 modules/Meetings/metadata/additionalDetails.php
create mode 100644 modules/Meetings/metadata/detailviewdefs.php
create mode 100644 modules/Meetings/metadata/editviewdefs.php
create mode 100644 modules/Meetings/metadata/listviewdefs.php
create mode 100644 modules/Meetings/metadata/quickcreatedefs.php
create mode 100644 modules/Meetings/metadata/searchdefs.php
create mode 100644 modules/Meetings/metadata/studio.php
create mode 100644 modules/Meetings/metadata/subpaneldefs.php
create mode 100644 modules/Meetings/metadata/subpanels/ForActivities.php
create mode 100644 modules/Meetings/metadata/subpanels/ForHistory.php
create mode 100644 modules/Meetings/metadata/subpanels/default.php
create mode 100644 modules/Meetings/tpls/QuickCreate.tpl
create mode 100644 modules/Meetings/tpls/extMeetingNoStart.tpl
create mode 100644 modules/Meetings/tpls/extMeetingNotInvited.tpl
create mode 100644 modules/Meetings/tpls/footer.tpl
create mode 100644 modules/Meetings/tpls/header.tpl
create mode 100644 modules/Meetings/vardefs.php
create mode 100644 modules/Meetings/views/view.edit.php
create mode 100644 modules/Meetings/views/view.listbytype.php
create mode 100644 modules/MergeRecords/Menu.php
create mode 100644 modules/MergeRecords/Merge.js
create mode 100644 modules/MergeRecords/MergeField.html
create mode 100644 modules/MergeRecords/MergeRecord.php
create mode 100644 modules/MergeRecords/SaveMerge.php
create mode 100644 modules/MergeRecords/SearchForm.html
create mode 100644 modules/MergeRecords/Step1.html
create mode 100644 modules/MergeRecords/Step1.php
create mode 100644 modules/MergeRecords/Step2.html
create mode 100644 modules/MergeRecords/Step2.php
create mode 100644 modules/MergeRecords/Step3.html
create mode 100644 modules/MergeRecords/Step3.php
create mode 100644 modules/MergeRecords/controller.php
create mode 100644 modules/MergeRecords/index.php
create mode 100644 modules/MergeRecords/language/en_us.lang.php
create mode 100644 modules/MergeRecords/vardefs.php
create mode 100644 modules/ModuleBuilder/Forms.php
create mode 100644 modules/ModuleBuilder/MB/AjaxCompose.php
create mode 100644 modules/ModuleBuilder/MB/MBField.php
create mode 100644 modules/ModuleBuilder/MB/MBLanguage.php
create mode 100644 modules/ModuleBuilder/MB/MBModule.php
create mode 100644 modules/ModuleBuilder/MB/MBPackage.php
create mode 100644 modules/ModuleBuilder/MB/MBPackageTree.php
create mode 100644 modules/ModuleBuilder/MB/MBRelationship.php
create mode 100644 modules/ModuleBuilder/MB/MBVardefs.php
create mode 100644 modules/ModuleBuilder/MB/ModuleBuilder.php
create mode 100644 modules/ModuleBuilder/MB/header.php
create mode 100644 modules/ModuleBuilder/Module/DropDownBrowser.php
create mode 100644 modules/ModuleBuilder/Module/DropDownTree.php
create mode 100644 modules/ModuleBuilder/Module/MainTree.php
create mode 100644 modules/ModuleBuilder/Module/StudioBrowser.php
create mode 100644 modules/ModuleBuilder/Module/StudioModule.php
create mode 100644 modules/ModuleBuilder/Module/StudioModuleFactory.php
create mode 100644 modules/ModuleBuilder/Module/StudioTree.php
create mode 100644 modules/ModuleBuilder/action_view_map.php
create mode 100644 modules/ModuleBuilder/controller.php
create mode 100644 modules/ModuleBuilder/javascript/JSTransaction.js
create mode 100644 modules/ModuleBuilder/javascript/ModuleBuilder.js
create mode 100644 modules/ModuleBuilder/javascript/SimpleList.js
create mode 100644 modules/ModuleBuilder/javascript/studio2.js
create mode 100644 modules/ModuleBuilder/javascript/studio2FieldDD.js
create mode 100644 modules/ModuleBuilder/javascript/studio2ListDD.js
create mode 100644 modules/ModuleBuilder/javascript/studio2PanelDD.js
create mode 100644 modules/ModuleBuilder/javascript/studio2RowDD.js
create mode 100644 modules/ModuleBuilder/javascript/studiotabgroups.js
create mode 100644 modules/ModuleBuilder/javascript/wizardTemplate.js
create mode 100644 modules/ModuleBuilder/language/en_us.lang.php
create mode 100644 modules/ModuleBuilder/parsers/ModuleBuilderParser.php
create mode 100644 modules/ModuleBuilder/parsers/ParserFactory.php
create mode 100644 modules/ModuleBuilder/parsers/StandardField.php
create mode 100644 modules/ModuleBuilder/parsers/constants.php
create mode 100644 modules/ModuleBuilder/parsers/parser.dropdown.php
create mode 100644 modules/ModuleBuilder/parsers/parser.label.php
create mode 100644 modules/ModuleBuilder/parsers/parser.modifylayoutview.php
create mode 100644 modules/ModuleBuilder/parsers/parser.modifylistview.php
create mode 100644 modules/ModuleBuilder/parsers/parser.modifysubpanel.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/AbstractRelationship.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/AbstractRelationships.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/ActivitiesRelationship.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/DeployedRelationships.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/ManyToManyRelationship.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/ManyToOneRelationship.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/OneToManyRelationship.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/OneToOneRelationship.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/RelationshipFactory.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/RelationshipsInterface.php
create mode 100644 modules/ModuleBuilder/parsers/relationships/UndeployedRelationships.php
create mode 100644 modules/ModuleBuilder/parsers/views/AbstractMetaDataImplementation.php
create mode 100644 modules/ModuleBuilder/parsers/views/AbstractMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/DashletMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/DeployedMetaDataImplementation.php
create mode 100644 modules/ModuleBuilder/parsers/views/DeployedSubpanelImplementation.php
create mode 100644 modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/History.php
create mode 100644 modules/ModuleBuilder/parsers/views/HistoryInterface.php
create mode 100644 modules/ModuleBuilder/parsers/views/ListLayoutMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/MetaDataImplementationInterface.php
create mode 100644 modules/ModuleBuilder/parsers/views/MetaDataParserInterface.php
create mode 100644 modules/ModuleBuilder/parsers/views/PopupMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/SearchViewMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/SubpanelMetaDataParser.php
create mode 100644 modules/ModuleBuilder/parsers/views/UndeployedMetaDataImplementation.php
create mode 100644 modules/ModuleBuilder/parsers/views/UndeployedSubpanelImplementation.php
create mode 100644 modules/ModuleBuilder/tpls/LayoutEditor.css
create mode 100644 modules/ModuleBuilder/tpls/ListEditor.css
create mode 100644 modules/ModuleBuilder/tpls/MB.css
create mode 100644 modules/ModuleBuilder/tpls/MBModule/Class.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/DeveloperClass.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/Menu.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/Studio.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/dropdown.css
create mode 100644 modules/ModuleBuilder/tpls/MBModule/dropdown.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/dropdowns.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/field.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/fields.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/form.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/language.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/main.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/module.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBModule/vardef.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBPackage/appLanguage.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBPackage/deploy.tpl
create mode 100644 modules/ModuleBuilder/tpls/MBPackage/package.tpl
create mode 100644 modules/ModuleBuilder/tpls/Preview/layoutView.tpl
create mode 100644 modules/ModuleBuilder/tpls/Preview/listView.tpl
create mode 100644 modules/ModuleBuilder/tpls/assistantJavascript.tpl
create mode 100644 modules/ModuleBuilder/tpls/editProperty.tpl
create mode 100644 modules/ModuleBuilder/tpls/exportcustomizations.tpl
create mode 100644 modules/ModuleBuilder/tpls/history.tpl
create mode 100644 modules/ModuleBuilder/tpls/includes.tpl
create mode 100644 modules/ModuleBuilder/tpls/index.tpl
create mode 100644 modules/ModuleBuilder/tpls/labels.tpl
create mode 100644 modules/ModuleBuilder/tpls/layoutView.tpl
create mode 100644 modules/ModuleBuilder/tpls/listView.tpl
create mode 100644 modules/ModuleBuilder/tpls/main.tpl
create mode 100644 modules/ModuleBuilder/tpls/resetModule.tpl
create mode 100644 modules/ModuleBuilder/tpls/studioRelationship.tpl
create mode 100644 modules/ModuleBuilder/tpls/studioRelationships.tpl
create mode 100644 modules/ModuleBuilder/tpls/tabBG.png
create mode 100644 modules/ModuleBuilder/tpls/wizard.tpl
create mode 100644 modules/ModuleBuilder/views/view.dashlet.php
create mode 100644 modules/ModuleBuilder/views/view.deletemodule.php
create mode 100644 modules/ModuleBuilder/views/view.deletepackage.php
create mode 100644 modules/ModuleBuilder/views/view.displaydeploy.php
create mode 100644 modules/ModuleBuilder/views/view.displaydeployresult.php
create mode 100644 modules/ModuleBuilder/views/view.dropdown.php
create mode 100644 modules/ModuleBuilder/views/view.dropdowns.php
create mode 100644 modules/ModuleBuilder/views/view.exportcustomizations.php
create mode 100644 modules/ModuleBuilder/views/view.history.php
create mode 100644 modules/ModuleBuilder/views/view.home.php
create mode 100644 modules/ModuleBuilder/views/view.labels.php
create mode 100644 modules/ModuleBuilder/views/view.layoutview.php
create mode 100644 modules/ModuleBuilder/views/view.listview.php
create mode 100644 modules/ModuleBuilder/views/view.main.php
create mode 100644 modules/ModuleBuilder/views/view.module.php
create mode 100644 modules/ModuleBuilder/views/view.modulefield.php
create mode 100644 modules/ModuleBuilder/views/view.modulefields.php
create mode 100644 modules/ModuleBuilder/views/view.modulelabels.php
create mode 100644 modules/ModuleBuilder/views/view.package.php
create mode 100644 modules/ModuleBuilder/views/view.popupview.php
create mode 100644 modules/ModuleBuilder/views/view.property.php
create mode 100644 modules/ModuleBuilder/views/view.relationship.php
create mode 100644 modules/ModuleBuilder/views/view.relationships.php
create mode 100644 modules/ModuleBuilder/views/view.resetmodule.php
create mode 100644 modules/ModuleBuilder/views/view.searchview.php
create mode 100644 modules/ModuleBuilder/views/view.tree.php
create mode 100644 modules/ModuleBuilder/views/view.wizard.php
create mode 100644 modules/MySettings/LoadTabSubpanels.php
create mode 100644 modules/MySettings/StoreQuery.php
create mode 100644 modules/MySettings/TabController.php
create mode 100644 modules/MySettings/language/en_us.lang.php
create mode 100644 modules/Notes/Dashlets/MyNotesDashlet/MyNotesDashlet.data.php
create mode 100644 modules/Notes/Dashlets/MyNotesDashlet/MyNotesDashlet.meta.php
create mode 100644 modules/Notes/Dashlets/MyNotesDashlet/MyNotesDashlet.php
create mode 100644 modules/Notes/Menu.php
create mode 100644 modules/Notes/Note.php
create mode 100644 modules/Notes/NoteSoap.php
create mode 100644 modules/Notes/NotesQuickCreate.php
create mode 100644 modules/Notes/SubPanelView.html
create mode 100644 modules/Notes/SubPanelView.php
create mode 100644 modules/Notes/controller.php
create mode 100644 modules/Notes/field_arrays.php
create mode 100644 modules/Notes/language/en_us.lang.php
create mode 100644 modules/Notes/metadata/SearchFields.php
create mode 100644 modules/Notes/metadata/additionalDetails.php
create mode 100644 modules/Notes/metadata/detailviewdefs.php
create mode 100644 modules/Notes/metadata/editviewdefs.php
create mode 100644 modules/Notes/metadata/listviewdefs.php
create mode 100644 modules/Notes/metadata/quickcreatedefs.php
create mode 100644 modules/Notes/metadata/searchdefs.php
create mode 100644 modules/Notes/metadata/studio.php
create mode 100644 modules/Notes/metadata/subpanels/ForCalls.php
create mode 100644 modules/Notes/metadata/subpanels/ForHistory.php
create mode 100644 modules/Notes/metadata/subpanels/ForMeetings.php
create mode 100644 modules/Notes/metadata/subpanels/default.php
create mode 100644 modules/Notes/tpls/EditViewHeader.tpl
create mode 100644 modules/Notes/tpls/QuickCreate.tpl
create mode 100644 modules/Notes/vardefs.php
create mode 100644 modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashlet.meta.php
create mode 100644 modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashlet.php
create mode 100644 modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashlet.tpl
create mode 100644 modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashletConfigure.tpl
create mode 100644 modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashletOptions.tpl
create mode 100644 modules/Opportunities/Dashlets/MyOpportunitiesDashlet/MyOpportunitiesDashlet.data.php
create mode 100644 modules/Opportunities/Dashlets/MyOpportunitiesDashlet/MyOpportunitiesDashlet.meta.php
create mode 100644 modules/Opportunities/Dashlets/MyOpportunitiesDashlet/MyOpportunitiesDashlet.php
create mode 100644 modules/Opportunities/ListViewTop.html
create mode 100644 modules/Opportunities/ListViewTop.php
create mode 100644 modules/Opportunities/Menu.php
create mode 100644 modules/Opportunities/OpportunitiesQuickCreate.php
create mode 100644 modules/Opportunities/Opportunity.php
create mode 100644 modules/Opportunities/OpportunityFormBase.php
create mode 100644 modules/Opportunities/Save.php
create mode 100644 modules/Opportunities/SaveOverload.php
create mode 100644 modules/Opportunities/SubPanelView.html
create mode 100644 modules/Opportunities/SubPanelView.php
create mode 100644 modules/Opportunities/SubPanelViewProjects.html
create mode 100644 modules/Opportunities/SubPanelViewProjects.php
create mode 100644 modules/Opportunities/SugarFeeds/OppFeed.php
create mode 100644 modules/Opportunities/field_arrays.php
create mode 100644 modules/Opportunities/language/en_us.lang.php
create mode 100644 modules/Opportunities/metadata/SearchFields.php
create mode 100644 modules/Opportunities/metadata/acldefs.php
create mode 100644 modules/Opportunities/metadata/additionalDetails.php
create mode 100644 modules/Opportunities/metadata/detailviewdefs.php
create mode 100644 modules/Opportunities/metadata/editviewdefs.php
create mode 100644 modules/Opportunities/metadata/listviewdefs.php
create mode 100644 modules/Opportunities/metadata/metafiles.php
create mode 100644 modules/Opportunities/metadata/popupdefs.php
create mode 100644 modules/Opportunities/metadata/quickcreatedefs.php
create mode 100644 modules/Opportunities/metadata/searchdefs.php
create mode 100644 modules/Opportunities/metadata/studio.php
create mode 100644 modules/Opportunities/metadata/subpaneldefs.php
create mode 100644 modules/Opportunities/metadata/subpanels/ForAccounts.php
create mode 100644 modules/Opportunities/metadata/subpanels/ForEmails.php
create mode 100644 modules/Opportunities/metadata/subpanels/default.php
create mode 100644 modules/Opportunities/tpls/QuickCreate.tpl
create mode 100644 modules/Opportunities/vardefs.php
create mode 100644 modules/Opportunities/views/view.detail.php
create mode 100644 modules/Opportunities/views/view.edit.php
create mode 100644 modules/OptimisticLock/Forms.php
create mode 100644 modules/OptimisticLock/LockResolve.php
create mode 100644 modules/OptimisticLock/Menu.php
create mode 100644 modules/OptimisticLock/language/en_us.lang.php
create mode 100644 modules/Project/Delete.php
create mode 100644 modules/Project/Menu.php
create mode 100644 modules/Project/Project.js
create mode 100644 modules/Project/Project.php
create mode 100644 modules/Project/ProjectQuickCreate.php
create mode 100644 modules/Project/Save.php
create mode 100644 modules/Project/SubPanelView.html
create mode 100644 modules/Project/SubPanelView.php
create mode 100644 modules/Project/action_view_map.php
create mode 100644 modules/Project/field_arrays.php
create mode 100644 modules/Project/language/en_us.lang.php
create mode 100644 modules/Project/metadata/SearchFields.php
create mode 100644 modules/Project/metadata/additionalDetails.php
create mode 100644 modules/Project/metadata/detailviewdefs.php
create mode 100644 modules/Project/metadata/editviewdefs.php
create mode 100644 modules/Project/metadata/listviewdefs.php
create mode 100644 modules/Project/metadata/metafiles.php
create mode 100644 modules/Project/metadata/popupdefs.php
create mode 100644 modules/Project/metadata/quickcreatedefs.php
create mode 100644 modules/Project/metadata/searchdefs.php
create mode 100644 modules/Project/metadata/studio.php
create mode 100644 modules/Project/metadata/subpaneldefs.php
create mode 100644 modules/Project/metadata/subpanels/ForEmails.php
create mode 100644 modules/Project/metadata/subpanels/default.php
create mode 100644 modules/Project/tpls/QuickCreate.tpl
create mode 100644 modules/Project/vardefs.php
create mode 100644 modules/Project/views/view.detail.php
create mode 100644 modules/Project/views/view.edit.php
create mode 100644 modules/Project/views/view.list.php
create mode 100644 modules/Project/views/view.templatesdetail.php
create mode 100644 modules/Project/views/view.templatesedit.php
create mode 100644 modules/ProjectTask/Dashlets/MyProjectTaskDashlet/MyProjectTaskDashlet.data.php
create mode 100644 modules/ProjectTask/Dashlets/MyProjectTaskDashlet/MyProjectTaskDashlet.meta.php
create mode 100644 modules/ProjectTask/Dashlets/MyProjectTaskDashlet/MyProjectTaskDashlet.php
create mode 100644 modules/ProjectTask/Delete.php
create mode 100644 modules/ProjectTask/Forms.html
create mode 100644 modules/ProjectTask/Menu.php
create mode 100644 modules/ProjectTask/MyProjectTasks.html
create mode 100644 modules/ProjectTask/MyProjectTasks.php
create mode 100644 modules/ProjectTask/Popup.html
create mode 100644 modules/ProjectTask/Popup.php
create mode 100644 modules/ProjectTask/Popup_picker.html
create mode 100644 modules/ProjectTask/ProjectTask.js
create mode 100644 modules/ProjectTask/ProjectTask.php
create mode 100644 modules/ProjectTask/ProjectTaskQuickCreate.php
create mode 100644 modules/ProjectTask/Save.php
create mode 100644 modules/ProjectTask/SubPanelView.html
create mode 100644 modules/ProjectTask/SubPanelView.php
create mode 100644 modules/ProjectTask/field_arrays.php
create mode 100644 modules/ProjectTask/language/en_us.lang.php
create mode 100644 modules/ProjectTask/metadata/SearchFields.php
create mode 100644 modules/ProjectTask/metadata/acldefs.php
create mode 100644 modules/ProjectTask/metadata/additionalDetails.php
create mode 100644 modules/ProjectTask/metadata/detailviewdefs.php
create mode 100644 modules/ProjectTask/metadata/editviewdefs.php
create mode 100644 modules/ProjectTask/metadata/listviewdefs.php
create mode 100644 modules/ProjectTask/metadata/popupdefs.php
create mode 100644 modules/ProjectTask/metadata/searchdefs.php
create mode 100644 modules/ProjectTask/metadata/studio.php
create mode 100644 modules/ProjectTask/metadata/subpaneldefs.php
create mode 100644 modules/ProjectTask/metadata/subpanels/default.php
create mode 100644 modules/ProjectTask/tpls/QuickCreate.tpl
create mode 100644 modules/ProjectTask/vardefs.php
create mode 100644 modules/ProjectTask/views/view.list.php
create mode 100644 modules/ProspectLists/Delete.php
create mode 100644 modules/ProspectLists/Duplicate.php
create mode 100644 modules/ProspectLists/Forms.html
create mode 100644 modules/ProspectLists/Forms.php
create mode 100644 modules/ProspectLists/Menu.php
create mode 100644 modules/ProspectLists/Popup_picker.html
create mode 100644 modules/ProspectLists/ProspectList.php
create mode 100644 modules/ProspectLists/ProspectListFormBase.php
create mode 100644 modules/ProspectLists/Save.php
create mode 100644 modules/ProspectLists/SubPanelView.html
create mode 100644 modules/ProspectLists/SubPanelView.php
create mode 100644 modules/ProspectLists/TargetListUpdate.php
create mode 100644 modules/ProspectLists/field_arrays.php
create mode 100644 modules/ProspectLists/language/en_us.lang.php
create mode 100644 modules/ProspectLists/metadata/SearchFields.php
create mode 100644 modules/ProspectLists/metadata/detailviewdefs.php
create mode 100644 modules/ProspectLists/metadata/editviewdefs.php
create mode 100644 modules/ProspectLists/metadata/listviewdefs.php
create mode 100644 modules/ProspectLists/metadata/popupdefs.php
create mode 100644 modules/ProspectLists/metadata/searchdefs.php
create mode 100644 modules/ProspectLists/metadata/subpaneldefs.php
create mode 100644 modules/ProspectLists/metadata/subpanels/default.php
create mode 100644 modules/ProspectLists/vardefs.php
create mode 100644 modules/Prospects/Delete.php
create mode 100644 modules/Prospects/Import.php
create mode 100644 modules/Prospects/Menu.php
create mode 100644 modules/Prospects/Popup_picker.html
create mode 100644 modules/Prospects/Prospect.php
create mode 100644 modules/Prospects/ProspectFormBase.php
create mode 100644 modules/Prospects/Save.php
create mode 100644 modules/Prospects/field_arrays.php
create mode 100644 modules/Prospects/language/en_us.lang.php
create mode 100644 modules/Prospects/metadata/SearchFields.php
create mode 100644 modules/Prospects/metadata/additionalDetails.php
create mode 100644 modules/Prospects/metadata/detailviewdefs.php
create mode 100644 modules/Prospects/metadata/editviewdefs.php
create mode 100644 modules/Prospects/metadata/listviewdefs.php
create mode 100644 modules/Prospects/metadata/popupdefs.php
create mode 100644 modules/Prospects/metadata/quickcreatedefs.php
create mode 100644 modules/Prospects/metadata/searchdefs.php
create mode 100644 modules/Prospects/metadata/studio.php
create mode 100644 modules/Prospects/metadata/subpaneldefs.php
create mode 100644 modules/Prospects/metadata/subpanels/default.php
create mode 100644 modules/Prospects/tpls/DetailViewHeader.tpl
create mode 100644 modules/Prospects/vardefs.php
create mode 100644 modules/Prospects/views/view.detail.php
create mode 100644 modules/Prospects/views/view.list.php
create mode 100644 modules/Relationships/Relationship.php
create mode 100644 modules/Relationships/RelationshipHandler.php
create mode 100644 modules/Relationships/field_arrays.php
create mode 100644 modules/Relationships/language/en_us.lang.php
create mode 100644 modules/Relationships/vardefs.php
create mode 100644 modules/Releases/DetailView.php
create mode 100644 modules/Releases/EditView.html
create mode 100644 modules/Releases/EditView.php
create mode 100644 modules/Releases/ListView.html
create mode 100644 modules/Releases/Menu.php
create mode 100644 modules/Releases/Popup_picker.html
create mode 100644 modules/Releases/Popup_picker.php
create mode 100644 modules/Releases/Release.php
create mode 100644 modules/Releases/Save.php
create mode 100644 modules/Releases/field_arrays.php
create mode 100644 modules/Releases/index.php
create mode 100644 modules/Releases/language/en_us.lang.php
create mode 100644 modules/Releases/vardefs.php
create mode 100644 modules/Roles/Delete.php
create mode 100644 modules/Roles/DeleteUserRelationship.php
create mode 100644 modules/Roles/DetailView.html
create mode 100644 modules/Roles/DetailView.php
create mode 100644 modules/Roles/EditView.html
create mode 100644 modules/Roles/EditView.php
create mode 100644 modules/Roles/Forms.php
create mode 100644 modules/Roles/Menu.php
create mode 100644 modules/Roles/Role.php
create mode 100644 modules/Roles/Save.php
create mode 100644 modules/Roles/SaveUserRelationship.php
create mode 100644 modules/Roles/SubPanelViewUsers.html
create mode 100644 modules/Roles/SubPanelViewUsers.php
create mode 100644 modules/Roles/field_arrays.php
create mode 100644 modules/Roles/language/en_us.lang.php
create mode 100644 modules/Roles/metadata/SearchFields.php
create mode 100644 modules/Roles/metadata/listviewdefs.php
create mode 100644 modules/Roles/metadata/searchdefs.php
create mode 100644 modules/Roles/metadata/subpaneldefs.php
create mode 100644 modules/Roles/metadata/subpanels/default.php
create mode 100644 modules/Roles/vardefs.php
create mode 100644 modules/Roles/views/view.list.php
create mode 100644 modules/SavedSearch/ListView.php
create mode 100644 modules/SavedSearch/Menu.php
create mode 100644 modules/SavedSearch/SavedSearch.php
create mode 100644 modules/SavedSearch/SavedSearchForm.tpl
create mode 100644 modules/SavedSearch/SavedSearchSelects.tpl
create mode 100644 modules/SavedSearch/SearchForm.html
create mode 100644 modules/SavedSearch/UpgradeSavedSearch.php
create mode 100644 modules/SavedSearch/field_arrays.php
create mode 100644 modules/SavedSearch/index.php
create mode 100644 modules/SavedSearch/language/en_us.lang.php
create mode 100644 modules/SavedSearch/metadata/listviewdefs.php
create mode 100644 modules/SavedSearch/vardefs.php
create mode 100644 modules/Schedulers/Delete.php
create mode 100644 modules/Schedulers/DeleteScheduled.php
create mode 100644 modules/Schedulers/DetailView.html
create mode 100644 modules/Schedulers/DetailView.php
create mode 100644 modules/Schedulers/EditView.html
create mode 100644 modules/Schedulers/EditView.php
create mode 100644 modules/Schedulers/JobThread.php
create mode 100644 modules/Schedulers/ListView.html
create mode 100644 modules/Schedulers/ListView.php
create mode 100644 modules/Schedulers/Menu.php
create mode 100644 modules/Schedulers/Save.php
create mode 100644 modules/Schedulers/Scheduled.html
create mode 100644 modules/Schedulers/Scheduled.php
create mode 100644 modules/Schedulers/Scheduler.php
create mode 100644 modules/Schedulers/SchedulerDaemon.php
create mode 100644 modules/Schedulers/_AddJobsHere.php
create mode 100644 modules/Schedulers/field_arrays.php
create mode 100644 modules/Schedulers/index.php
create mode 100644 modules/Schedulers/language/en_us.lang.php
create mode 100644 modules/Schedulers/metadata/subpaneldefs.php
create mode 100644 modules/Schedulers/metadata/subpanels/default.php
create mode 100644 modules/Schedulers/vardefs.php
create mode 100644 modules/SchedulersJobs/SchedulersJob.php
create mode 100644 modules/SchedulersJobs/field_arrays.php
create mode 100644 modules/SchedulersJobs/language/en_us.lang.php
create mode 100644 modules/SchedulersJobs/metadata/subpanels/default.php
create mode 100644 modules/SchedulersJobs/vardefs.php
create mode 100644 modules/Studio/DropDowns/DropDownHelper.php
create mode 100644 modules/Studio/DropDowns/EditView.php
create mode 100644 modules/Studio/DropDowns/EditView.tpl
create mode 100644 modules/Studio/Forms.php
create mode 100644 modules/Studio/JSTransaction.js
create mode 100644 modules/Studio/SaveTabs.php
create mode 100644 modules/Studio/TabGroups.php
create mode 100644 modules/Studio/TabGroups/EditViewTabs.php
create mode 100644 modules/Studio/TabGroups/EditViewTabs.tpl
create mode 100644 modules/Studio/TabGroups/TabGroupHelper.php
create mode 100644 modules/Studio/config.php
create mode 100644 modules/Studio/language/en_us.Portal.html
create mode 100644 modules/Studio/language/en_us.lang.php
create mode 100644 modules/Studio/parsers/StudioParser.php
create mode 100644 modules/Studio/studio.js
create mode 100644 modules/Studio/studiodd.js
create mode 100644 modules/Studio/studiotabgroups.js
create mode 100644 modules/Studio/wizard.php
create mode 100644 modules/Studio/wizards/EditDropDownWizard.php
create mode 100644 modules/Studio/wizards/StudioWizard.php
create mode 100644 modules/Studio/ygDDListStudio.js
create mode 100644 modules/SugarFeed/AdminSettings.php
create mode 100644 modules/SugarFeed/Dashlets/SugarFeedDashlet/Options.tpl
create mode 100644 modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedDashlet.meta.php
create mode 100644 modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedDashlet.php
create mode 100644 modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedScript.tpl
create mode 100644 modules/SugarFeed/Dashlets/SugarFeedDashlet/UserPostForm.tpl
create mode 100644 modules/SugarFeed/Forms.php
create mode 100644 modules/SugarFeed/Menu.php
create mode 100644 modules/SugarFeed/SugarFeed.php
create mode 100644 modules/SugarFeed/SugarFeedFlush.php
create mode 100644 modules/SugarFeed/action_view_map.php
create mode 100644 modules/SugarFeed/feedLogicBase.php
create mode 100644 modules/SugarFeed/language/en_us.lang.php
create mode 100644 modules/SugarFeed/linkHandlers/Image.php
create mode 100644 modules/SugarFeed/linkHandlers/Link.php
create mode 100644 modules/SugarFeed/linkHandlers/YouTube.php
create mode 100644 modules/SugarFeed/metadata/SearchFields.php
create mode 100644 modules/SugarFeed/metadata/dashletviewdefs.php
create mode 100644 modules/SugarFeed/metadata/detailviewdefs.php
create mode 100644 modules/SugarFeed/metadata/editviewdefs.php
create mode 100644 modules/SugarFeed/metadata/listviewdefs.php
create mode 100644 modules/SugarFeed/metadata/metafiles.php
create mode 100644 modules/SugarFeed/metadata/popupdefs.php
create mode 100644 modules/SugarFeed/metadata/searchdefs.php
create mode 100644 modules/SugarFeed/metadata/subpanels/default.php
create mode 100644 modules/SugarFeed/tpls/AdminSettings.tpl
create mode 100644 modules/SugarFeed/vardefs.php
create mode 100644 modules/SugarFeed/views/view.adminsettings.php
create mode 100644 modules/TableDictionary.php
create mode 100644 modules/Tasks/Dashlets/MyTasksDashlet/MyTasksDashlet.data.php
create mode 100644 modules/Tasks/Dashlets/MyTasksDashlet/MyTasksDashlet.meta.php
create mode 100644 modules/Tasks/Dashlets/MyTasksDashlet/MyTasksDashlet.php
create mode 100644 modules/Tasks/Menu.php
create mode 100644 modules/Tasks/MyTasks.html
create mode 100644 modules/Tasks/MyTasks.php
create mode 100644 modules/Tasks/Save.php
create mode 100644 modules/Tasks/Task.php
create mode 100644 modules/Tasks/TasksQuickCreate.php
create mode 100644 modules/Tasks/field_arrays.php
create mode 100644 modules/Tasks/language/en_us.lang.php
create mode 100644 modules/Tasks/metadata/SearchFields.php
create mode 100644 modules/Tasks/metadata/additionalDetails.php
create mode 100644 modules/Tasks/metadata/detailviewdefs.php
create mode 100644 modules/Tasks/metadata/editviewdefs.php
create mode 100644 modules/Tasks/metadata/listviewdefs.php
create mode 100644 modules/Tasks/metadata/quickcreatedefs.php
create mode 100644 modules/Tasks/metadata/searchdefs.php
create mode 100644 modules/Tasks/metadata/studio.php
create mode 100644 modules/Tasks/metadata/subpanels/ForActivities.php
create mode 100644 modules/Tasks/metadata/subpanels/ForEmails.php
create mode 100644 modules/Tasks/metadata/subpanels/ForHistory.php
create mode 100644 modules/Tasks/metadata/subpanels/default.php
create mode 100644 modules/Tasks/tpls/QuickCreate.tpl
create mode 100644 modules/Tasks/vardefs.php
create mode 100644 modules/Tasks/views/view.edit.php
create mode 100644 modules/Trackers/BreadCrumbStack.php
create mode 100644 modules/Trackers/Metric.php
create mode 100644 modules/Trackers/Trackable.php
create mode 100644 modules/Trackers/Tracker.php
create mode 100644 modules/Trackers/TrackerManager.php
create mode 100644 modules/Trackers/config.php
create mode 100644 modules/Trackers/language/en_us.lang.php
create mode 100644 modules/Trackers/monitor/BlankMonitor.php
create mode 100644 modules/Trackers/monitor/Monitor.php
create mode 100644 modules/Trackers/monitor/tracker_monitor.php
create mode 100644 modules/Trackers/populateSeedData.php
create mode 100644 modules/Trackers/store/DatabaseStore.php
create mode 100644 modules/Trackers/store/Store.php
create mode 100644 modules/Trackers/store/SugarLogStore.php
create mode 100644 modules/Trackers/store/TrackerQueriesDatabaseStore.php
create mode 100644 modules/Trackers/store/TrackerSessionsDatabaseStore.php
create mode 100644 modules/Trackers/vardefs.php
create mode 100644 modules/UpgradeWizard/Menu.php
create mode 100644 modules/UpgradeWizard/SILENTUPGRADE.txt
create mode 100644 modules/UpgradeWizard/SugarMerge/DetailViewMerge.php
create mode 100644 modules/UpgradeWizard/SugarMerge/EditViewMerge.php
create mode 100644 modules/UpgradeWizard/SugarMerge/ListViewMerge.php
create mode 100644 modules/UpgradeWizard/SugarMerge/QuickCreateMerge.php
create mode 100644 modules/UpgradeWizard/SugarMerge/SearchMerge.php
create mode 100644 modules/UpgradeWizard/SugarMerge/SubpanelMerge.php
create mode 100644 modules/UpgradeWizard/SugarMerge/SugarMerge.php
create mode 100644 modules/UpgradeWizard/UploadFileCheck.php
create mode 100644 modules/UpgradeWizard/cancel.php
create mode 100644 modules/UpgradeWizard/commit.php
create mode 100644 modules/UpgradeWizard/commitJson.php
create mode 100644 modules/UpgradeWizard/deleteCache.php
create mode 100644 modules/UpgradeWizard/end.php
create mode 100644 modules/UpgradeWizard/index.php
create mode 100644 modules/UpgradeWizard/language/en_us.lang.php
create mode 100644 modules/UpgradeWizard/layouts.php
create mode 100644 modules/UpgradeWizard/populateColumns.php
create mode 100644 modules/UpgradeWizard/preflight.php
create mode 100644 modules/UpgradeWizard/preflightJson.php
create mode 100644 modules/UpgradeWizard/processing.gif
create mode 100644 modules/UpgradeWizard/silentUpgrade.php
create mode 100644 modules/UpgradeWizard/silentUpgrade_dce_step1.php
create mode 100644 modules/UpgradeWizard/silentUpgrade_dce_step2.php
create mode 100644 modules/UpgradeWizard/silentUpgrade_step1.php
create mode 100644 modules/UpgradeWizard/silentUpgrade_step2.php
create mode 100644 modules/UpgradeWizard/start.php
create mode 100644 modules/UpgradeWizard/systemCheck.php
create mode 100644 modules/UpgradeWizard/systemCheckJson.php
create mode 100644 modules/UpgradeWizard/tpls/layoutsMerge.tpl
create mode 100644 modules/UpgradeWizard/upgradeMetaHelper.php
create mode 100644 modules/UpgradeWizard/upgradeTimeCounter.php
create mode 100644 modules/UpgradeWizard/upgradeWizard.js
create mode 100644 modules/UpgradeWizard/upload.php
create mode 100644 modules/UpgradeWizard/uw_ajax.php
create mode 100644 modules/UpgradeWizard/uw_emptyFunctions.php
create mode 100644 modules/UpgradeWizard/uw_files.php
create mode 100644 modules/UpgradeWizard/uw_main.tpl
create mode 100644 modules/UpgradeWizard/uw_utils.php
create mode 100644 modules/UserPreferences/UserPreference.php
create mode 100644 modules/UserPreferences/controller.php
create mode 100644 modules/UserPreferences/field_arrays.php
create mode 100644 modules/UserPreferences/index.php
create mode 100644 modules/UserPreferences/vardefs.php
create mode 100644 modules/Users/Authenticate.php
create mode 100644 modules/Users/ChangeGroupTab.php
create mode 100644 modules/Users/ChangePassword.php
create mode 100644 modules/Users/Changenewpassword.php
create mode 100644 modules/Users/Changenewpassword.tpl
create mode 100644 modules/Users/DetailView.js
create mode 100644 modules/Users/DetailView.php
create mode 100644 modules/Users/DetailView.tpl
create mode 100644 modules/Users/EditView.php
create mode 100644 modules/Users/EditView.tpl
create mode 100644 modules/Users/Error.php
create mode 100644 modules/Users/Forms.php
create mode 100644 modules/Users/GeneratePassword.php
create mode 100644 modules/Users/ListRoles.php
create mode 100644 modules/Users/Login.php
create mode 100644 modules/Users/Logout.php
create mode 100644 modules/Users/Menu.php
create mode 100644 modules/Users/PasswordRequirementBox.css
create mode 100644 modules/Users/PasswordRequirementBox.js
create mode 100644 modules/Users/PopupSignature.php
create mode 100644 modules/Users/PopupUsers.php
create mode 100644 modules/Users/Popup_Users_picker.html
create mode 100644 modules/Users/Popup_picker.html
create mode 100644 modules/Users/Save.php
create mode 100644 modules/Users/SaveSignature.php
create mode 100644 modules/Users/SaveTimezone.php
create mode 100644 modules/Users/SetTimezone.php
create mode 100644 modules/Users/SetTimezone.tpl
create mode 100644 modules/Users/User.js
create mode 100644 modules/Users/User.php
create mode 100644 modules/Users/UserSignature.php
create mode 100644 modules/Users/UserSignatureEditView.html
create mode 100644 modules/Users/authentication/AuthenticationController.php
create mode 100644 modules/Users/authentication/EmailAuthenticate/EmailAuthenticate.php
create mode 100644 modules/Users/authentication/EmailAuthenticate/EmailAuthenticateUser.php
create mode 100644 modules/Users/authentication/LDAPAuthenticate/LDAPAuthenticate.php
create mode 100644 modules/Users/authentication/LDAPAuthenticate/LDAPAuthenticateUser.php
create mode 100644 modules/Users/authentication/LDAPAuthenticate/LDAPConfigs/default.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/SAMLAuthenticate.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/SAMLAuthenticateUser.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/index.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/xmlsec.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/CHANGELOG.txt
create mode 100644 modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php
create mode 100644 modules/Users/authentication/SAMLAuthenticate/settings.php
create mode 100644 modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php
create mode 100644 modules/Users/authentication/SugarAuthenticate/SugarAuthenticateUser.php
create mode 100644 modules/Users/controller.php
create mode 100644 modules/Users/field_arrays.php
create mode 100644 modules/Users/language/en_us.lang.php
create mode 100644 modules/Users/login.css
create mode 100644 modules/Users/login.js
create mode 100644 modules/Users/login.tpl
create mode 100644 modules/Users/metadata/SearchFields.php
create mode 100644 modules/Users/metadata/listviewdefs.php
create mode 100644 modules/Users/metadata/popupdefs.php
create mode 100644 modules/Users/metadata/reassignScriptMetadata.php
create mode 100644 modules/Users/metadata/searchdefs.php
create mode 100644 modules/Users/metadata/subpaneldefs.php
create mode 100644 modules/Users/metadata/subpanels/ForCalls.php
create mode 100644 modules/Users/metadata/subpanels/ForEmails.php
create mode 100644 modules/Users/metadata/subpanels/ForMeetings.php
create mode 100644 modules/Users/metadata/subpanels/ForProject.php
create mode 100644 modules/Users/metadata/subpanels/ForProspectLists.php
create mode 100644 modules/Users/metadata/subpanels/ForTeams.php
create mode 100644 modules/Users/metadata/subpanels/default.php
create mode 100644 modules/Users/password_utils.php
create mode 100644 modules/Users/reassignUserRecords.php
create mode 100644 modules/Users/tpls/wizard.tpl
create mode 100644 modules/Users/vardefs.php
create mode 100644 modules/Users/views/view.list.php
create mode 100644 modules/Users/views/view.wizard.php
create mode 100644 modules/Versions/CheckVersions.php
create mode 100644 modules/Versions/DefaultVersions.php
create mode 100644 modules/Versions/ExpectedVersions.php
create mode 100644 modules/Versions/InstallDefaultVersions.php
create mode 100644 modules/Versions/Version.php
create mode 100644 modules/Versions/field_arrays.php
create mode 100644 modules/Versions/index.html
create mode 100644 modules/Versions/language/en_us.lang.php
create mode 100644 modules/Versions/vardefs.php
create mode 100644 modules/vCals/HTTP_WebDAV_Server_vCal.php
create mode 100644 modules/vCals/Server.php
create mode 100644 modules/vCals/field_arrays.php
create mode 100644 modules/vCals/vCal.php
create mode 100644 modules/vCals/vardefs.php
create mode 100644 pdf.php
create mode 100644 removeme.php
create mode 100644 robots.txt
create mode 100644 service/core/NusoapSoap.php
create mode 100644 service/core/PHP5Soap.php
create mode 100644 service/core/REST/SugarRest.php
create mode 100644 service/core/REST/SugarRestJSON.php
create mode 100644 service/core/REST/SugarRestRSS.php
create mode 100644 service/core/REST/SugarRestSerialize.php
create mode 100644 service/core/SoapHelperWebService.php
create mode 100644 service/core/SugarRestService.php
create mode 100644 service/core/SugarRestServiceImpl.php
create mode 100644 service/core/SugarRestUtils.php
create mode 100644 service/core/SugarSoapService.php
create mode 100644 service/core/SugarWebService.php
create mode 100644 service/core/SugarWebServiceImpl.php
create mode 100644 service/core/WSDL.tpl
create mode 100644 service/core/webservice.php
create mode 100644 service/example/Rest_Proxy.php
create mode 100644 service/example/example.html
create mode 100644 service/example/test.html
create mode 100644 service/utils/SugarRest.js
create mode 100644 service/v2/SugarSoapService2.php
create mode 100644 service/v2/registry.php
create mode 100644 service/v2/rest.php
create mode 100644 service/v2/soap.php
create mode 100644 service/v2_1/SugarWebServiceImplv2_1.php
create mode 100644 service/v2_1/registry.php
create mode 100644 service/v2_1/rest.php
create mode 100644 service/v2_1/soap.php
create mode 100644 service/v3/SugarWebServiceImplv3.php
create mode 100644 service/v3/SugarWebServiceUtilv3.php
create mode 100644 service/v3/registry.php
create mode 100644 service/v3/rest.php
create mode 100644 service/v3/soap.php
create mode 100644 service/v3_1/SugarWebServiceImplv3_1.php
create mode 100644 service/v3_1/SugarWebServiceUtilv3_1.php
create mode 100644 service/v3_1/registry.php
create mode 100644 service/v3_1/rest.php
create mode 100644 service/v3_1/soap.php
create mode 100644 service/v4/SugarWebServiceImplv4.php
create mode 100644 service/v4/SugarWebServiceUtilv4.php
create mode 100644 service/v4/registry.php
create mode 100644 service/v4/rest.php
create mode 100644 service/v4/soap.php
create mode 100644 soap.php
create mode 100644 soap/SoapData.php
create mode 100644 soap/SoapDeprecated.php
create mode 100644 soap/SoapError.php
create mode 100644 soap/SoapErrorDefinitions.php
create mode 100644 soap/SoapHelperFunctions.php
create mode 100644 soap/SoapPortalHelper.php
create mode 100644 soap/SoapPortalUsers.php
create mode 100644 soap/SoapRelationshipHelper.php
create mode 100644 soap/SoapStudio.php
create mode 100644 soap/SoapSugarUsers.php
create mode 100644 soap/SoapTypes.php
create mode 100644 sugar_version.php
create mode 100644 themes/Sugar5/css/chart.css
create mode 100644 themes/Sugar5/css/deprecated.css
create mode 100644 themes/Sugar5/css/print.css
create mode 100644 themes/Sugar5/css/style.css
create mode 100644 themes/Sugar5/css/wizard.css
create mode 100644 themes/Sugar5/css/yui.css
create mode 100644 themes/Sugar5/images/ACLRoles.gif
create mode 100644 themes/Sugar5/images/AccountReports.gif
create mode 100644 themes/Sugar5/images/Accounts.gif
create mode 100644 themes/Sugar5/images/ActivitiesReports.gif
create mode 100644 themes/Sugar5/images/Administration.gif
create mode 100644 themes/Sugar5/images/AlertEmailTemplates.gif
create mode 100644 themes/Sugar5/images/AllNews.gif
create mode 100644 themes/Sugar5/images/AllRSS.gif
create mode 100644 themes/Sugar5/images/ArrowButtons.png
create mode 100644 themes/Sugar5/images/Backup.gif
create mode 100644 themes/Sugar5/images/Backups.gif
create mode 100644 themes/Sugar5/images/BugReports.gif
create mode 100644 themes/Sugar5/images/Bugs.gif
create mode 100644 themes/Sugar5/images/Calendar.gif
create mode 100644 themes/Sugar5/images/CallReports.gif
create mode 100644 themes/Sugar5/images/Calls.gif
create mode 100644 themes/Sugar5/images/Campaigns.gif
create mode 100644 themes/Sugar5/images/CampaignsWizard.gif
create mode 100644 themes/Sugar5/images/CaseReports.gif
create mode 100644 themes/Sugar5/images/Cases.gif
create mode 100644 themes/Sugar5/images/ConfigureSubPanels.gif
create mode 100644 themes/Sugar5/images/ConfigureTabs.gif
create mode 100644 themes/Sugar5/images/ContactReports.gif
create mode 100644 themes/Sugar5/images/Contacts.gif
create mode 100644 themes/Sugar5/images/ContractReports.gif
create mode 100644 themes/Sugar5/images/Contracts.gif
create mode 100644 themes/Sugar5/images/CreateAccounts.gif
create mode 100644 themes/Sugar5/images/CreateBugs.gif
create mode 100644 themes/Sugar5/images/CreateCalls.gif
create mode 100644 themes/Sugar5/images/CreateCampaigns.gif
create mode 100644 themes/Sugar5/images/CreateCases.gif
create mode 100644 themes/Sugar5/images/CreateContacts.gif
create mode 100644 themes/Sugar5/images/CreateContracts.gif
create mode 100644 themes/Sugar5/images/CreateCustomQuery.gif
create mode 100644 themes/Sugar5/images/CreateDCEClusters.gif
create mode 100644 themes/Sugar5/images/CreateDCEDataBases.gif
create mode 100644 themes/Sugar5/images/CreateDCEInstances.gif
create mode 100644 themes/Sugar5/images/CreateDCETemplates.gif
create mode 100644 themes/Sugar5/images/CreateDataSet.gif
create mode 100644 themes/Sugar5/images/CreateDocuments.gif
create mode 100644 themes/Sugar5/images/CreateDropdown.gif
create mode 100644 themes/Sugar5/images/CreateEmails.gif
create mode 100644 themes/Sugar5/images/CreateEmployees.gif
create mode 100644 themes/Sugar5/images/CreateHolidays.gif
create mode 100644 themes/Sugar5/images/CreateKBArticle.gif
create mode 100644 themes/Sugar5/images/CreateLeads.gif
create mode 100644 themes/Sugar5/images/CreateMailboxes.gif
create mode 100644 themes/Sugar5/images/CreateMeetings.gif
create mode 100644 themes/Sugar5/images/CreateNotes.gif
create mode 100644 themes/Sugar5/images/CreateOpportunities.gif
create mode 100644 themes/Sugar5/images/CreateProducts.gif
create mode 100644 themes/Sugar5/images/CreateProject.gif
create mode 100644 themes/Sugar5/images/CreateProjectTask.gif
create mode 100644 themes/Sugar5/images/CreateProjectTemplate.gif
create mode 100644 themes/Sugar5/images/CreateProspectLists.gif
create mode 100644 themes/Sugar5/images/CreateProspects.gif
create mode 100644 themes/Sugar5/images/CreateQuery.gif
create mode 100644 themes/Sugar5/images/CreateQuotes.gif
create mode 100644 themes/Sugar5/images/CreateReport.gif
create mode 100644 themes/Sugar5/images/CreateRoles.gif
create mode 100644 themes/Sugar5/images/CreateScheduler.gif
create mode 100644 themes/Sugar5/images/CreateTasks.gif
create mode 100644 themes/Sugar5/images/CreateTeams.gif
create mode 100644 themes/Sugar5/images/CreateTimePeriods.gif
create mode 100644 themes/Sugar5/images/CreateUsers.gif
create mode 100644 themes/Sugar5/images/CreateWebToLeadForm.gif
create mode 100644 themes/Sugar5/images/CreateWorkflowDefinition.gif
create mode 100644 themes/Sugar5/images/CreateiFrames.gif
create mode 100644 themes/Sugar5/images/Currencies.gif
create mode 100644 themes/Sugar5/images/CustomQueries.gif
create mode 100644 themes/Sugar5/images/DCEActions.gif
create mode 100644 themes/Sugar5/images/DCEClusters.gif
create mode 100644 themes/Sugar5/images/DCEDataBases.gif
create mode 100644 themes/Sugar5/images/DCEInstances.gif
create mode 100644 themes/Sugar5/images/DCELicensingReport.gif
create mode 100644 themes/Sugar5/images/DCETemplates.gif
create mode 100644 themes/Sugar5/images/Dashboard.gif
create mode 100644 themes/Sugar5/images/DataSets.gif
create mode 100644 themes/Sugar5/images/Diagnostic.gif
create mode 100644 themes/Sugar5/images/DocumentRevisions.gif
create mode 100644 themes/Sugar5/images/Documents.gif
create mode 100644 themes/Sugar5/images/Dropdown.gif
create mode 100644 themes/Sugar5/images/EditLayout.gif
create mode 100644 themes/Sugar5/images/EmailDiagnostic.gif
create mode 100644 themes/Sugar5/images/EmailFolder.gif
create mode 100644 themes/Sugar5/images/EmailMan.gif
create mode 100644 themes/Sugar5/images/EmailReports.gif
create mode 100644 themes/Sugar5/images/EmailSetupWizard.gif
create mode 100644 themes/Sugar5/images/EmailTemplates.gif
create mode 100644 themes/Sugar5/images/Emails.gif
create mode 100644 themes/Sugar5/images/Employees.gif
create mode 100644 themes/Sugar5/images/ExportCustomFields.gif
create mode 100644 themes/Sugar5/images/FavoriteReports.gif
create mode 100644 themes/Sugar5/images/Feeds.gif
create mode 100644 themes/Sugar5/images/FieldLabels.gif
create mode 100644 themes/Sugar5/images/ForecastReports.gif
create mode 100644 themes/Sugar5/images/ForecastWorksheet.gif
create mode 100644 themes/Sugar5/images/Forecasts.gif
create mode 100644 themes/Sugar5/images/Holidays.gif
create mode 100644 themes/Sugar5/images/Import.gif
create mode 100644 themes/Sugar5/images/ImportCustomFields.gif
create mode 100644 themes/Sugar5/images/InboundEmail.gif
create mode 100644 themes/Sugar5/images/KB.gif
create mode 100644 themes/Sugar5/images/KBArticle.gif
create mode 100644 themes/Sugar5/images/KBDocuments.gif
create mode 100644 themes/Sugar5/images/LanguagePacks.gif
create mode 100644 themes/Sugar5/images/Layout.gif
create mode 100644 themes/Sugar5/images/LeadReports.gif
create mode 100644 themes/Sugar5/images/Leads.gif
create mode 100644 themes/Sugar5/images/License.gif
create mode 100644 themes/Sugar5/images/MailboxesTestImport.gif
create mode 100644 themes/Sugar5/images/Manufacturers.gif
create mode 100644 themes/Sugar5/images/MatrixReport.gif
create mode 100644 themes/Sugar5/images/MatrixReportOver.gif
create mode 100644 themes/Sugar5/images/MeetingReports.gif
create mode 100644 themes/Sugar5/images/Meetings.gif
create mode 100644 themes/Sugar5/images/MigrateFields.gif
create mode 100644 themes/Sugar5/images/ModuleBuilder.gif
create mode 100644 themes/Sugar5/images/ModuleLoader.gif
create mode 100644 themes/Sugar5/images/MoreDetail.png
create mode 100644 themes/Sugar5/images/MyProject.gif
create mode 100644 themes/Sugar5/images/MyReports.gif
create mode 100644 themes/Sugar5/images/Newsletters.gif
create mode 100644 themes/Sugar5/images/Notes.gif
create mode 100644 themes/Sugar5/images/OfflineClient.gif
create mode 100644 themes/Sugar5/images/OnlineDocumentation.gif
create mode 100644 themes/Sugar5/images/Opportunities.gif
create mode 100644 themes/Sugar5/images/OpportunityReports.gif
create mode 100644 themes/Sugar5/images/Password.gif
create mode 100644 themes/Sugar5/images/PatchUpgrades.gif
create mode 100644 themes/Sugar5/images/PriceList.gif
create mode 100644 themes/Sugar5/images/Price_List.gif
create mode 100644 themes/Sugar5/images/Print_Email.gif
create mode 100644 themes/Sugar5/images/ProductCategories.gif
create mode 100644 themes/Sugar5/images/ProductTemplates.gif
create mode 100644 themes/Sugar5/images/ProductTypes.gif
create mode 100644 themes/Sugar5/images/Product_Categories.gif
create mode 100644 themes/Sugar5/images/Product_Types.gif
create mode 100644 themes/Sugar5/images/Products.gif
create mode 100644 themes/Sugar5/images/Project.gif
create mode 100644 themes/Sugar5/images/Project2Weeks.gif
create mode 100644 themes/Sugar5/images/ProjectCollapseAll.gif
create mode 100644 themes/Sugar5/images/ProjectCopy.gif
create mode 100644 themes/Sugar5/images/ProjectCut.gif
create mode 100644 themes/Sugar5/images/ProjectDelete.gif
create mode 100644 themes/Sugar5/images/ProjectExpandAll.gif
create mode 100644 themes/Sugar5/images/ProjectIndent.gif
create mode 100644 themes/Sugar5/images/ProjectInsertRows.gif
create mode 100644 themes/Sugar5/images/ProjectMinus.gif
create mode 100644 themes/Sugar5/images/ProjectMonth.gif
create mode 100644 themes/Sugar5/images/ProjectOutdent.gif
create mode 100644 themes/Sugar5/images/ProjectPaste.gif
create mode 100644 themes/Sugar5/images/ProjectPlus.gif
create mode 100644 themes/Sugar5/images/ProjectSave.gif
create mode 100644 themes/Sugar5/images/ProjectTask.gif
create mode 100644 themes/Sugar5/images/ProjectTemplate.gif
create mode 100644 themes/Sugar5/images/ProjectWeek.gif
create mode 100644 themes/Sugar5/images/ProspectLists.gif
create mode 100644 themes/Sugar5/images/Prospects.gif
create mode 100644 themes/Sugar5/images/QueryBuilder.gif
create mode 100644 themes/Sugar5/images/QuoteReports.gif
create mode 100644 themes/Sugar5/images/Quotes.gif
create mode 100644 themes/Sugar5/images/RSS.gif
create mode 100644 themes/Sugar5/images/ReassignRecords.gif
create mode 100644 themes/Sugar5/images/Rebuild.gif
create mode 100644 themes/Sugar5/images/Rebuild2.gif
create mode 100644 themes/Sugar5/images/Releases.gif
create mode 100644 themes/Sugar5/images/RenameTabs.gif
create mode 100644 themes/Sugar5/images/Repair.gif
create mode 100644 themes/Sugar5/images/ReportMaker.gif
create mode 100644 themes/Sugar5/images/Reports.gif
create mode 100644 themes/Sugar5/images/Roles.gif
create mode 100644 themes/Sugar5/images/RowsAndColumns.gif
create mode 100644 themes/Sugar5/images/RowsAndColumnsOver.gif
create mode 100644 themes/Sugar5/images/SchedulerTest.gif
create mode 100644 themes/Sugar5/images/Schedulers.gif
create mode 100644 themes/Sugar5/images/Search.gif
create mode 100644 themes/Sugar5/images/Shippers.gif
create mode 100644 themes/Sugar5/images/StickyThread.gif
create mode 100644 themes/Sugar5/images/Studio.gif
create mode 100644 themes/Sugar5/images/SugarPortal.gif
create mode 100644 themes/Sugar5/images/Summation.gif
create mode 100644 themes/Sugar5/images/SummationOver.gif
create mode 100644 themes/Sugar5/images/SummationWithDetails.gif
create mode 100644 themes/Sugar5/images/SummationWithDetailsOver.gif
create mode 100644 themes/Sugar5/images/Support.gif
create mode 100644 themes/Sugar5/images/TaskReports.gif
create mode 100644 themes/Sugar5/images/Tasks.gif
create mode 100644 themes/Sugar5/images/TaxRates.gif
create mode 100644 themes/Sugar5/images/Teams.gif
create mode 100644 themes/Sugar5/images/Themes.gif
create mode 100644 themes/Sugar5/images/TimePeriods.gif
create mode 100644 themes/Sugar5/images/Trackers.gif
create mode 100644 themes/Sugar5/images/Upgrade.gif
create mode 100644 themes/Sugar5/images/UpgradeDCEInstances.gif
create mode 100644 themes/Sugar5/images/Users.gif
create mode 100644 themes/Sugar5/images/WorkFlow.gif
create mode 100644 themes/Sugar5/images/WorkflowSequence.gif
create mode 100644 themes/Sugar5/images/_blank.png
create mode 100644 themes/Sugar5/images/accept_inline.gif
create mode 100644 themes/Sugar5/images/advanced_search.gif
create mode 100644 themes/Sugar5/images/arrow.gif
create mode 100644 themes/Sugar5/images/arrow_down.gif
create mode 100644 themes/Sugar5/images/arrow_up.gif
create mode 100644 themes/Sugar5/images/attachment.gif
create mode 100644 themes/Sugar5/images/bar_loader.gif
create mode 100644 themes/Sugar5/images/basic_search.gif
create mode 100644 themes/Sugar5/images/bg.gif
create mode 100644 themes/Sugar5/images/bgBlue.gif
create mode 100644 themes/Sugar5/images/bgBtn.gif
create mode 100644 themes/Sugar5/images/bgBtnBlue.gif
create mode 100644 themes/Sugar5/images/bgBtnGray.gif
create mode 100644 themes/Sugar5/images/bgBtnGreen.gif
create mode 100644 themes/Sugar5/images/bgBtnOrange.gif
create mode 100644 themes/Sugar5/images/bgBtnPurple.gif
create mode 100644 themes/Sugar5/images/bgGray.gif
create mode 100644 themes/Sugar5/images/bgGreen.gif
create mode 100644 themes/Sugar5/images/bgOcher.gif
create mode 100644 themes/Sugar5/images/bgPurple.gif
create mode 100644 themes/Sugar5/images/bgRed.gif
create mode 100644 themes/Sugar5/images/blank.gif
create mode 100644 themes/Sugar5/images/calendarHeaderBg.gif
create mode 100644 themes/Sugar5/images/calendar_next.gif
create mode 100644 themes/Sugar5/images/calendar_previous.gif
create mode 100644 themes/Sugar5/images/check_inline.gif
create mode 100644 themes/Sugar5/images/clear.gif
create mode 100644 themes/Sugar5/images/close.gif
create mode 100644 themes/Sugar5/images/close_dashboard.gif
create mode 100644 themes/Sugar5/images/close_inline.gif
create mode 100644 themes/Sugar5/images/colors.blue.icon.gif
create mode 100644 themes/Sugar5/images/colors.gray.icon.gif
create mode 100644 themes/Sugar5/images/colors.green.icon.gif
create mode 100644 themes/Sugar5/images/colors.orange.icon.gif
create mode 100644 themes/Sugar5/images/colors.purple.icon.gif
create mode 100644 themes/Sugar5/images/colors.red.icon.gif
create mode 100644 themes/Sugar5/images/colors.sugar.icon.gif
create mode 100644 themes/Sugar5/images/currentTab.gif
create mode 100644 themes/Sugar5/images/currentTabBlue.gif
create mode 100644 themes/Sugar5/images/currentTabGray.gif
create mode 100644 themes/Sugar5/images/currentTabGreen.gif
create mode 100644 themes/Sugar5/images/currentTabLinkBg.gif
create mode 100644 themes/Sugar5/images/currentTabOcher.gif
create mode 100644 themes/Sugar5/images/currentTabOff.gif
create mode 100644 themes/Sugar5/images/currentTabPurple.gif
create mode 100644 themes/Sugar5/images/currentTabRed.gif
create mode 100644 themes/Sugar5/images/dce_Settings.gif
create mode 100644 themes/Sugar5/images/decline_inline.gif
create mode 100644 themes/Sugar5/images/def_image_inline.gif
create mode 100644 themes/Sugar5/images/delete.gif
create mode 100644 themes/Sugar5/images/delete_inline.gif
create mode 100644 themes/Sugar5/images/detailViewBg.gif
create mode 100644 themes/Sugar5/images/detailview.gif
create mode 100644 themes/Sugar5/images/doc_image_inline.gif
create mode 100644 themes/Sugar5/images/downarrow.gif
create mode 100644 themes/Sugar5/images/downarrow_big.gif
create mode 100644 themes/Sugar5/images/downarrow_inline.gif
create mode 100644 themes/Sugar5/images/edit.gif
create mode 100644 themes/Sugar5/images/edit_inline.gif
create mode 100644 themes/Sugar5/images/edit_wizard.gif
create mode 100644 themes/Sugar5/images/editfields.gif
create mode 100644 themes/Sugar5/images/editlabels.gif
create mode 100644 themes/Sugar5/images/editview.gif
create mode 100644 themes/Sugar5/images/emptyTabSpace.gif
create mode 100644 themes/Sugar5/images/end.gif
create mode 100644 themes/Sugar5/images/end_off.gif
create mode 100644 themes/Sugar5/images/export.gif
create mode 100644 themes/Sugar5/images/fonts.larger.icon.gif
create mode 100644 themes/Sugar5/images/fonts.largest.icon.gif
create mode 100644 themes/Sugar5/images/fonts.normal.icon.gif
create mode 100644 themes/Sugar5/images/formButtonBg.gif
create mode 100644 themes/Sugar5/images/formButtonBgOn.gif
create mode 100644 themes/Sugar5/images/getLatestDocument.gif
create mode 100644 themes/Sugar5/images/green_camp.gif
create mode 100644 themes/Sugar5/images/h3Arrow.gif
create mode 100644 themes/Sugar5/images/help.gif
create mode 100644 themes/Sugar5/images/helpInline.gif
create mode 100644 themes/Sugar5/images/hide.gif
create mode 100644 themes/Sugar5/images/hide_submenu_shortcuts.gif
create mode 100644 themes/Sugar5/images/iFrames.gif
create mode 100644 themes/Sugar5/images/icon_A1_newmod.gif
create mode 100644 themes/Sugar5/images/icon_Accounts.gif
create mode 100644 themes/Sugar5/images/icon_Accounts_32.gif
create mode 100644 themes/Sugar5/images/icon_Activities.gif
create mode 100644 themes/Sugar5/images/icon_Address.gif
create mode 100644 themes/Sugar5/images/icon_AdminMobile.gif
create mode 100644 themes/Sugar5/images/icon_AdminPDF.gif
create mode 100644 themes/Sugar5/images/icon_AdminThemes.gif
create mode 100644 themes/Sugar5/images/icon_AdvancedSearch.gif
create mode 100644 themes/Sugar5/images/icon_Application.gif
create mode 100644 themes/Sugar5/images/icon_BasicSearch.gif
create mode 100644 themes/Sugar5/images/icon_Bugs.gif
create mode 100644 themes/Sugar5/images/icon_Bugs_32.gif
create mode 100644 themes/Sugar5/images/icon_Calls.gif
create mode 100644 themes/Sugar5/images/icon_Calls_32.gif
create mode 100644 themes/Sugar5/images/icon_CampaignLog_32.gif
create mode 100644 themes/Sugar5/images/icon_Campaigns.gif
create mode 100644 themes/Sugar5/images/icon_Campaigns_32.gif
create mode 100644 themes/Sugar5/images/icon_Cases.gif
create mode 100644 themes/Sugar5/images/icon_Cases_32.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Funnel.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Funnel_32.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Gauge.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Gauge_32.gif
create mode 100644 themes/Sugar5/images/icon_Charts_GroupBy.gif
create mode 100644 themes/Sugar5/images/icon_Charts_GroupBy_32.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Horizontal.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Horizontal_32.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Pie.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Pie_32.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Vertical.gif
create mode 100644 themes/Sugar5/images/icon_Charts_Vertical_32.gif
create mode 100644 themes/Sugar5/images/icon_Column_1.gif
create mode 100644 themes/Sugar5/images/icon_Column_2.gif
create mode 100644 themes/Sugar5/images/icon_Column_3.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorConfig.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorConfigOver.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorConfig_16.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorEnable.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorEnableOver.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorEnable_16.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorMap.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorMapOver.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorMap_16.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorSearchFields.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorSearchFieldsOver.gif
create mode 100644 themes/Sugar5/images/icon_ConnectorSearchFields_16.gif
create mode 100644 themes/Sugar5/images/icon_Connectors.gif
create mode 100644 themes/Sugar5/images/icon_Contacts.gif
create mode 100644 themes/Sugar5/images/icon_Contacts_32.gif
create mode 100644 themes/Sugar5/images/icon_Contracts.gif
create mode 100644 themes/Sugar5/images/icon_Contracts_32.gif
create mode 100644 themes/Sugar5/images/icon_DCEActions_32.gif
create mode 100644 themes/Sugar5/images/icon_DCEClusters_32.gif
create mode 100644 themes/Sugar5/images/icon_DCEDataBases_32.gif
create mode 100644 themes/Sugar5/images/icon_DCEInstances_32.gif
create mode 100644 themes/Sugar5/images/icon_DCEReports_32.gif
create mode 100644 themes/Sugar5/images/icon_DCETemplates_32.gif
create mode 100644 themes/Sugar5/images/icon_Dashlet.gif
create mode 100644 themes/Sugar5/images/icon_Delete.gif
create mode 100644 themes/Sugar5/images/icon_DeleteFull.gif
create mode 100644 themes/Sugar5/images/icon_DetailView.gif
create mode 100644 themes/Sugar5/images/icon_Documents.gif
create mode 100644 themes/Sugar5/images/icon_Documents_32.gif
create mode 100644 themes/Sugar5/images/icon_DropDownEditor.gif
create mode 100644 themes/Sugar5/images/icon_EditView.gif
create mode 100644 themes/Sugar5/images/icon_EmailAddress.gif
create mode 100644 themes/Sugar5/images/icon_EmailAddresses_32.gif
create mode 100644 themes/Sugar5/images/icon_Emails.gif
create mode 100644 themes/Sugar5/images/icon_Emails_32.gif
create mode 100644 themes/Sugar5/images/icon_FavoriteReports.gif
create mode 100644 themes/Sugar5/images/icon_FavoriteReports_32.gif
create mode 100644 themes/Sugar5/images/icon_Feeds_32.gif
create mode 100644 themes/Sugar5/images/icon_Fields.gif
create mode 100644 themes/Sugar5/images/icon_Forecasts.gif
create mode 100644 themes/Sugar5/images/icon_Forecasts_32.gif
create mode 100644 themes/Sugar5/images/icon_Invaders_32.gif
create mode 100644 themes/Sugar5/images/icon_JotPad.gif
create mode 100644 themes/Sugar5/images/icon_JotPad_32.gif
create mode 100644 themes/Sugar5/images/icon_KBDocuments.gif
create mode 100644 themes/Sugar5/images/icon_KBDocuments_32.gif
create mode 100644 themes/Sugar5/images/icon_Labels.gif
create mode 100644 themes/Sugar5/images/icon_Layouts.gif
create mode 100644 themes/Sugar5/images/icon_Leads.gif
create mode 100644 themes/Sugar5/images/icon_Leads_32.gif
create mode 100644 themes/Sugar5/images/icon_ListView.gif
create mode 100644 themes/Sugar5/images/icon_Meetings.gif
create mode 100644 themes/Sugar5/images/icon_Meetings_32.gif
create mode 100644 themes/Sugar5/images/icon_MobileLayouts.gif
create mode 100644 themes/Sugar5/images/icon_ModuleBuilder.gif
create mode 100644 themes/Sugar5/images/icon_MyPortal_32.gif
create mode 100644 themes/Sugar5/images/icon_MyTasks_32.gif
create mode 100644 themes/Sugar5/images/icon_NewModule.gif
create mode 100644 themes/Sugar5/images/icon_Notes.gif
create mode 100644 themes/Sugar5/images/icon_Notes_32.gif
create mode 100644 themes/Sugar5/images/icon_OpenTasks_32.gif
create mode 100644 themes/Sugar5/images/icon_Opportunities.gif
create mode 100644 themes/Sugar5/images/icon_Opportunities_32.gif
create mode 100644 themes/Sugar5/images/icon_Phone.gif
create mode 100644 themes/Sugar5/images/icon_Portal.gif
create mode 100644 themes/Sugar5/images/icon_ProductCategories_32.gif
create mode 100644 themes/Sugar5/images/icon_ProductTemplates.gif
create mode 100644 themes/Sugar5/images/icon_ProductTypes_32.gif
create mode 100644 themes/Sugar5/images/icon_Product_Types_32.gif
create mode 100644 themes/Sugar5/images/icon_Products.gif
create mode 100644 themes/Sugar5/images/icon_Products_32.gif
create mode 100644 themes/Sugar5/images/icon_Project.gif
create mode 100644 themes/Sugar5/images/icon_ProjectTask.gif
create mode 100644 themes/Sugar5/images/icon_ProjectTask_32.gif
create mode 100644 themes/Sugar5/images/icon_Project_32.gif
create mode 100644 themes/Sugar5/images/icon_Projects_32.gif
create mode 100644 themes/Sugar5/images/icon_Prospects.gif
create mode 100644 themes/Sugar5/images/icon_Prospects_32.gif
create mode 100644 themes/Sugar5/images/icon_QuickCreate.gif
create mode 100644 themes/Sugar5/images/icon_Quotes.gif
create mode 100644 themes/Sugar5/images/icon_Quotes_32.gif
create mode 100644 themes/Sugar5/images/icon_Relationships.gif
create mode 100644 themes/Sugar5/images/icon_Releases_32.gif
create mode 100644 themes/Sugar5/images/icon_Reports_32.gif
create mode 100644 themes/Sugar5/images/icon_Rss_32.gif
create mode 100644 themes/Sugar5/images/icon_SPSync.gif
create mode 100644 themes/Sugar5/images/icon_SPUploadCSS.gif
create mode 100644 themes/Sugar5/images/icon_SearchForm.gif
create mode 100644 themes/Sugar5/images/icon_Studio.gif
create mode 100644 themes/Sugar5/images/icon_Subpanels.gif
create mode 100644 themes/Sugar5/images/icon_SugarFeed.gif
create mode 100644 themes/Sugar5/images/icon_SugarFeed_32.gif
create mode 100644 themes/Sugar5/images/icon_SugarNews_32.gif
create mode 100644 themes/Sugar5/images/icon_SugarPortal.gif
create mode 100644 themes/Sugar5/images/icon_Targets_32.gif
create mode 100644 themes/Sugar5/images/icon_Tasks.gif
create mode 100644 themes/Sugar5/images/icon_Tasks_32.gif
create mode 100644 themes/Sugar5/images/icon_Teams_32.gif
create mode 100644 themes/Sugar5/images/icon_TrackerPerfs_32.gif
create mode 100644 themes/Sugar5/images/icon_TrackerQueries_32.gif
create mode 100644 themes/Sugar5/images/icon_TrackerSessions_32.gif
create mode 100644 themes/Sugar5/images/icon_Trackers_32.gif
create mode 100644 themes/Sugar5/images/icon_Users_32.gif
create mode 100644 themes/Sugar5/images/icon_assistant.gif
create mode 100644 themes/Sugar5/images/icon_back.gif
create mode 100644 themes/Sugar5/images/icon_basic.gif
create mode 100644 themes/Sugar5/images/icon_company.gif
create mode 100644 themes/Sugar5/images/icon_document.gif
create mode 100644 themes/Sugar5/images/icon_email_addressbook.gif
create mode 100644 themes/Sugar5/images/icon_email_archive.gif
create mode 100644 themes/Sugar5/images/icon_email_assign.gif
create mode 100644 themes/Sugar5/images/icon_email_attach.gif
create mode 100644 themes/Sugar5/images/icon_email_check.gif
create mode 100644 themes/Sugar5/images/icon_email_compose.gif
create mode 100644 themes/Sugar5/images/icon_email_create.gif
create mode 100644 themes/Sugar5/images/icon_email_delete.gif
create mode 100644 themes/Sugar5/images/icon_email_folder.gif
create mode 100644 themes/Sugar5/images/icon_email_folder_archives.gif
create mode 100644 themes/Sugar5/images/icon_email_folder_drafts.gif
create mode 100644 themes/Sugar5/images/icon_email_folder_exp.gif
create mode 100644 themes/Sugar5/images/icon_email_folder_grp.gif
create mode 100644 themes/Sugar5/images/icon_email_folder_sent.gif
create mode 100644 themes/Sugar5/images/icon_email_forward.gif
create mode 100644 themes/Sugar5/images/icon_email_fullscreen.gif
create mode 100644 themes/Sugar5/images/icon_email_mark.gif
create mode 100644 themes/Sugar5/images/icon_email_options.gif
create mode 100644 themes/Sugar5/images/icon_email_relate.gif
create mode 100644 themes/Sugar5/images/icon_email_reply.gif
create mode 100644 themes/Sugar5/images/icon_email_replyall.gif
create mode 100644 themes/Sugar5/images/icon_email_save.gif
create mode 100644 themes/Sugar5/images/icon_email_send.gif
create mode 100644 themes/Sugar5/images/icon_email_settings.gif
create mode 100644 themes/Sugar5/images/icon_email_sugfolder.gif
create mode 100644 themes/Sugar5/images/icon_email_sugfolder_exp.gif
create mode 100644 themes/Sugar5/images/icon_email_view.gif
create mode 100644 themes/Sugar5/images/icon_email_view1.gif
create mode 100644 themes/Sugar5/images/icon_email_view2.gif
create mode 100644 themes/Sugar5/images/icon_email_view3.gif
create mode 100644 themes/Sugar5/images/icon_expression_types.gif
create mode 100644 themes/Sugar5/images/icon_file.gif
create mode 100644 themes/Sugar5/images/icon_home.gif
create mode 100644 themes/Sugar5/images/icon_iFrames_32.gif
create mode 100644 themes/Sugar5/images/icon_issue.gif
create mode 100644 themes/Sugar5/images/icon_new_package.gif
create mode 100644 themes/Sugar5/images/icon_opportunity.gif
create mode 100644 themes/Sugar5/images/icon_package.gif
create mode 100644 themes/Sugar5/images/icon_package_create.gif
create mode 100644 themes/Sugar5/images/icon_person.gif
create mode 100644 themes/Sugar5/images/icon_sale.gif
create mode 100644 themes/Sugar5/images/icon_therevisions.gif
create mode 100644 themes/Sugar5/images/img_close_search.gif
create mode 100644 themes/Sugar5/images/img_left_arrow.jpg
create mode 100644 themes/Sugar5/images/img_loading.gif
create mode 100644 themes/Sugar5/images/img_right_arrow.jpg
create mode 100644 themes/Sugar5/images/info-add-page.png
create mode 100644 themes/Sugar5/images/info-del.png
create mode 100644 themes/Sugar5/images/info_inline.gif
create mode 100644 themes/Sugar5/images/jscalendar.gif
create mode 100644 themes/Sugar5/images/leftarrow.gif
create mode 100644 themes/Sugar5/images/leftarrow_big.gif
create mode 100644 themes/Sugar5/images/line.gif
create mode 100644 themes/Sugar5/images/list.gif
create mode 100644 themes/Sugar5/images/listViewBg.gif
create mode 100644 themes/Sugar5/images/listViewHR.gif
create mode 100644 themes/Sugar5/images/loadSignedDocument.gif
create mode 100644 themes/Sugar5/images/loading.gif
create mode 100644 themes/Sugar5/images/mass_update.gif
create mode 100644 themes/Sugar5/images/menuarrow.gif
create mode 100644 themes/Sugar5/images/minus.gif
create mode 100644 themes/Sugar5/images/minus_inline.gif
create mode 100644 themes/Sugar5/images/more.gif
create mode 100644 themes/Sugar5/images/new_inline.gif
create mode 100644 themes/Sugar5/images/next.gif
create mode 100644 themes/Sugar5/images/next_off.gif
create mode 100644 themes/Sugar5/images/no.gif
create mode 100644 themes/Sugar5/images/open_multiple.gif
create mode 100644 themes/Sugar5/images/otherTab.gif
create mode 100644 themes/Sugar5/images/otherTabBlue.gif
create mode 100644 themes/Sugar5/images/otherTabGray.gif
create mode 100644 themes/Sugar5/images/otherTabGreen.gif
create mode 100644 themes/Sugar5/images/otherTabOcher.gif
create mode 100644 themes/Sugar5/images/otherTabPurple.gif
create mode 100644 themes/Sugar5/images/otherTabRed.gif
create mode 100644 themes/Sugar5/images/pdf_header_logo_SugarCRMheader.jpg
create mode 100644 themes/Sugar5/images/pdf_header_logo_img_left_arrow.jpg
create mode 100644 themes/Sugar5/images/pdf_header_logo_pdf_header_logo_SugarCRMheader.jpg
create mode 100644 themes/Sugar5/images/pdf_image_inline.gif
create mode 100644 themes/Sugar5/images/pdf_logo.jpg
create mode 100644 themes/Sugar5/images/pdf_logo_small.jpg
create mode 100644 themes/Sugar5/images/plus.gif
create mode 100644 themes/Sugar5/images/plus_inline.gif
create mode 100644 themes/Sugar5/images/ppt_image_inline.gif
create mode 100644 themes/Sugar5/images/previous.gif
create mode 100644 themes/Sugar5/images/previous_off.gif
create mode 100644 themes/Sugar5/images/print.gif
create mode 100644 themes/Sugar5/images/publish_inline.gif
create mode 100644 themes/Sugar5/images/red_camp.gif
create mode 100644 themes/Sugar5/images/refresh.gif
create mode 100644 themes/Sugar5/images/rightarrow.gif
create mode 100644 themes/Sugar5/images/rightarrow_big.gif
create mode 100644 themes/Sugar5/images/scheduled_inline.gif
create mode 100644 themes/Sugar5/images/searchMore.gif
create mode 100644 themes/Sugar5/images/select.gif
create mode 100644 themes/Sugar5/images/show.gif
create mode 100644 themes/Sugar5/images/show_submenu_shortcuts.gif
create mode 100644 themes/Sugar5/images/slot.gif
create mode 100644 themes/Sugar5/images/spacer.gif
create mode 100644 themes/Sugar5/images/sqsWait.gif
create mode 100644 themes/Sugar5/images/start.gif
create mode 100644 themes/Sugar5/images/start_off.gif
create mode 100644 themes/Sugar5/images/studio_addField.gif
create mode 100644 themes/Sugar5/images/studio_addRows.gif
create mode 100644 themes/Sugar5/images/studio_blank.gif
create mode 100644 themes/Sugar5/images/studio_history.gif
create mode 100644 themes/Sugar5/images/studio_publish.gif
create mode 100644 themes/Sugar5/images/studio_redo.gif
create mode 100644 themes/Sugar5/images/studio_save.gif
create mode 100644 themes/Sugar5/images/studio_undo.gif
create mode 100644 themes/Sugar5/images/sugar-yui-sprites-green.png
create mode 100644 themes/Sugar5/images/sugar-yui-sprites-grey.png
create mode 100644 themes/Sugar5/images/sugar-yui-sprites-purple.png
create mode 100644 themes/Sugar5/images/sugar-yui-sprites-red.png
create mode 100644 themes/Sugar5/images/sugar-yui-sprites.png
create mode 100644 themes/Sugar5/images/sugarColors.xml
create mode 100644 themes/Sugar5/images/sugar_document.png
create mode 100644 themes/Sugar5/images/sugar_icon.ico
create mode 100644 themes/Sugar5/images/sugar_icon.png
create mode 100644 themes/Sugar5/images/sugarupdate.gif
create mode 100644 themes/Sugar5/images/tabRowBg.gif
create mode 100644 themes/Sugar5/images/tabRowBlueBg.gif
create mode 100644 themes/Sugar5/images/tabRowGrayBg.gif
create mode 100644 themes/Sugar5/images/tabRowGreenBg.gif
create mode 100644 themes/Sugar5/images/tabRowOcherBg.gif
create mode 100644 themes/Sugar5/images/tabRowPurpleBg.gif
create mode 100644 themes/Sugar5/images/tabRowRedBg.gif
create mode 100644 themes/Sugar5/images/tentative_inline.gif
create mode 100644 themes/Sugar5/images/themePreview.png
create mode 100644 themes/Sugar5/images/txt_image_inline.gif
create mode 100644 themes/Sugar5/images/unpublish_inline.gif
create mode 100644 themes/Sugar5/images/unscheduled_inline.gif
create mode 100644 themes/Sugar5/images/uparrow.gif
create mode 100644 themes/Sugar5/images/uparrow_big.gif
create mode 100644 themes/Sugar5/images/uparrow_inline.gif
create mode 100644 themes/Sugar5/images/view.gif
create mode 100644 themes/Sugar5/images/view_inline.gif
create mode 100644 themes/Sugar5/images/view_status.gif
create mode 100644 themes/Sugar5/images/xls_image_inline.gif
create mode 100644 themes/Sugar5/images/yellow_camp.gif
create mode 100644 themes/Sugar5/images/yes.gif
create mode 100644 themes/Sugar5/js/style.js
create mode 100644 themes/Sugar5/layout_utils.php
create mode 100644 themes/Sugar5/themedef.php
create mode 100644 themes/Sugar5/tpls/_companyLogo.tpl
create mode 100644 themes/Sugar5/tpls/_globalLinks.tpl
create mode 100644 themes/Sugar5/tpls/_head.tpl
create mode 100644 themes/Sugar5/tpls/_headerLastViewed.tpl
create mode 100644 themes/Sugar5/tpls/_headerModuleList.tpl
create mode 100644 themes/Sugar5/tpls/_headerSearch.tpl
create mode 100644 themes/Sugar5/tpls/_headerShortcuts.tpl
create mode 100644 themes/Sugar5/tpls/_welcome.tpl
create mode 100644 themes/Sugar5/tpls/footer.tpl
create mode 100644 themes/Sugar5/tpls/header.tpl
create mode 100644 themes/default/css/chart.css
create mode 100644 themes/default/css/deprecated.css
create mode 100644 themes/default/css/print.css
create mode 100644 themes/default/css/style.css
create mode 100644 themes/default/css/wizard.css
create mode 100644 themes/default/images/Accounts.gif
create mode 100644 themes/default/images/ActivitiesReports.gif
create mode 100644 themes/default/images/Administration.gif
create mode 100644 themes/default/images/AlertEmailTemplates.gif
create mode 100644 themes/default/images/AllNews.gif
create mode 100644 themes/default/images/AllRSS.gif
create mode 100644 themes/default/images/ArrowButtons.png
create mode 100644 themes/default/images/Backup.gif
create mode 100644 themes/default/images/Backups.gif
create mode 100644 themes/default/images/BugReports.gif
create mode 100644 themes/default/images/Bugs.gif
create mode 100644 themes/default/images/Calendar.gif
create mode 100644 themes/default/images/Calls.gif
create mode 100644 themes/default/images/Campaigns.gif
create mode 100644 themes/default/images/CampaignsWizard.gif
create mode 100644 themes/default/images/Cases.gif
create mode 100644 themes/default/images/ConfigureSubPanels.gif
create mode 100644 themes/default/images/ConfigureTabs.gif
create mode 100644 themes/default/images/Contacts.gif
create mode 100644 themes/default/images/CreateAccounts.gif
create mode 100644 themes/default/images/CreateBugs.gif
create mode 100644 themes/default/images/CreateCalls.gif
create mode 100644 themes/default/images/CreateCampaigns.gif
create mode 100644 themes/default/images/CreateCases.gif
create mode 100644 themes/default/images/CreateContacts.gif
create mode 100644 themes/default/images/CreateDCEClusters.gif
create mode 100644 themes/default/images/CreateDCEDataBases.gif
create mode 100644 themes/default/images/CreateDCEInstances.gif
create mode 100644 themes/default/images/CreateDCETemplates.gif
create mode 100644 themes/default/images/CreateDocuments.gif
create mode 100644 themes/default/images/CreateDropdown.gif
create mode 100644 themes/default/images/CreateEmails.gif
create mode 100644 themes/default/images/CreateEmployees.gif
create mode 100644 themes/default/images/CreateHolidays.gif
create mode 100644 themes/default/images/CreateKBArticle.gif
create mode 100644 themes/default/images/CreateLeads.gif
create mode 100644 themes/default/images/CreateMailboxes.gif
create mode 100644 themes/default/images/CreateMeetings.gif
create mode 100644 themes/default/images/CreateNotes.gif
create mode 100644 themes/default/images/CreateOpportunities.gif
create mode 100644 themes/default/images/CreateProject.gif
create mode 100644 themes/default/images/CreateProjectTask.gif
create mode 100644 themes/default/images/CreateProjectTemplate.gif
create mode 100644 themes/default/images/CreateProspectLists.gif
create mode 100644 themes/default/images/CreateProspects.gif
create mode 100644 themes/default/images/CreateQuery.gif
create mode 100644 themes/default/images/CreateQuotes.gif
create mode 100644 themes/default/images/CreateRoles.gif
create mode 100644 themes/default/images/CreateScheduler.gif
create mode 100644 themes/default/images/CreateTasks.gif
create mode 100644 themes/default/images/CreateTeams.gif
create mode 100644 themes/default/images/CreateUsers.gif
create mode 100644 themes/default/images/CreateWebToLeadForm.gif
create mode 100644 themes/default/images/CreateiFrames.gif
create mode 100644 themes/default/images/Currencies.gif
create mode 100644 themes/default/images/CustomQueries.gif
create mode 100644 themes/default/images/DCEActions.gif
create mode 100644 themes/default/images/DCELicensingReport.gif
create mode 100644 themes/default/images/Dashboard.gif
create mode 100644 themes/default/images/DataSets.gif
create mode 100644 themes/default/images/Diagnostic.gif
create mode 100644 themes/default/images/DocumentRevisions.gif
create mode 100644 themes/default/images/Documents.gif
create mode 100644 themes/default/images/Dropdown.gif
create mode 100644 themes/default/images/EditLayout.gif
create mode 100644 themes/default/images/EmailDiagnostic.gif
create mode 100644 themes/default/images/EmailFolder.gif
create mode 100644 themes/default/images/EmailMan.gif
create mode 100644 themes/default/images/EmailSetupWizard.gif
create mode 100644 themes/default/images/EmailTemplates.gif
create mode 100644 themes/default/images/Emails.gif
create mode 100644 themes/default/images/Employees.gif
create mode 100644 themes/default/images/ExportCustomFields.gif
create mode 100644 themes/default/images/FavoriteReports.gif
create mode 100644 themes/default/images/Feeds.gif
create mode 100644 themes/default/images/FieldLabels.gif
create mode 100644 themes/default/images/Holidays.gif
create mode 100644 themes/default/images/Import.gif
create mode 100644 themes/default/images/ImportCustomFields.gif
create mode 100644 themes/default/images/InboundEmail.gif
create mode 100644 themes/default/images/KB.gif
create mode 100644 themes/default/images/KBArticle.gif
create mode 100644 themes/default/images/KBDocuments.gif
create mode 100644 themes/default/images/LanguagePacks.gif
create mode 100644 themes/default/images/Layout.gif
create mode 100644 themes/default/images/Leads.gif
create mode 100644 themes/default/images/License.gif
create mode 100644 themes/default/images/MailboxesTestImport.gif
create mode 100644 themes/default/images/Manufacturers.gif
create mode 100644 themes/default/images/MatrixReport.gif
create mode 100644 themes/default/images/MatrixReportOver.gif
create mode 100644 themes/default/images/Meetings.gif
create mode 100644 themes/default/images/MigrateFields.gif
create mode 100644 themes/default/images/ModuleBuilder.gif
create mode 100644 themes/default/images/ModuleLoader.gif
create mode 100644 themes/default/images/MoreDetail.png
create mode 100644 themes/default/images/MyProject.gif
create mode 100644 themes/default/images/Newsletters.gif
create mode 100644 themes/default/images/Notes.gif
create mode 100644 themes/default/images/OnlineDocumentation.gif
create mode 100644 themes/default/images/Opportunities.gif
create mode 100644 themes/default/images/OpportunityReports.gif
create mode 100644 themes/default/images/Password.gif
create mode 100644 themes/default/images/PatchUpgrades.gif
create mode 100644 themes/default/images/Print_Email.gif
create mode 100644 themes/default/images/ProductTemplates.gif
create mode 100644 themes/default/images/Product_Types.gif
create mode 100644 themes/default/images/Project.gif
create mode 100644 themes/default/images/Project2Weeks.gif
create mode 100644 themes/default/images/ProjectCollapseAll.gif
create mode 100644 themes/default/images/ProjectCopy.gif
create mode 100644 themes/default/images/ProjectCut.gif
create mode 100644 themes/default/images/ProjectDelete.gif
create mode 100644 themes/default/images/ProjectExpandAll.gif
create mode 100644 themes/default/images/ProjectIndent.gif
create mode 100644 themes/default/images/ProjectInsertRows.gif
create mode 100644 themes/default/images/ProjectMinus.gif
create mode 100644 themes/default/images/ProjectMonth.gif
create mode 100644 themes/default/images/ProjectOutdent.gif
create mode 100644 themes/default/images/ProjectPaste.gif
create mode 100644 themes/default/images/ProjectPlus.gif
create mode 100644 themes/default/images/ProjectSave.gif
create mode 100644 themes/default/images/ProjectTask.gif
create mode 100644 themes/default/images/ProjectTemplate.gif
create mode 100644 themes/default/images/ProjectWeek.gif
create mode 100644 themes/default/images/ProspectLists.gif
create mode 100644 themes/default/images/Prospects.gif
create mode 100644 themes/default/images/QueryBuilder.gif
create mode 100644 themes/default/images/RSS.gif
create mode 100644 themes/default/images/ReassignRecords.gif
create mode 100644 themes/default/images/Rebuild.gif
create mode 100644 themes/default/images/Rebuild2.gif
create mode 100644 themes/default/images/Releases.gif
create mode 100644 themes/default/images/RenameTabs.gif
create mode 100644 themes/default/images/Repair.gif
create mode 100644 themes/default/images/Roles.gif
create mode 100644 themes/default/images/RowsAndColumns.gif
create mode 100644 themes/default/images/RowsAndColumnsOver.gif
create mode 100644 themes/default/images/SchedulerTest.gif
create mode 100644 themes/default/images/Schedulers.gif
create mode 100644 themes/default/images/Search.gif
create mode 100644 themes/default/images/Shippers.gif
create mode 100644 themes/default/images/StickyThread.gif
create mode 100644 themes/default/images/Studio.gif
create mode 100644 themes/default/images/SugarLogic/icon_bool_16.png
create mode 100644 themes/default/images/SugarLogic/icon_date_16.png
create mode 100644 themes/default/images/SugarLogic/icon_enum_16.png
create mode 100644 themes/default/images/SugarLogic/icon_generic_16.png
create mode 100644 themes/default/images/SugarLogic/icon_num_16.png
create mode 100644 themes/default/images/SugarLogic/icon_string_16.png
create mode 100644 themes/default/images/SugarPortal.gif
create mode 100644 themes/default/images/Summation.gif
create mode 100644 themes/default/images/SummationOver.gif
create mode 100644 themes/default/images/SummationWithDetails.gif
create mode 100644 themes/default/images/SummationWithDetailsOver.gif
create mode 100644 themes/default/images/Support.gif
create mode 100644 themes/default/images/Tasks.gif
create mode 100644 themes/default/images/Teams.gif
create mode 100644 themes/default/images/Themes.gif
create mode 100644 themes/default/images/Trackers.gif
create mode 100644 themes/default/images/Upgrade.gif
create mode 100644 themes/default/images/UpgradeDCEInstances.gif
create mode 100644 themes/default/images/Users.gif
create mode 100644 themes/default/images/WorkFlow.gif
create mode 100644 themes/default/images/_blank.png
create mode 100644 themes/default/images/accept_inline.gif
create mode 100644 themes/default/images/advanced_search.gif
create mode 100644 themes/default/images/arrow.gif
create mode 100644 themes/default/images/arrow_down.gif
create mode 100644 themes/default/images/arrow_up.gif
create mode 100644 themes/default/images/attachment.gif
create mode 100644 themes/default/images/backtotop.gif
create mode 100644 themes/default/images/bar_loader.gif
create mode 100644 themes/default/images/basic_search.gif
create mode 100644 themes/default/images/bg.gif
create mode 100644 themes/default/images/bgBlue.gif
create mode 100644 themes/default/images/bgBtn.gif
create mode 100644 themes/default/images/bgBtnBlue.gif
create mode 100644 themes/default/images/bgBtnGray.gif
create mode 100644 themes/default/images/bgBtnGreen.gif
create mode 100644 themes/default/images/bgBtnOrange.gif
create mode 100644 themes/default/images/bgBtnPurple.gif
create mode 100644 themes/default/images/bgGray.gif
create mode 100644 themes/default/images/bgGreen.gif
create mode 100644 themes/default/images/bgOcher.gif
create mode 100644 themes/default/images/bgPurple.gif
create mode 100644 themes/default/images/bgRed.gif
create mode 100644 themes/default/images/blank.gif
create mode 100644 themes/default/images/calendarHeaderBg.gif
create mode 100644 themes/default/images/calendar_next.gif
create mode 100644 themes/default/images/calendar_previous.gif
create mode 100644 themes/default/images/chartBg.png
create mode 100644 themes/default/images/check_inline.gif
create mode 100644 themes/default/images/close.gif
create mode 100644 themes/default/images/close_button_24.png
create mode 100644 themes/default/images/close_inline.gif
create mode 100644 themes/default/images/colors.blue.icon.gif
create mode 100644 themes/default/images/colors.gray.icon.gif
create mode 100644 themes/default/images/colors.green.icon.gif
create mode 100644 themes/default/images/colors.orange.icon.gif
create mode 100644 themes/default/images/colors.purple.icon.gif
create mode 100644 themes/default/images/colors.red.icon.gif
create mode 100644 themes/default/images/colors.sugar.icon.gif
create mode 100644 themes/default/images/company_logo.png
create mode 100644 themes/default/images/create-record.gif
create mode 100644 themes/default/images/currentTab.gif
create mode 100644 themes/default/images/currentTab.png
create mode 100644 themes/default/images/currentTabBlue.gif
create mode 100644 themes/default/images/currentTabGray.gif
create mode 100644 themes/default/images/currentTabGreen.gif
create mode 100644 themes/default/images/currentTabLinkBg.gif
create mode 100644 themes/default/images/currentTabOcher.gif
create mode 100644 themes/default/images/currentTabOff.gif
create mode 100644 themes/default/images/currentTabPurple.gif
create mode 100644 themes/default/images/currentTabRed.gif
create mode 100644 themes/default/images/dashlet-header-close.gif
create mode 100644 themes/default/images/dashlet-header-edit.gif
create mode 100644 themes/default/images/dashlet-header-refresh.gif
create mode 100644 themes/default/images/dcMenuDivider.png
create mode 100644 themes/default/images/dce_Settings.gif
create mode 100644 themes/default/images/dcmenugrade.png
create mode 100644 themes/default/images/decline_inline.gif
create mode 100644 themes/default/images/def_image_inline.gif
create mode 100644 themes/default/images/delete.gif
create mode 100644 themes/default/images/delete_inline.gif
create mode 100644 themes/default/images/detailViewBg.gif
create mode 100644 themes/default/images/detailview.gif
create mode 100644 themes/default/images/doc_image_inline.gif
create mode 100644 themes/default/images/downarrow.gif
create mode 100644 themes/default/images/downarrow_big.gif
create mode 100644 themes/default/images/downarrow_inline.gif
create mode 100644 themes/default/images/dp-bd-dc.png
create mode 100644 themes/default/images/dp-bd-menu.png
create mode 100644 themes/default/images/dp-bd-top-menu.png
create mode 100644 themes/default/images/dp-bd.png
create mode 100644 themes/default/images/dp-bl-dc.png
create mode 100644 themes/default/images/dp-bl-menu.png
create mode 100644 themes/default/images/dp-bl.png
create mode 100644 themes/default/images/dp-br-dc.png
create mode 100644 themes/default/images/dp-br-menu.png
create mode 100644 themes/default/images/dp-br.png
create mode 100644 themes/default/images/dp-ft-dc.png
create mode 100644 themes/default/images/dp-ft-menu.png
create mode 100644 themes/default/images/dp-ft.png
create mode 100644 themes/default/images/dp-hd-dc.png
create mode 100644 themes/default/images/dp-hd-menu.png
create mode 100644 themes/default/images/dp-hd-plain.png
create mode 100644 themes/default/images/dp-hd.png
create mode 100644 themes/default/images/dp-ml-dc.png
create mode 100644 themes/default/images/dp-ml-menu.png
create mode 100644 themes/default/images/dp-ml.png
create mode 100644 themes/default/images/dp-mr-dc.png
create mode 100644 themes/default/images/dp-mr-menu.png
create mode 100644 themes/default/images/dp-mr.png
create mode 100644 themes/default/images/dp-tl-dc.png
create mode 100644 themes/default/images/dp-tl-menu.png
create mode 100644 themes/default/images/dp-tl-plain.png
create mode 100644 themes/default/images/dp-tl.png
create mode 100644 themes/default/images/dp-tr-dc.png
create mode 100644 themes/default/images/dp-tr-menu.png
create mode 100644 themes/default/images/dp-tr-plain.png
create mode 100644 themes/default/images/dp-tr.png
create mode 100644 themes/default/images/edit_inline.gif
create mode 100644 themes/default/images/edit_wizard.gif
create mode 100644 themes/default/images/editfields.gif
create mode 100644 themes/default/images/editlabels.gif
create mode 100644 themes/default/images/editview.gif
create mode 100644 themes/default/images/emptyTabSpace.gif
create mode 100644 themes/default/images/end.gif
create mode 100644 themes/default/images/end_off.gif
create mode 100644 themes/default/images/export.gif
create mode 100644 themes/default/images/fonts.larger.icon.gif
create mode 100644 themes/default/images/fonts.largest.icon.gif
create mode 100644 themes/default/images/fonts.normal.icon.gif
create mode 100644 themes/default/images/form-button-bg.png
create mode 100644 themes/default/images/form-button-bg2.png
create mode 100644 themes/default/images/form-button-primary-bg.png
create mode 100644 themes/default/images/formButtonBg.gif
create mode 100644 themes/default/images/formButtonBgOn.gif
create mode 100644 themes/default/images/getLatestDocument.gif
create mode 100644 themes/default/images/green_camp.gif
create mode 100644 themes/default/images/grouped-menu-arrow.png
create mode 100644 themes/default/images/grouped-menu.png
create mode 100644 themes/default/images/h3Arrow.gif
create mode 100644 themes/default/images/help-dashlet.gif
create mode 100644 themes/default/images/help.gif
create mode 100644 themes/default/images/helpInline.gif
create mode 100644 themes/default/images/hide.gif
create mode 100644 themes/default/images/hide_submenu_shortcuts.gif
create mode 100644 themes/default/images/iFrames.gif
create mode 100644 themes/default/images/icon_A1_newmod.gif
create mode 100644 themes/default/images/icon_Accounts.gif
create mode 100644 themes/default/images/icon_Accounts_32.gif
create mode 100644 themes/default/images/icon_Activities.gif
create mode 100644 themes/default/images/icon_Address.gif
create mode 100644 themes/default/images/icon_AdminMobile.gif
create mode 100644 themes/default/images/icon_AdminPDF.gif
create mode 100644 themes/default/images/icon_AdminThemes.gif
create mode 100644 themes/default/images/icon_AdvancedSearch.gif
create mode 100644 themes/default/images/icon_Application.gif
create mode 100644 themes/default/images/icon_BasicSearch.gif
create mode 100644 themes/default/images/icon_Bugs.gif
create mode 100644 themes/default/images/icon_Bugs_32.gif
create mode 100644 themes/default/images/icon_Calendar_32.gif
create mode 100644 themes/default/images/icon_Calls.gif
create mode 100644 themes/default/images/icon_Calls_32.gif
create mode 100644 themes/default/images/icon_CampaignLog_32.gif
create mode 100644 themes/default/images/icon_Campaigns.gif
create mode 100644 themes/default/images/icon_Campaigns_32.gif
create mode 100644 themes/default/images/icon_Cases.gif
create mode 100644 themes/default/images/icon_Cases_32.gif
create mode 100644 themes/default/images/icon_Charts_Funnel.gif
create mode 100644 themes/default/images/icon_Charts_Funnel_32.gif
create mode 100644 themes/default/images/icon_Charts_Gauge_32.gif
create mode 100644 themes/default/images/icon_Charts_GroupBy.gif
create mode 100644 themes/default/images/icon_Charts_GroupBy_32.gif
create mode 100644 themes/default/images/icon_Charts_Horizontal.gif
create mode 100644 themes/default/images/icon_Charts_Horizontal_32.gif
create mode 100644 themes/default/images/icon_Charts_Pie.gif
create mode 100644 themes/default/images/icon_Charts_Pie_32.gif
create mode 100644 themes/default/images/icon_Charts_Vertical.gif
create mode 100644 themes/default/images/icon_Charts_Vertical_32.gif
create mode 100644 themes/default/images/icon_Column_1.gif
create mode 100644 themes/default/images/icon_Column_2.gif
create mode 100644 themes/default/images/icon_Column_3.gif
create mode 100644 themes/default/images/icon_ConnectorConfig.gif
create mode 100644 themes/default/images/icon_ConnectorConfigOver.gif
create mode 100644 themes/default/images/icon_ConnectorConfig_16.gif
create mode 100644 themes/default/images/icon_ConnectorEnable.gif
create mode 100644 themes/default/images/icon_ConnectorEnableOver.gif
create mode 100644 themes/default/images/icon_ConnectorEnable_16.gif
create mode 100644 themes/default/images/icon_ConnectorMap.gif
create mode 100644 themes/default/images/icon_ConnectorMapOver.gif
create mode 100644 themes/default/images/icon_ConnectorMap_16.gif
create mode 100644 themes/default/images/icon_ConnectorSearchFields.gif
create mode 100644 themes/default/images/icon_ConnectorSearchFieldsOver.gif
create mode 100644 themes/default/images/icon_ConnectorSearchFields_16.gif
create mode 100644 themes/default/images/icon_Connectors.gif
create mode 100644 themes/default/images/icon_Contacts.gif
create mode 100644 themes/default/images/icon_Contacts_32.gif
create mode 100644 themes/default/images/icon_Contracts_32.gif
create mode 100644 themes/default/images/icon_ConvertLead.gif
create mode 100644 themes/default/images/icon_Dashlet.gif
create mode 100644 themes/default/images/icon_Delete.gif
create mode 100644 themes/default/images/icon_DeleteFull.gif
create mode 100644 themes/default/images/icon_DetailView.gif
create mode 100644 themes/default/images/icon_Documents.gif
create mode 100644 themes/default/images/icon_Documents_32.gif
create mode 100644 themes/default/images/icon_DropDownEditor.gif
create mode 100644 themes/default/images/icon_EditView.gif
create mode 100644 themes/default/images/icon_EmailAddress.gif
create mode 100644 themes/default/images/icon_EmailAddresses_32.gif
create mode 100644 themes/default/images/icon_EmailTemplates_32.gif
create mode 100644 themes/default/images/icon_Emails.gif
create mode 100644 themes/default/images/icon_Emails_32.gif
create mode 100644 themes/default/images/icon_FavoriteReports_32.gif
create mode 100644 themes/default/images/icon_Feeds_32.gif
create mode 100644 themes/default/images/icon_Fields.gif
create mode 100644 themes/default/images/icon_Forecasts_32.gif
create mode 100644 themes/default/images/icon_Invaders_32.gif
create mode 100644 themes/default/images/icon_JotPad.gif
create mode 100644 themes/default/images/icon_JotPad_32.gif
create mode 100644 themes/default/images/icon_KBDocuments.gif
create mode 100644 themes/default/images/icon_KBDocuments_32.gif
create mode 100644 themes/default/images/icon_Labels.gif
create mode 100644 themes/default/images/icon_Layouts.gif
create mode 100644 themes/default/images/icon_Leads.gif
create mode 100644 themes/default/images/icon_Leads_32.gif
create mode 100644 themes/default/images/icon_ListView.gif
create mode 100644 themes/default/images/icon_Meetings.gif
create mode 100644 themes/default/images/icon_Meetings_32.gif
create mode 100644 themes/default/images/icon_MobileLayouts.gif
create mode 100644 themes/default/images/icon_ModuleBuilder.gif
create mode 100644 themes/default/images/icon_MyPortal_32.gif
create mode 100644 themes/default/images/icon_MyTasks_32.gif
create mode 100644 themes/default/images/icon_NewModule.gif
create mode 100644 themes/default/images/icon_Notes.gif
create mode 100644 themes/default/images/icon_Notes_32.gif
create mode 100644 themes/default/images/icon_OpenTasks_32.gif
create mode 100644 themes/default/images/icon_Opportunities.gif
create mode 100644 themes/default/images/icon_Opportunities_32.gif
create mode 100644 themes/default/images/icon_Phone.gif
create mode 100644 themes/default/images/icon_Popup.gif
create mode 100644 themes/default/images/icon_Portal.gif
create mode 100644 themes/default/images/icon_ProductCategories_32.gif
create mode 100644 themes/default/images/icon_ProductTypes_32.gif
create mode 100644 themes/default/images/icon_Product_Types_32.gif
create mode 100644 themes/default/images/icon_Products_32.gif
create mode 100644 themes/default/images/icon_Project.gif
create mode 100644 themes/default/images/icon_ProjectTask.gif
create mode 100644 themes/default/images/icon_ProjectTask_32.gif
create mode 100644 themes/default/images/icon_Project_32.gif
create mode 100644 themes/default/images/icon_Projects_32.gif
create mode 100644 themes/default/images/icon_Prospects.gif
create mode 100644 themes/default/images/icon_Prospects_32.gif
create mode 100644 themes/default/images/icon_QuickCreate.gif
create mode 100644 themes/default/images/icon_Quotes_32.gif
create mode 100644 themes/default/images/icon_Relationships.gif
create mode 100644 themes/default/images/icon_Releases_32.gif
create mode 100644 themes/default/images/icon_Reports_32.gif
create mode 100644 themes/default/images/icon_Rss_32.gif
create mode 100644 themes/default/images/icon_SPSync.gif
create mode 100644 themes/default/images/icon_SPUploadCSS.gif
create mode 100644 themes/default/images/icon_SearchForm.gif
create mode 100644 themes/default/images/icon_ShortcutBar.gif
create mode 100644 themes/default/images/icon_Studio.gif
create mode 100644 themes/default/images/icon_Subpanels.gif
create mode 100644 themes/default/images/icon_SugarFeed.gif
create mode 100644 themes/default/images/icon_SugarFeed_32.gif
create mode 100644 themes/default/images/icon_SugarNews_32.gif
create mode 100644 themes/default/images/icon_SugarPortal.gif
create mode 100644 themes/default/images/icon_Targets_32.gif
create mode 100644 themes/default/images/icon_Tasks.gif
create mode 100644 themes/default/images/icon_Tasks_32.gif
create mode 100644 themes/default/images/icon_Teams_32.gif
create mode 100644 themes/default/images/icon_TrackerPerfs_32.gif
create mode 100644 themes/default/images/icon_TrackerQueries_32.gif
create mode 100644 themes/default/images/icon_TrackerSessions_32.gif
create mode 100644 themes/default/images/icon_Trackers_32.gif
create mode 100644 themes/default/images/icon_Users_32.gif
create mode 100644 themes/default/images/icon_assistant.gif
create mode 100644 themes/default/images/icon_back.gif
create mode 100644 themes/default/images/icon_basic.gif
create mode 100644 themes/default/images/icon_company.gif
create mode 100644 themes/default/images/icon_document.gif
create mode 100644 themes/default/images/icon_email_addressbook.gif
create mode 100644 themes/default/images/icon_email_archive.gif
create mode 100644 themes/default/images/icon_email_assign.gif
create mode 100644 themes/default/images/icon_email_attach.gif
create mode 100644 themes/default/images/icon_email_check.gif
create mode 100644 themes/default/images/icon_email_compose.gif
create mode 100644 themes/default/images/icon_email_create.gif
create mode 100644 themes/default/images/icon_email_delete.gif
create mode 100644 themes/default/images/icon_email_folder.gif
create mode 100644 themes/default/images/icon_email_folder_archives.gif
create mode 100644 themes/default/images/icon_email_folder_drafts.gif
create mode 100644 themes/default/images/icon_email_folder_exp.gif
create mode 100644 themes/default/images/icon_email_folder_grp.gif
create mode 100644 themes/default/images/icon_email_folder_sent.gif
create mode 100644 themes/default/images/icon_email_forward.gif
create mode 100644 themes/default/images/icon_email_fullscreen.gif
create mode 100644 themes/default/images/icon_email_mark.gif
create mode 100644 themes/default/images/icon_email_options.gif
create mode 100644 themes/default/images/icon_email_relate.gif
create mode 100644 themes/default/images/icon_email_reply.gif
create mode 100644 themes/default/images/icon_email_replyall.gif
create mode 100644 themes/default/images/icon_email_save.gif
create mode 100644 themes/default/images/icon_email_send.gif
create mode 100644 themes/default/images/icon_email_settings.gif
create mode 100644 themes/default/images/icon_email_sugfolder.gif
create mode 100644 themes/default/images/icon_email_sugfolder_exp.gif
create mode 100644 themes/default/images/icon_email_view.gif
create mode 100644 themes/default/images/icon_email_view1.gif
create mode 100644 themes/default/images/icon_email_view2.gif
create mode 100644 themes/default/images/icon_email_view3.gif
create mode 100644 themes/default/images/icon_expression_types.gif
create mode 100644 themes/default/images/icon_file.gif
create mode 100644 themes/default/images/icon_home.gif
create mode 100644 themes/default/images/icon_iFrames_32.gif
create mode 100644 themes/default/images/icon_issue.gif
create mode 100644 themes/default/images/icon_new_package.gif
create mode 100644 themes/default/images/icon_opportunity.gif
create mode 100644 themes/default/images/icon_package.gif
create mode 100644 themes/default/images/icon_package_create.gif
create mode 100644 themes/default/images/icon_person.gif
create mode 100644 themes/default/images/icon_sale.gif
create mode 100644 themes/default/images/icon_therevisions.gif
create mode 100644 themes/default/images/id-ff-add.png
create mode 100644 themes/default/images/id-ff-clear.png
create mode 100644 themes/default/images/id-ff-copy.png
create mode 100644 themes/default/images/id-ff-remove.png
create mode 100644 themes/default/images/id-ff-select.png
create mode 100644 themes/default/images/id-ff-vcard.png
create mode 100644 themes/default/images/img_close_search.gif
create mode 100644 themes/default/images/img_left_arrow.jpg
create mode 100644 themes/default/images/img_loading.gif
create mode 100644 themes/default/images/img_right_arrow.jpg
create mode 100644 themes/default/images/info-add.gif
create mode 100644 themes/default/images/info-help.gif
create mode 100644 themes/default/images/info-layout.gif
create mode 100644 themes/default/images/info_inline.gif
create mode 100644 themes/default/images/join_imeeting.gif
create mode 100644 themes/default/images/join_meeting_inline.png
create mode 100644 themes/default/images/jscalendar.gif
create mode 100644 themes/default/images/leftarrow.gif
create mode 100644 themes/default/images/leftarrow_big.gif
create mode 100644 themes/default/images/line.gif
create mode 100644 themes/default/images/list.gif
create mode 100644 themes/default/images/listViewBg.gif
create mode 100644 themes/default/images/listViewHR.gif
create mode 100644 themes/default/images/loadSignedDocument.gif
create mode 100644 themes/default/images/loading.gif
create mode 100644 themes/default/images/login-bg.png
create mode 100644 themes/default/images/mass_update.gif
create mode 100644 themes/default/images/menuarrow.gif
create mode 100644 themes/default/images/minus.gif
create mode 100644 themes/default/images/minus_inline.gif
create mode 100644 themes/default/images/more.gif
create mode 100644 themes/default/images/new_inline.gif
create mode 100644 themes/default/images/next.gif
create mode 100644 themes/default/images/next_off.gif
create mode 100644 themes/default/images/no.gif
create mode 100644 themes/default/images/open_multiple.gif
create mode 100644 themes/default/images/otherTab.gif
create mode 100644 themes/default/images/otherTab.png
create mode 100644 themes/default/images/otherTabBlue.gif
create mode 100644 themes/default/images/otherTabGray.gif
create mode 100644 themes/default/images/otherTabGreen.gif
create mode 100644 themes/default/images/otherTabOcher.gif
create mode 100644 themes/default/images/otherTabPurple.gif
create mode 100644 themes/default/images/otherTabRed.gif
create mode 100644 themes/default/images/pdf_header_logo_SugarCRMheader.jpg
create mode 100644 themes/default/images/pdf_header_logo_company_logo.png
create mode 100644 themes/default/images/pdf_header_logo_img_left_arrow.jpg
create mode 100644 themes/default/images/pdf_header_logo_pdf_header_logo_SugarCRMheader.jpg
create mode 100644 themes/default/images/pdf_image_inline.gif
create mode 100644 themes/default/images/pdf_logo.jpg
create mode 100644 themes/default/images/pdf_logo_small.jpg
create mode 100644 themes/default/images/plug-in_Excel.gif
create mode 100644 themes/default/images/plug-in_Outlook.gif
create mode 100644 themes/default/images/plug-in_Word.gif
create mode 100644 themes/default/images/plus.gif
create mode 100644 themes/default/images/plus_inline.gif
create mode 100644 themes/default/images/ppt_image_inline.gif
create mode 100644 themes/default/images/previous.gif
create mode 100644 themes/default/images/previous_off.gif
create mode 100644 themes/default/images/print.gif
create mode 100644 themes/default/images/publish_inline.gif
create mode 100644 themes/default/images/red_camp.gif
create mode 100644 themes/default/images/rightarrow.gif
create mode 100644 themes/default/images/rightarrow_big.gif
create mode 100644 themes/default/images/scheduled_inline.gif
create mode 100644 themes/default/images/searchMore.gif
create mode 100644 themes/default/images/shortCutsBg.png
create mode 100644 themes/default/images/show.gif
create mode 100644 themes/default/images/show_submenu_shortcuts.gif
create mode 100644 themes/default/images/slot.gif
create mode 100644 themes/default/images/spacer.gif
create mode 100644 themes/default/images/sqsWait.gif
create mode 100644 themes/default/images/start.gif
create mode 100644 themes/default/images/start_meeting_inline.png
create mode 100644 themes/default/images/start_off.gif
create mode 100644 themes/default/images/studio_addField.gif
create mode 100644 themes/default/images/studio_addRows.gif
create mode 100644 themes/default/images/studio_blank.gif
create mode 100644 themes/default/images/studio_history.gif
create mode 100644 themes/default/images/studio_publish.gif
create mode 100644 themes/default/images/studio_redo.gif
create mode 100644 themes/default/images/studio_save.gif
create mode 100644 themes/default/images/studio_undo.gif
create mode 100644 themes/default/images/sugar-yui-sprites-grey.png
create mode 100644 themes/default/images/sugarColors.xml
create mode 100644 themes/default/images/sugar_document.png
create mode 100644 themes/default/images/sugar_icon.ico
create mode 100644 themes/default/images/sugar_icon.png
create mode 100644 themes/default/images/sugarupdate.gif
create mode 100644 themes/default/images/tabRowBlueBg.gif
create mode 100644 themes/default/images/tabRowGrayBg.gif
create mode 100644 themes/default/images/tabRowGreenBg.gif
create mode 100644 themes/default/images/tabRowOcherBg.gif
create mode 100644 themes/default/images/tabRowPurpleBg.gif
create mode 100644 themes/default/images/tabRowRedBg.gif
create mode 100644 themes/default/images/tentative_inline.gif
create mode 100644 themes/default/images/themePreview.png
create mode 100644 themes/default/images/txt_image_inline.gif
create mode 100644 themes/default/images/unpublish_inline.gif
create mode 100644 themes/default/images/unscheduled_inline.gif
create mode 100644 themes/default/images/uparrow.gif
create mode 100644 themes/default/images/uparrow_big.gif
create mode 100644 themes/default/images/uparrow_inline.gif
create mode 100644 themes/default/images/view.gif
create mode 100644 themes/default/images/view_inline.gif
create mode 100644 themes/default/images/view_status.gif
create mode 100644 themes/default/images/xls_image_inline.gif
create mode 100644 themes/default/images/yellow_camp.gif
create mode 100644 themes/default/images/yes.gif
create mode 100644 themes/default/js/style.js
create mode 100644 vCard.php
create mode 100644 vcal_server.php
diff --git a/HandleAjaxCall.php b/HandleAjaxCall.php
new file mode 100644
index 00000000..20ea22a3
--- /dev/null
+++ b/HandleAjaxCall.php
@@ -0,0 +1,56 @@
+$requestedMethod();
+ }
+ else {
+ echo 'no method';
+ }
+ // sugar_cleanup();
+?>
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 00000000..8d85809d
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+ .
\ No newline at end of file
diff --git a/ModuleInstall/ModuleInstaller.php b/ModuleInstall/ModuleInstaller.php
new file mode 100644
index 00000000..45901b44
--- /dev/null
+++ b/ModuleInstall/ModuleInstaller.php
@@ -0,0 +1,2351 @@
+custom_fields->addField
+ * 2. installing relationships - calls createTableParams to build the relationship table, and createRelationshipMeta to add the relationship to the relationship table
+ * 3. rebuilding the relationships - at almost the last step in install(), calls modules/Administration/RebuildRelationship.php
+ * 4. repair indices - uses "modules/Administration/RepairIndex.php";
+ */
+
+
+
+require_once('include/utils/progress_bar_utils.php');
+
+require_once('ModuleInstall/ModuleScanner.php');
+define('DISABLED_PATH', 'Disabled');
+
+class ModuleInstaller{
+ var $modules = array();
+ var $silent = false;
+ var $base_dir = '';
+ var $modulesInPackage = array();
+
+ function ModuleInstaller(){
+ $this->ms = new ModuleScanner();
+ $this->modules = get_module_dir_list();
+ $this->db = & DBManagerFactory::getInstance();
+
+ }
+
+ /*
+ * ModuleInstaller->install includes the manifest.php from the base directory it has been given. If it has been asked to do an upgrade it checks to see if there is
+ * an upgrade_manifest defined in the manifest; if not it errors. It then adds the bean into the custom/Extension/application/Ext/Include/.php - sets beanList, beanFiles
+ * and moduleList - and then calls ModuleInstaller->merge_files('Ext/Include', 'modules.ext.php', '', true) to merge the individual module files into a combined file
+ * /custom/Extension/application/Ext/Include/modules.ext.php (which now contains a list of all $beanList, $beanFiles and $moduleList for all extension modules) -
+ * this file modules.ext.php is included at the end of modules.php.
+ *
+ * Finally it runs over a list of defined tasks; then install_beans, then install_custom_fields, then clear the Vardefs, run a RepairAndClear, then finally call rebuild_relationships.
+ */
+ function install($base_dir, $is_upgrade = false, $previous_version = ''){
+ if(defined('TEMPLATE_URL'))SugarTemplateUtilities::disableCache();
+ if(!empty($GLOBALS['sugar_config']['moduleInstaller']['packageScan'])){
+ $this->ms->scanPackage($base_dir);
+ if($this->ms->hasIssues()){
+ $this->ms->displayIssues();
+ sugar_cleanup(true);
+ }
+ }
+
+ global $app_strings, $mod_strings;
+ $this->base_dir = $base_dir;
+ $total_steps = 5; //minimum number of steps with no tasks
+ $current_step = 0;
+ $tasks = array(
+ 'pre_execute',
+ 'install_copy',
+ 'install_images',
+ 'install_menus',
+ 'install_dcactions',
+ 'install_userpage',
+ 'install_dashlets',
+ 'install_administration',
+ 'install_connectors',
+ 'install_vardefs',
+ 'install_layoutdefs',
+ 'install_layoutfields',
+ 'install_relationships',
+ 'install_languages',
+ 'install_logichooks',
+ 'post_execute',
+ 'reset_opcodes',
+ );
+
+ $total_steps += count($tasks);
+ if(file_exists($this->base_dir . '/manifest.php')){
+ if(!$this->silent){
+ $current_step++;
+ display_progress_bar('install', $current_step, $total_steps);
+ echo '';
+ }
+
+ include($this->base_dir . '/manifest.php');
+ if($is_upgrade && !empty($previous_version)){
+ //check if the upgrade path exists
+ if(!empty($upgrade_manifest)){
+ if(!empty($upgrade_manifest['upgrade_paths'])){
+ if(!empty($upgrade_manifest['upgrade_paths'][$previous_version])){
+ $installdefs = $upgrade_manifest['upgrade_paths'][$previous_version];
+ }else{
+ $errors[] = 'No Upgrade Path Found in manifest.';
+ $this->abort($errors);
+ }//fi
+ }//fi
+ }//fi
+ }//fi
+ $this->id_name = $installdefs['id'];
+ $this->installdefs = $installdefs;
+ $installed_modules = array();
+ $tab_modules = array();
+ if(isset($installdefs['beans'])){
+ $str = "install_user_prefs($module, empty($bean['hide_by_default']));
+ $tab_modules[] = $module;
+ }else{
+ $str .= "\$modules_exempt_from_availability_check['$module'] = '$module';\n";
+ $str .= "\$modInvisList[] = '$module';\n";
+ }
+ $installed_modules[] = $module;
+ }else{
+ $errors[] = 'Bean array not well defined.';
+ $this->abort($errors);
+ }
+ }
+ $str.= "\n?>";
+ if(!file_exists("custom/Extension/application/Ext/Include")){
+ mkdir_recursive("custom/Extension/application/Ext/Include", true);
+ }
+ $out = sugar_fopen("custom/Extension/application/Ext/Include/$this->id_name.php", 'w');
+ fwrite($out,$str);
+ fclose($out);
+ $this->rebuild_modules();
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+
+ foreach($tasks as $task){
+ $this->$task();
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+ }
+ $this->install_beans($installed_modules);
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $total_steps, $total_steps);
+ }
+ if(isset($installdefs['custom_fields'])){
+ $this->log(translate('LBL_MI_IN_CUSTOMFIELD'));
+ $this->install_custom_fields($installdefs['custom_fields']);
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ echo '
';
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ echo '';
+ }
+ $selectedActions = array(
+ 'clearTpls',
+ 'clearJsFiles',
+ 'clearDashlets',
+ 'clearVardefs',
+ 'clearJsLangFiles',
+ 'rebuildAuditTables',
+ 'repairDatabase',
+ );
+ VardefManager::clearVardef();
+ global $beanList, $beanFiles, $moduleList;
+ if (file_exists('custom/application/Ext/Include/modules.ext.php'))
+ {
+ include('custom/application/Ext/Include/modules.ext.php');
+ }
+ require_once("modules/Administration/upgrade_custom_relationships.php");
+ upgrade_custom_relationships($installed_modules);
+ $this->rebuild_all(true);
+ require_once('modules/Administration/QuickRepairAndRebuild.php');
+ $rac = new RepairAndClear();
+ $rac->repairAndClearAll($selectedActions, $installed_modules,true, false);
+ $this->rebuild_relationships();
+ UpdateSystemTabs('Add',$tab_modules);
+
+ //clear the unified_search_module.php file
+ require_once('modules/Home/UnifiedSearchAdvanced.php');
+ UnifiedSearchAdvanced::unlinkUnifiedSearchModulesFile();
+
+ $this->log('' . translate('LBL_MI_COMPLETE') . ' ');
+ }else{
+ die("No \$installdefs Defined In $this->base_dir/manifest.php");
+ }
+
+ }
+
+ function install_user_prefs($module, $hide_from_user=false){
+ UserPreference::updateAllUserPrefs('display_tabs', $module, '', true, !$hide_from_user);
+ UserPreference::updateAllUserPrefs('hide_tabs', $module, '', true, $hide_from_user);
+ UserPreference::updateAllUserPrefs('remove_tabs', $module, '', true, $hide_from_user);
+ }
+ function uninstall_user_prefs($module){
+ UserPreference::updateAllUserPrefs('display_tabs', $module, '', true, true);
+ UserPreference::updateAllUserPrefs('hide_tabs', $module, '', true, true);
+ UserPreference::updateAllUserPrefs('remove_tabs', $module, '', true, true);
+ }
+
+ function pre_execute(){
+ require_once($this->base_dir . '/manifest.php');
+ if(isset($this->installdefs['pre_execute']) && is_array($this->installdefs['pre_execute'])){
+ foreach($this->installdefs['pre_execute'] as $includefile){
+ require_once(str_replace('', $this->base_dir, $includefile));
+ }
+ }
+ }
+
+ function post_execute(){
+ require_once($this->base_dir . '/manifest.php');
+ if(isset($this->installdefs['post_execute']) && is_array($this->installdefs['post_execute'])){
+ foreach($this->installdefs['post_execute'] as $includefile){
+ require_once(str_replace('', $this->base_dir, $includefile));
+ }
+ }
+ }
+
+ function pre_uninstall(){
+ require_once($this->base_dir . '/manifest.php');
+ if(isset($this->installdefs['pre_uninstall']) && is_array($this->installdefs['pre_uninstall'])){
+ foreach($this->installdefs['pre_uninstall'] as $includefile){
+ require_once(str_replace('', $this->base_dir, $includefile));
+ }
+ }
+ }
+
+ function post_uninstall(){
+ require_once($this->base_dir . '/manifest.php');
+ if(isset($this->installdefs['post_uninstall']) && is_array($this->installdefs['post_uninstall'])){
+ foreach($this->installdefs['post_uninstall'] as $includefile){
+ require_once(str_replace('', $this->base_dir, $includefile));
+ }
+ }
+ }
+
+ /*
+ * ModuleInstaller->install_copy gets the copy section of installdefs in the manifest and calls copy_path to copy each path (file or directory) to its final location
+ * (specified as from and to in the manifest), replacing by the base_dir value passed in to install.
+ */
+ function install_copy(){
+ if(isset($this->installdefs['copy'])){
+ /* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:22:11 PM */
+ $backup_path = clean_path( remove_file_extension(urldecode(hashToFile($_REQUEST['install_file'])))."-restore" );
+ /* END - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ foreach($this->installdefs['copy'] as $cp){
+ $GLOBALS['log']->debug("Copying ..." . $cp['from']. " to " .$cp['to'] );
+ /* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:22:11 PM */
+ //$this->copy_path($cp['from'], $cp['to']);
+ $this->copy_path($cp['from'], $cp['to'], $backup_path);
+ /* END - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ }
+ //here we should get the module list again as we could have copied something to the modules dir
+ $this->modules = get_module_dir_list();
+ }
+ }
+ function uninstall_copy(){
+ if(!empty($this->installdefs['copy'])){
+ foreach($this->installdefs['copy'] as $cp){
+ $cp['to'] = clean_path(str_replace('', $this->base_dir, $cp['to']));
+ $cp['from'] = clean_path(str_replace('', $this->base_dir, $cp['from']));
+ $GLOBALS['log']->debug('Unlink ' . $cp['to']);
+ /* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:22:11 PM */
+ //rmdir_recursive($cp['to']);
+
+ $backup_path = clean_path( remove_file_extension(urldecode(hashToFile($_REQUEST['install_file'])))."-restore/".$cp['to'] );
+ $this->uninstall_new_files($cp, $backup_path);
+ $this->copy_path($backup_path, $cp['to'], $backup_path, true);
+ /* END - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ }
+ $backup_path = clean_path( remove_file_extension(urldecode(hashToFile($_REQUEST['install_file'])))."-restore");
+ if(file_exists($backup_path))
+ rmdir_recursive($backup_path);
+ }
+ }
+
+
+ /**
+ * Removes any files that were added by the loaded module. If the files already existed prior to install
+ * it will be handled by copy_path with the uninstall parameter.
+ *
+ */
+ function uninstall_new_files($cp, $backup_path){
+ $zip_files = $this->dir_get_files($cp['from'],$cp['from']);
+ $backup_files = $this->dir_get_files($backup_path, $backup_path);
+ foreach($zip_files as $k=>$v){
+ //if it's not a backup then it is probably a new file but we'll check that it is not in the md5.files first
+ if(!isset($backup_files[$k])){
+ $to = $cp['to'] . $k;
+ //if it's not a sugar file then we remove it otherwise we can't restor it
+ if(!$this->ms->sugarFileExists($to)){
+ $GLOBALS['log']->debug('ModuleInstaller[uninstall_new_file] deleting file ' . $to);
+ if(file_exists($to)) {
+ unlink($to);
+ }
+ }else{
+ $GLOBALS['log']->fatal('ModuleInstaller[uninstall_new_file] Could not remove file ' . $to . ' as no backup file was found to restore to');
+ }
+ }
+ }
+ //lets check if the directory is empty if it is we will delete it as well
+ $files_remaining = $this->dir_file_count($cp['to']);
+ if(file_exists($cp['to']) && $files_remaining == 0){
+ $GLOBALS['log']->debug('ModuleInstaller[uninstall_new_file] deleting directory ' . $cp['to']);
+ rmdir_recursive($cp['to']);
+ }
+
+ }
+
+
+ function install_dashlets(){
+ if(isset($this->installdefs['dashlets'])){
+ foreach($this->installdefs['dashlets'] as $cp){
+ $this->log(translate('LBL_MI_IN_DASHLETS') . $cp['name']);
+ $cp['from'] = str_replace('', $this->base_dir, $cp['from']);
+ $path = 'custom/modules/Home/Dashlets/' . $cp['name'] . '/';
+ $GLOBALS['log']->debug("Installing Dashlet " . $cp['name'] . "..." . $cp['from'] );
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ copy_recursive($cp['from'] , $path);
+ }
+ include('modules/Administration/RebuildDashlets.php');
+
+ }
+ }
+
+ function uninstall_dashlets(){
+ if(isset($this->installdefs['dashlets'])){
+ foreach($this->installdefs['dashlets'] as $cp){
+ $this->log(translate('LBL_MI_UN_DASHLETS') . $cp['name']);
+ $path = 'custom/modules/Home/Dashlets/' . $cp['name'];
+ $GLOBALS['log']->debug('Unlink ' .$path);
+ if (file_exists($path))
+ rmdir_recursive($path);
+ }
+ include('modules/Administration/RebuildDashlets.php');
+ }
+ }
+
+
+ function install_images(){
+ if(isset($this->installdefs['image_dir'])){
+ $this->log( translate('LBL_MI_IN_IMAGES') );
+ $this->copy_path($this->installdefs['image_dir'] , 'custom/themes');
+
+ }
+ }
+
+ function install_menus(){
+ if(isset($this->installdefs['menu'])){
+ $this->log(translate('LBL_MI_IN_MENUS'));
+ foreach($this->installdefs['menu'] as $menu){
+ $menu['from'] = str_replace('', $this->base_dir, $menu['from']);
+ $GLOBALS['log']->debug("Installing Menu ..." . $menu['from']. " for " .$menu['to_module'] );
+ $path = 'custom/Extension/modules/' . $menu['to_module']. '/Ext/Menus';
+ if($menu['to_module'] == 'application'){
+ $path ='custom/Extension/' . $menu['to_module']. '/Ext/Menus';
+ }
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+
+ }
+ copy_recursive($menu['from'] , $path . '/'. $this->id_name . '.php');
+ }
+ $this->rebuild_menus();
+ }
+ }
+
+ function uninstall_menus(){
+ if(isset($this->installdefs['menu'])){
+ $this->log(translate('LBL_MI_UN_MENUS'));
+ foreach($this->installdefs['menu'] as $menu){
+ $menu['from'] = str_replace('', $this->base_dir, $menu['from']);
+ $GLOBALS['log']->debug("Uninstalling Menu ..." . $menu['from']. " for " .$menu['to_module'] );
+ $path = 'custom/Extension/modules/' . $menu['to_module']. '/Ext/Menus';
+ if($menu['to_module'] == 'application'){
+ $path ='custom/Extension/' . $menu['to_module']. '/Ext/Menus';
+ }
+ if (sugar_is_file($path . '/'. $this->id_name . '.php', 'w'))
+ {
+ rmdir_recursive( $path . '/'. $this->id_name . '.php');
+ }
+ else if (sugar_is_file($path . '/'. DISABLED_PATH . '/'. $this->id_name . '.php', 'w'))
+ {
+ rmdir_recursive( $path . '/'. DISABLED_PATH . '/'. $this->id_name . '.php');
+ }
+ }
+ $this->rebuild_menus();
+ }
+ }
+
+ function install_dcactions(){
+ if(isset($this->installdefs['dcaction'])){
+ $this->log(translate('LBL_MI_IN_MENUS'));
+ foreach($this->installdefs['dcaction'] as $action){
+ $action['from'] = str_replace('', $this->base_dir, $action['from']);
+ $GLOBALS['log']->debug("Installing DCActions ..." . $action['from']);
+ $path = 'custom/Extension/application/Ext/DashletContainer/Containers';
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ copy_recursive($action['from'] , $path . '/'. $this->id_name . '.php');
+ }
+ $this->rebuild_dashletcontainers();
+ }
+ }
+
+ function uninstall_dcactions(){
+ if(isset($this->installdefs['dcaction'])){
+ $this->log(translate('LBL_MI_UN_MENUS'));
+ foreach($this->installdefs['dcaction'] as $action){
+ $action['from'] = str_replace('', $this->base_dir, $action['from']);
+ $GLOBALS['log']->debug("Uninstalling DCActions ..." . $action['from'] );
+ $path = 'custom/Extension/application/Ext/DashletContainer/Containers';
+ if (sugar_is_file($path . '/'. $this->id_name . '.php', 'w'))
+ {
+ rmdir_recursive( $path . '/'. $this->id_name . '.php');
+ }
+ else if (sugar_is_file($path . '/'. DISABLED_PATH . '/'. $this->id_name . '.php', 'w'))
+ {
+ rmdir_recursive( $path . '/'. DISABLED_PATH . '/'. $this->id_name . '.php');
+ }
+ }
+ $this->rebuild_dashletcontainers();
+ }
+ }
+
+ function install_administration(){
+ if(isset($this->installdefs['administration'])){
+ $this->log(translate('LBL_MI_IN_ADMIN'));
+ foreach($this->installdefs['administration'] as $administration){
+ $administration['from'] = str_replace('', $this->base_dir, $administration['from']);
+ $GLOBALS['log']->debug("Installing Administration Section ..." . $administration['from'] );
+ $path = 'custom/Extension/modules/Administration/Ext/Administration';
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+
+ }
+ copy_recursive($administration['from'] , $path . '/'. $this->id_name . '.php');
+ }
+ $this->rebuild_administration();
+ }
+
+ }
+ function uninstall_administration(){
+ if(isset($this->installdefs['administration'])){
+ $this->log(translate('LBL_MI_UN_ADMIN'));
+ foreach($this->installdefs['administration'] as $administration){
+ $administration['from'] = str_replace('', $this->base_dir, $administration['from']);
+ $GLOBALS['log']->debug("Uninstalling Administration Section ..." . $administration['from'] );
+ $path = 'custom/Extension/modules/Administration/Ext/Administration';
+ if (sugar_is_file($path . '/'. $this->id_name . '.php', "w"))
+ rmdir_recursive( $path . '/'. $this->id_name . '.php');
+ else if (sugar_is_file($path . '/'. DISABLED_PATH . "/" . $this->id_name . '.php', "w"))
+ rmdir_recursive( $path . '/'. DISABLED_PATH . "/" . $this->id_name . '.php');
+ }
+ $this->rebuild_administration();
+ }
+ }
+
+ function install_connectors(){
+ if(isset($this->installdefs['connectors'])){
+ foreach($this->installdefs['connectors'] as $cp){
+ $this->log(translate('LBL_MI_IN_CONNECTORS') . $cp['name']);
+ $dir = str_replace('_','/',$cp['name']);
+ $cp['connector'] = str_replace('', $this->base_dir, $cp['connector']);
+ $source_path = 'custom/modules/Connectors/connectors/sources/' . $dir. '/';
+ $GLOBALS['log']->debug("Installing Connector " . $cp['name'] . "..." . $cp['connector'] );
+ if(!file_exists($source_path)){
+ mkdir_recursive($source_path, true);
+ }
+ copy_recursive($cp['connector'] , $source_path);
+
+ //Install optional formatter code if it is specified
+ if(!empty($cp['formatter'])) {
+ $cp['formatter'] = str_replace('', $this->base_dir, $cp['formatter']);
+ $formatter_path = 'custom/modules/Connectors/connectors/formatters/' . $dir. '/';
+ if(!file_exists($formatter_path)){
+ mkdir_recursive($formatter_path, true);
+ }
+ copy_recursive($cp['formatter'] , $formatter_path);
+ }
+ }
+ require_once('include/connectors/utils/ConnectorUtils.php');
+ ConnectorUtils::installSource($cp['name']);
+ }
+
+ }
+ function uninstall_connectors(){
+ if(isset($this->installdefs['connectors'])){
+ foreach($this->installdefs['connectors'] as $cp){
+ $this->log(translate('LBL_MI_UN_CONNECTORS') . $cp['name']);
+ $dir = str_replace('_','/',$cp['name']);
+ $source_path = 'custom/modules/Connectors/connectors/sources/' . $dir;
+ $formatter_path = 'custom/modules/Connectors/connectors/formatters/' . $dir;
+ $GLOBALS['log']->debug('Unlink ' .$source_path);
+ rmdir_recursive($source_path);
+ rmdir_recursive($formatter_path);
+ }
+ require_once('include/connectors/utils/ConnectorUtils.php');
+ //ConnectorUtils::getConnectors(true);
+ ConnectorUtils::uninstallSource($cp['name']);
+ }
+ }
+
+ function install_userpage(){
+ if(isset($this->installdefs['user_page'])){
+ $this->log(translate('LBL_MI_IN_USER'));
+ foreach($this->installdefs['user_page'] as $userpage){
+ $userpage['from'] = str_replace('', $this->base_dir, $userpage['from']);
+ $GLOBALS['log']->debug("Installing User Page Section ..." . $userpage['from'] );
+ $path = 'custom/Extension/modules/Users/Ext/UserPage';
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+
+ }
+ copy_recursive($userpage['from'] , $path . '/'. $this->id_name . '.php');
+ }
+ $this->rebuild_userpage();
+ }
+
+ }
+ function uninstall_userpage(){
+ if(isset($this->installdefs['user_page'])){
+ $this->log(translate('LBL_MI_UN_USER') );
+ foreach($this->installdefs['user_page'] as $userpage){
+ $userpage['from'] = str_replace('', $this->base_dir, $userpage['from']);
+ $GLOBALS['log']->debug("Uninstalling User Page Section ..." . $userpage['from'] );
+ $path = 'custom/Extension/modules/Users/Ext/UserPage';
+ rmdir_recursive( $path . '/'. $this->id_name . '.php');
+ }
+ $this->rebuild_userpage();
+ }
+ }
+
+ /*
+ * ModuleInstaller->install_vardefs uses the vardefs section of the installdefs and copies from the 'from' path (replacing as usual) to either
+ * custom/Extension/modules//Ext/Vardefs or custom/Extension//Ext/Vardefs if the 'to_module' value in the installdefs is set to 'application'.
+ * Finally rebuild_vardefs() is used to merge /Ext/Vardefs into vardefs.ext.php
+ */
+ function install_vardefs(){
+ if(isset($this->installdefs['vardefs'])){
+ $this->log(translate('LBL_MI_IN_VAR') );
+ foreach($this->installdefs['vardefs'] as $vardefs){
+ $vardefs['from'] = str_replace('', $this->base_dir, $vardefs['from']);
+ $this->install_vardef($vardefs['from'], $vardefs['to_module'], $this->id_name);
+ }
+ $this->rebuild_vardefs();
+ }
+ }
+ function uninstall_vardefs(){
+ if(isset($this->installdefs['vardefs'])){
+ $this->log(translate('LBL_MI_UN_VAR') );
+ foreach($this->installdefs['vardefs'] as $vardefs){
+ $vardefs['from'] = str_replace('', $this->base_dir, $vardefs['from']);
+ $GLOBALS['log']->debug("Uninstalling Vardefs ..." . $vardefs['from'] . " for " .$vardefs['to_module']);
+ $path = 'custom/Extension/modules/' . $vardefs['to_module']. '/Ext/Vardefs';
+ if($vardefs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $vardefs['to_module']. '/Ext/Vardefs';
+ }
+ if(file_exists($path . '/'. $this->id_name . '.php'))
+ {
+ rmdir_recursive( $path . '/'. $this->id_name . '.php');
+ }
+ else if(file_exists($path . '/'. DISABLED_PATH . '/'. $this->id_name . '.php'))
+ {
+ rmdir_recursive($path . '/'. DISABLED_PATH . '/'. $this->id_name . '.php');
+ }
+ else if (file_exists($path . '/'. basename($vardefs['from'] )))
+ {
+ rmdir_recursive( $path . '/'. basename($vardefs['from'] ));
+ }
+ else if(file_exists($path . '/'. DISABLED_PATH . '/'. basename($vardefs['from'])))
+ {
+ rmdir_recursive($path . '/'. DISABLED_PATH . '/'. basename($vardefs['from']));
+ }
+ }
+ $this->rebuild_vardefs();
+ }
+ }
+ function install_vardef($from, $to_module){
+ $GLOBALS['log']->debug("Installing Vardefs ..." . $from . " for " .$to_module);
+ $path = 'custom/Extension/modules/' . $to_module. '/Ext/Vardefs';
+ if($to_module == 'application'){
+ $path ='custom/Extension/' . $to_module. '/Ext/Vardefs';
+ }
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ copy_recursive($from , $path.'/'. basename($from));
+ }
+
+ /*
+ * ModuleInstaller->install_layoutdefs installs the $layout_defs variable (subpanel definitions) from Ext/Layoutdefs to the to_module location of
+ * custom/Extension/modules/' . $to_module. '/Ext/Layoutdefs/<$module>.php. before calling rebuild_layoutdefs which merge_files Ext/Layoutdefs/, 'layoutdefs.ext.php'. Note that this is not used for the viewdefs in the metadata directory - they are installed through the install_copy() operation that just takes the contents of the module directory and places it in the /modules area.
+ */
+ function install_layoutdefs(){
+ if(isset($this->installdefs['layoutdefs'])){
+ $this->log(translate('LBL_MI_IN_SUBPANEL') );
+ foreach($this->installdefs['layoutdefs'] as $layoutdefs){
+ $layoutdefs['from'] = str_replace('', $this->base_dir, $layoutdefs['from']);
+ $this->install_layoutdef($layoutdefs['from'], $layoutdefs['to_module'], $this->id_name);
+ }
+ $this->rebuild_layoutdefs();
+ }
+ }
+ function uninstall_layoutdefs(){
+ if(isset($this->installdefs['layoutdefs'])){
+ $this->log(translate('LBL_MI_UN_SUBPANEL') );
+ foreach($this->installdefs['layoutdefs'] as $layoutdefs){
+ $layoutdefs['from'] = str_replace('', $this->base_dir, $layoutdefs['from']);
+ $GLOBALS['log']->debug("Uninstalling Layoutdefs ..." . $layoutdefs['from'] . " for " .$layoutdefs['to_module']);
+ $path = 'custom/Extension/modules/' . $layoutdefs['to_module']. '/Ext/Layoutdefs';
+ if($layoutdefs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $layoutdefs['to_module']. '/Ext/Layoutdefs';
+ }
+ if (file_exists($path . '/'. $this->id_name . '.php'))
+ {
+ rmdir_recursive( $path . '/'. $this->id_name . '.php');
+ }
+ else if (file_exists($path . '/'. DISABLED_PATH . '/' . $this->id_name . '.php'))
+ {
+ rmdir_recursive($path . '/'. DISABLED_PATH . '/' . $this->id_name . '.php');
+ }
+ else if (file_exists($path . '/'. basename($layoutdefs['from'] )))
+ {
+ rmdir_recursive( $path . '/'. basename($layoutdefs['from'] ));
+ }
+ else if(file_exists($path . '/'. DISABLED_PATH . '/'. basename($layoutdefs['from'])))
+ {
+ rmdir_recursive($path . '/'. DISABLED_PATH . '/'. basename($layoutdefs['from']));
+ }
+ }
+ $this->rebuild_layoutdefs();
+ }
+ }
+ function install_layoutdef($from, $to_module){
+ $GLOBALS['log']->debug("Installing Layout Defs ..." . $from . " for " .$to_module);
+ $path = 'custom/Extension/modules/' . $to_module. '/Ext/Layoutdefs';
+ if($to_module == 'application'){
+ $path ='custom/Extension/' . $to_module. '/Ext/Layoutdefs';
+ }
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ copy_recursive($from , $path.'/'. basename($from));
+ }
+
+ function install_languages()
+ {
+ $languages = array();
+ if(isset($this->installdefs['language']))
+ {
+ $this->log(translate('LBL_MI_IN_LANG') );
+ foreach($this->installdefs['language'] as $packs)
+ {
+ $modules[]=$packs['to_module'];
+ $languages[$packs['language']] = $packs['language'];
+ $packs['from'] = str_replace('', $this->base_dir, $packs['from']);
+ $GLOBALS['log']->debug("Installing Language Pack ..." . $packs['from'] . " for " .$packs['to_module']);
+ $path = 'custom/Extension/modules/' . $packs['to_module']. '/Ext/Language';
+ if($packs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $packs['to_module']. '/Ext/Language';
+ }
+
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ copy_recursive($packs['from'] , $path.'/'.$packs['language'].'.'. $this->id_name . '.php');
+ }
+ $this->rebuild_languages($languages, $modules);
+
+ }
+ }
+
+ function uninstall_languages(){
+ $languages = array();
+ if(isset($this->installdefs['language'])){
+ $this->log(translate('LBL_MI_UN_LANG') );
+ foreach($this->installdefs['language'] as $packs){
+ $modules[]=$packs['to_module'];
+ $languages[$packs['language']] = $packs['language'];
+ $packs['from'] = str_replace('', $this->base_dir, $packs['from']);
+ $GLOBALS['log']->debug("Uninstalling Language Pack ..." . $packs['from'] . " for " .$packs['to_module']);
+ $path = 'custom/Extension/modules/' . $packs['to_module']. '/Ext/Language';
+ if($packs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $packs['to_module']. '/Ext/Language';
+ }
+ if (sugar_is_file($path.'/'.$packs['language'].'.'. $this->id_name . '.php', 'w')) {
+ rmdir_recursive( $path.'/'.$packs['language'].'.'. $this->id_name . '.php');
+ } else if (sugar_is_file($path.'/'.DISABLED_PATH.'/'.$packs['language'].'.'. $this->id_name . '.php', 'w')) {
+ rmdir_recursive($path.'/'.DISABLED_PATH.'/'.$packs['language'].'.'. $this->id_name . '.php', 'w');
+ }
+ }
+ $this->rebuild_languages($languages, $modules);
+
+ }
+ }
+
+ // Functions for adding and removing logic hooks from uploaded files
+ // Since one class/file can be used by multiple logic hooks, I'm not going to touch the file labeled in the logic_hook entry
+ /* The module hook definition should look like this:
+ $installdefs = array(
+ ... blah blah ...
+ 'logic_hooks' => array(
+ array('module' => 'Accounts',
+ 'hook' => 'after_save',
+ 'order' => 99,
+ 'description' => 'Account sample logic hook',
+ 'file' => 'modules/Sample/sample_account_logic_hook_file.php',
+ 'class' => 'SampleLogicClass',
+ 'function' => 'accountAfterSave',
+ ),
+ ),
+ ... blah blah ...
+ );
+ */
+ function install_logichooks() {
+ // Since the logic hook files get copied over with the rest of the module directory, we just need to enable them
+ $this->enable_logichooks();
+ }
+
+ function uninstall_logichooks() {
+ // Since the logic hook files get removed with the rest of the module directory, we just need to disable them
+ $this->disable_logichooks();
+ }
+
+ function enable_logichooks() {
+ if(empty($this->installdefs['logic_hooks']) || !is_array($this->installdefs['logic_hooks'])) {
+ return;
+ }
+
+
+
+ foreach($this->installdefs['logic_hooks'] as $hook ) {
+ check_logic_hook_file($hook['module'], $hook['hook'], array($hook['order'], $hook['description'], $hook['file'], $hook['class'], $hook['function']));
+ }
+ }
+
+ function disable_logichooks() {
+ if(empty($this->installdefs['logic_hooks']) || !is_array($this->installdefs['logic_hooks'])) {
+ return;
+ }
+
+
+ foreach($this->installdefs['logic_hooks'] as $hook ) {
+ remove_logic_hook($hook['module'], $hook['hook'], array($hook['order'], $hook['description'], $hook['file'], $hook['class'], $hook['function']));
+ }
+ }
+
+/* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ function copy_path($from, $to, $backup_path='', $uninstall=false){
+ //function copy_path($from, $to){
+/* END - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ $to = str_replace('', $this->base_dir, $to);
+
+ if(!$uninstall) {
+ $from = str_replace('', $this->base_dir, $from);
+ $GLOBALS['log']->debug('Copy ' . $from);
+ }
+ else {
+ $from = str_replace('', $backup_path, $from);
+ //$GLOBALS['log']->debug('Restore ' . $from);
+ }
+ $from = clean_path($from);
+ $to = clean_path($to);
+
+ $dir = dirname($to);
+ //there are cases where if we need to create a directory in the root directory
+ if($dir == '.' && is_dir($from)){
+ $dir = $to;
+ }
+ if(!sugar_is_dir($dir, 'instance'))
+ mkdir_recursive($dir, true);
+/* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ if(empty($backup_path)) {
+/* END - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ if(!copy_recursive($from, $to)){
+ die('Failed to copy ' . $from. ' ' . $to);
+ }
+/* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ }
+ elseif(!$this->copy_recursive_with_backup($from, $to, $backup_path, $uninstall)){
+ die('Failed to copy ' . $from. ' to ' . $to);
+ }
+/* END - RESTORE POINT - by MR. MILK August 31, 2005 02:22:18 PM */
+ }
+
+ function install_custom_fields($fields){
+ global $beanList, $beanFiles;
+ include('include/modules.php');
+ require_once('modules/DynamicFields/FieldCases.php');
+ foreach($fields as $field){
+ $installed = false;
+ if(isset($beanList[ $field['module']])){
+ $class = $beanList[ $field['module']];
+ if(!isset($field['ext4']))$field['ext4'] = '';
+ if(!isset($field['mass_update']))$field['mass_update'] = 0;
+ if(!isset($field['duplicate_merge']))$field['duplicate_merge'] = 0;
+ if(!isset($field['help']))$field['help'] = '';
+
+ if(file_exists($beanFiles[$class])){
+ require_once($beanFiles[$class]);
+ $mod = new $class();
+ $installed = true;
+ $fieldObject = get_widget($field['type']);
+ $fieldObject->populateFromRow($field);
+ $mod->custom_fields->use_existing_labels = true;
+ $mod->custom_fields->addFieldObject($fieldObject);
+ }
+ }
+ if(!$installed){
+ $GLOBALS['log']->debug('Could not install custom field ' . $field['name'] . ' for module ' . $field['module'] . ': Module does not exist');
+ }
+ }
+ }
+
+ function uninstall_custom_fields($fields){
+ global $beanList, $beanFiles;
+ require_once('modules/DynamicFields/DynamicField.php');
+ $dyField = new DynamicField();
+
+ foreach($fields as $field){
+ $class = $beanList[ $field['module']];
+ if(file_exists($beanFiles[$class])){
+ require_once($beanFiles[$class]);
+ $mod = new $class();
+ $dyField->bean = $mod;
+ $dyField->module = $field['module'];
+ $dyField->deleteField($field['name']);
+ }
+ }
+ }
+
+ /*
+ * ModuleInstaller->install_relationships calls install_relationship for every file included in the module package that defines a relationship, and then
+ * writes a custom/Extension/application/Ext/TableDictionary/$module.php file containing an include_once for every relationship metadata file passed to install_relationship.
+ * Next it calls install_vardef and install_layoutdef. Finally, it rebuilds the vardefs and layoutdefs (by calling merge_files as usual), and then calls merge_files to merge
+ * everything in 'Ext/TableDictionary/' into 'tabledictionary.ext.php'
+ */
+ function install_relationships ()
+ {
+ if (isset ( $this->installdefs [ 'relationships' ] ))
+ {
+ $this->log ( translate ( 'LBL_MI_IN_RELATIONSHIPS' ) ) ;
+ $str = "installdefs [ 'relationships' ] as $key => $relationship )
+ {
+ $filename = basename ( $relationship [ 'meta_data' ] ) ;
+ $this->copy_path ( $relationship [ 'meta_data' ], 'custom/metadata/' . $filename ) ;
+ $this->install_relationship ( 'custom/metadata/' . $filename ) ;
+ $save_table_dictionary = true ;
+
+ if (! empty ( $relationship [ 'module_vardefs' ] ))
+ {
+ $relationship [ 'module_vardefs' ] = str_replace ( '', $this->base_dir, $relationship [ 'module_vardefs' ] ) ;
+ $this->install_vardef ( $relationship [ 'module_vardefs' ], $relationship [ 'module' ] ) ;
+ }
+
+ if (! empty ( $relationship [ 'module_layoutdefs' ] ))
+ {
+ $relationship [ 'module_layoutdefs' ] = str_replace ( '', $this->base_dir, $relationship [ 'module_layoutdefs' ] ) ;
+ $this->install_layoutdef ( $relationship [ 'module_layoutdefs' ], $relationship [ 'module' ] ) ;
+ }
+
+ $relName = strpos($filename, "MetaData") !== false ? substr($filename, 0, strlen($filename) - 12) : $filename;
+ $out = sugar_fopen ( "custom/Extension/application/Ext/TableDictionary/$relName.php", 'w' ) ;
+ fwrite ( $out, $str . "include('custom/metadata/$filename');\n\n?>" ) ;
+ fclose ( $out ) ;
+ }
+
+
+
+ $this->rebuild_vardefs () ;
+ $this->rebuild_layoutdefs () ;
+ if ($save_table_dictionary)
+ {
+ $this->rebuild_tabledictionary () ;
+ }
+
+ }
+ }
+
+ /*
+ * Install_relationship obtains a set of relationship definitions from the filename passed in as a parameter.
+ * For each definition it calls db->createTableParams to build the relationships table if it does not exist,
+ * and SugarBean::createRelationshipMeta to add the relationship into the 'relationships' table.
+ */
+ function install_relationship($file)
+ {
+ $_REQUEST['moduleInstaller'] = true;
+ if(!file_exists($file))
+ {
+ $GLOBALS['log']->debug( 'File does not exists : '.$file);
+ return;
+ }
+ include($file);
+ $rel_dictionary = $dictionary;
+ foreach ($rel_dictionary as $rel_name => $rel_data)
+ {
+ $table = ''; // table is actually optional
+ // check if we have a table definition - not all relationships require a join table
+ if ( isset( $rel_data[ 'table' ] ) )
+ {
+ $table = $rel_data[ 'table' ];
+
+ if(!$this->db->tableExists($table))
+ {
+ $this->db->createTableParams($table, $rel_data[ 'fields' ], $rel_data[ 'indices' ]);
+ }
+ }
+
+ if(!$this->silent)
+ $GLOBALS['log']->debug("Processing relationship meta for ". $rel_name."...");
+ SugarBean::createRelationshipMeta($rel_name, $this->db,$table,$rel_dictionary,'');
+ Relationship::delete_cache();
+ if(!$this->silent)
+ $GLOBALS['log']->debug( 'done ');
+ }
+ }
+
+ function install_layoutfields() {
+ if (!empty ( $this->installdefs [ 'layoutfields' ] ))
+ {
+ foreach ( $this->installdefs [ 'layoutfields' ] as $fieldSet )
+ {
+ if (!empty($fieldSet['additional_fields']))
+ {
+ $this->addFieldsToLayout($fieldSet['additional_fields']);
+ }
+ }
+ }
+ }
+
+ function uninstall_layoutfields() {
+ if (!empty ( $this->installdefs [ 'layoutfields' ] ))
+ {
+ foreach ( $this->installdefs [ 'layoutfields' ] as $fieldSet )
+ {
+ if (!empty($fieldSet['additional_fields']))
+ {
+ $this->removeFieldsFromLayout($fieldSet['additional_fields']);
+ }
+ }
+ }
+ }
+
+ function uninstall_relationship($file, $rel_dictionary = null){
+ if ($rel_dictionary == null)
+ {
+ if(!file_exists($file)){
+ $GLOBALS['log']->debug( 'File does not exists : '.$file);
+ return;
+ }
+ include($file);
+ $rel_dictionary = $dictionary;
+ }
+
+ foreach ($rel_dictionary as $rel_name => $rel_data)
+ {
+ if (!empty($rel_data['table'])){
+ $table = $rel_data['table'];
+ }
+ else{
+ $table = ' One-to-Many ';
+ }
+
+ if ($this->db->tableExists($table) && isset($GLOBALS['mi_remove_tables']) && $GLOBALS['mi_remove_tables'])
+ {
+ SugarBean::removeRelationshipMeta($rel_name, $this->db,$table,$rel_dictionary,'');
+ $this->db->dropTableName($table);
+ if(!$this->silent) $this->log( translate('LBL_MI_UN_RELATIONSHIPS_DROP') . $table);
+ }
+
+ //Delete Layout defs
+ // check to see if we have any vardef or layoutdef entries to remove - must have a relationship['module'] parameter if we do
+ if (!isset($rel_data[ 'module' ]))
+ $mods = array(
+ $rel_data['relationships'][$rel_name]['lhs_module'],
+ $rel_data['relationships'][$rel_name]['rhs_module'],
+ );
+ else
+ $mods = array($rel_data[ 'module' ]);
+
+ $filename = "$rel_name.php";
+
+ foreach($mods as $mod) {
+ if ($mod != 'application' ) {
+ $basepath = "custom/Extension/modules/$mod/Ext/";
+ } else {
+ $basepath = "custom/Extension/application/Ext/";
+ }
+
+ foreach (array($filename , "custom" . $filename) as $fn) {
+ //remove any vardefs
+ $path = $basepath . "Vardefs/$fn" ;
+ if (file_exists( $path ))
+ rmdir_recursive( $path );
+
+ //remove any layoutdefs
+ $path = $basepath . "Layoutdefs/$fn" ;
+ if( file_exists( $path ))
+ {
+ rmdir_recursive( $path );
+ }
+ }
+ }
+
+ foreach (array($filename , "custom" . $filename) as $fn) {
+ // remove the table dictionary extension
+ if ( file_exists("custom/Extension/application/Ext/TableDictionary/$fn"))
+ unlink("custom/Extension/application/Ext/TableDictionary/$fn");
+
+ if (file_exists("custom/metadata/{$rel_name}MetaData.php"))
+ unlink( "custom/metadata/{$rel_name}MetaData.php" );
+ }
+ }
+ }
+
+ function uninstall_relationships($include_studio_relationships = false){
+ $relationships = array();
+
+ //Find and remove studio created relationships.
+ global $beanList, $beanFiles, $dictionary;
+ //Load up the custom relationship definitions.
+ if(file_exists('custom/application/Ext/TableDictionary/tabledictionary.ext.php')){
+ include('custom/application/Ext/TableDictionary/tabledictionary.ext.php');
+ }
+ //Find all the relatioships/relate fields involving this module.
+ $rels_to_remove = array();
+ foreach($beanList as $mod => $bean) {
+ VardefManager::loadVardef($mod, $bean);
+ //We can skip modules that are in this package as they will be removed anyhow
+ if (!in_array($mod, $this->modulesInPackage) && !empty($dictionary[$bean]) && !empty($dictionary[$bean]['fields']))
+ {
+ $field_defs = $dictionary[$bean]['fields'];
+ foreach($field_defs as $field => $def)
+ {
+ //Weed out most fields first
+ if (isset ($def['type']))
+ {
+ //Custom relationships created in the relationship editor
+ if ($def['type'] == "link" && !empty($def['relationship']) && !empty($dictionary[$def['relationship']]))
+ {
+ $rel_name = $def['relationship'];
+
+ $rel_def = $dictionary[$rel_name]['relationships'][$rel_name];
+
+ //Check against mods to be removed.
+ foreach($this->modulesInPackage as $removed_mod) {
+ if ($rel_def['lhs_module'] == $removed_mod || $rel_def['rhs_module'] == $removed_mod )
+ {
+ $dictionary[$rel_name]['from_studio'] = true;
+ $relationships[$rel_name] = $dictionary[$rel_name];
+ }
+ }
+ }
+ //Custom "relate" fields created in studio also need to be removed
+ if ($def['type'] == 'relate' && isset($def['module'])) {
+ foreach($this->modulesInPackage as $removed_mod) {
+ if ($def['module'] == $removed_mod)
+ {
+ require_once 'modules/ModuleBuilder/Module/StudioModule.php' ;
+ $studioMod = new StudioModule ( $mod );
+ $studioMod->removeFieldFromLayouts( $field );
+ if (isset($def['custom_module'])) {
+ require_once ('modules/DynamicFields/DynamicField.php') ;
+ require_once ($beanFiles [ $bean ]) ;
+ $seed = new $bean ( ) ;
+ $df = new DynamicField ( $mod ) ;
+ $df->setup ( $seed ) ;
+ //Need to load the entire field_meta_data for some field types
+ $field_obj = $df->getFieldWidget($mod, $field);
+ $field_obj->delete ( $df ) ;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+
+ $this->uninstall_relationship(null, $relationships);
+
+ if(isset($this->installdefs['relationships'])) {
+ $relationships = $this->installdefs['relationships'];
+ $this->log(translate('LBL_MI_UN_RELATIONSHIPS') );
+ foreach($relationships as $relationship)
+ {
+ // remove the metadata entry
+ $filename = basename ( $relationship['meta_data'] );
+ $pathname = (file_exists("custom/metadata/$filename")) ? "custom/metadata/$filename" : "metadata/$filename" ;
+ if(isset($GLOBALS['mi_remove_tables']) && $GLOBALS['mi_remove_tables'])
+ $this->uninstall_relationship( $pathname );
+ if (file_exists($pathname))
+ unlink( $pathname );
+ }
+ }
+
+ if (file_exists("custom/Extension/application/Ext/TableDictionary/{$this->id_name}.php"))
+ unlink("custom/Extension/application/Ext/TableDictionary/{$this->id_name}.php");
+ Relationship::delete_cache();
+ $this->rebuild_tabledictionary();
+ }
+
+
+
+
+ function uninstall($base_dir){
+ if(defined('TEMPLATE_URL'))SugarTemplateUtilities::disableCache();
+ global $app_strings;
+ $total_steps = 5; //min steps with no tasks
+ $current_step = 0;
+ $this->base_dir = $base_dir;
+ $tasks = array(
+ 'pre_uninstall',
+ 'uninstall_relationships',
+ 'uninstall_copy',
+ 'uninstall_dcactions',
+ 'uninstall_menus',
+ 'uninstall_dashlets',
+ 'uninstall_userpage',
+ 'uninstall_administration',
+ 'uninstall_connectors',
+ 'uninstall_vardefs',
+ 'uninstall_layoutdefs',
+ 'uninstall_layoutfields',
+ 'uninstall_languages',
+ 'uninstall_logichooks',
+ 'post_uninstall',
+ );
+ $total_steps += count($tasks); //now the real number of steps
+ if(file_exists($this->base_dir . '/manifest.php')){
+ if(!$this->silent){
+ $current_step++;
+ display_progress_bar('install', $current_step, $total_steps);
+ echo '';
+ }
+
+ global $moduleList;
+ include($this->base_dir . '/manifest.php');
+ $this->installdefs = $installdefs;
+ $this->id_name = $this->installdefs['id'];
+ $installed_modules = array();
+ if(isset($this->installdefs['beans'])){
+
+ foreach($this->installdefs['beans'] as $bean){
+
+ $installed_modules[] = $bean['module'];
+ $this->uninstall_user_prefs($bean['module']);
+ }
+ $this->modulesInPackage = $installed_modules;
+ $this->uninstall_beans($installed_modules);
+ $this->uninstall_customizations($installed_modules);
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $total_steps, $total_steps);
+ }
+ if (sugar_is_file("custom/Extension/application/Ext/Include/$this->id_name.php", 'w'))
+ rmdir_recursive("custom/Extension/application/Ext/Include/$this->id_name.php");
+ else if(sugar_is_file("custom/Extension/application/Ext/Include/" . DISABLED_PATH . "/$this->id_name.php", 'w'))
+ rmdir_recursive("custom/Extension/application/Ext/Include/" . DISABLED_PATH . "/$this->id_name.php");
+
+ $this->rebuild_modules();
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+
+
+ foreach($tasks as $task){
+ $this->$task();
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+ }
+ if(isset($installdefs['custom_fields']) && (isset($GLOBALS['mi_remove_tables']) && $GLOBALS['mi_remove_tables'])){
+ $this->log(translate('LBL_MI_UN_CUSTOMFIELD'));
+ $this->uninstall_custom_fields($installdefs['custom_fields']);
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ echo '
';
+ }
+ //since we are passing $silent = true to rebuildAll() in that method it will set $this->silent = true, so
+ //we need to save the setting to set it back after rebuildAll() completes.
+ $silentBak = $this->silent;
+ $this->rebuild_all(true);
+ $this->silent = $silentBak;
+
+ //#27877, If the request from MB redeploy a custom module , we will not remove the ACL actions for this package.
+ if( !isset($_REQUEST['action']) || $_REQUEST['action']!='DeployPackage' ){
+ $this->remove_acl_actions();
+ }
+ //end
+
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ echo '';
+ }
+
+ UpdateSystemTabs('Restore',$installed_modules);
+
+ //clear the unified_search_module.php file
+ require_once('modules/Home/UnifiedSearchAdvanced.php');
+ UnifiedSearchAdvanced::unlinkUnifiedSearchModulesFile();
+
+ $this->log('' . translate('LBL_MI_COMPLETE') . ' ');
+ if(!$this->silent){
+ update_progress_bar('install', $total_steps, $total_steps);
+ }
+ }else{
+ die("No manifest.php Defined In $this->base_dir/manifest.php");
+ }
+ }
+
+ function rebuild_languages($languages, $modules=""){
+ foreach($languages as $language=>$value){
+ $this->log(translate('LBL_MI_REBUILDING') . " Language...$language");
+ $this->merge_files('Ext/Language/', $language.'.lang.ext.php', $language);
+ if($modules!=""){
+ foreach($modules as $module){
+ LanguageManager::clearLanguageCache($module, $language);
+ }
+ }
+ }
+ sugar_cache_reset();
+
+ }
+
+ function rebuild_vardefs(){
+ $this->log(translate('LBL_MI_REBUILDING') . " Vardefs...");
+ $this->merge_files('Ext/Vardefs/', 'vardefs.ext.php');
+ sugar_cache_reset();
+ }
+
+ function rebuild_layoutdefs(){
+ $this->log(translate('LBL_MI_REBUILDING') . " Layoutdefs...");
+ $this->merge_files('Ext/Layoutdefs/', 'layoutdefs.ext.php');
+
+ }
+
+ function rebuild_menus(){
+ $this->log(translate('LBL_MI_REBUILDING') . " Menus...");
+ $this->merge_files('Ext/Menus/', 'menu.ext.php');
+ }
+
+ function rebuild_dashletcontainers(){
+ $this->log(translate('LBL_MI_REBUILDING') . " DC Actions...");
+ $this->merge_files('Ext/DashletContainer/Containers/', 'dcactions.ext.php');
+ }
+
+ function rebuild_modules(){
+ $this->log(translate('LBL_MI_REBUILDING') . " Modules...");
+ $this->merge_files('Ext/Include/', 'modules.ext.php', '', true);
+ }
+
+ function rebuild_administration(){
+ $this->log(translate('LBL_MI_REBUILDING') . " administration " . translate('LBL_MI_SECTION'));
+ $this->merge_files('Ext/Administration/', 'administration.ext.php');
+ }
+ function rebuild_userpage(){
+ $this->log(translate('LBL_MI_REBUILDING') . " User Page " . translate('LBL_MI_SECTION'));
+ $this->merge_files('Ext/UserPage/', 'userpage.ext.php');
+ }
+ function rebuild_tabledictionary(){
+ $this->log(translate('LBL_MI_REBUILDING') . " administration " . translate('LBL_MI_SECTION'));
+ $this->merge_files('Ext/TableDictionary/', 'tabledictionary.ext.php');
+ }
+
+ function rebuild_relationships() {
+ if(!$this->silent) echo translate('LBL_MI_REBUILDING') . ' Relationships';
+ $_REQUEST['silent'] = true;
+ global $beanFiles;
+ include('include/modules.php');
+ include("modules/Administration/RebuildRelationship.php");
+ }
+
+ function remove_acl_actions() {
+ global $beanFiles, $beanList, $current_user;
+ include('include/modules.php');
+ include("modules/ACL/remove_actions.php");
+ }
+
+ /**
+ * Wrapper call to modules/Administration/RepairIndex.php
+ */
+ function repair_indices() {
+ global $current_user,$beanFiles,$dictionary;
+ $this->log(translate('LBL_MI_REPAIR_INDICES'));
+ $_REQUEST['silent'] = true; // local var flagging echo'd output in repair script
+ $_REQUEST['mode'] = 'execute'; // flag to just go ahead and run the script
+ include("modules/Administration/RepairIndex.php");
+ }
+
+ /**
+ * Rebuilds the extension files found in custom/Extension
+ * @param boolean $silent
+ */
+ function rebuild_all($silent=false){
+ if(defined('TEMPLATE_URL'))SugarTemplateUtilities::disableCache();
+ $this->silent=$silent;
+ global $sugar_config;
+
+ //Check for new module extensions
+ $this->rebuild_modules();
+
+ $this->rebuild_languages($sugar_config['languages']);
+ $this->rebuild_vardefs();
+ $this->rebuild_layoutdefs();
+ $this->rebuild_menus();
+ $this->rebuild_dashletcontainers();
+ $this->rebuild_userpage();
+ $this->rebuild_administration();
+ $this->rebuild_relationships();
+ $this->rebuild_tabledictionary();
+ //$this->repair_indices();
+ $this->reset_opcodes();
+ sugar_cache_reset();
+ }
+
+ /*
+ * ModuleInstaller->merge_files runs over the list of all modules already installed in /modules. For each $module it reads the contents of every file in
+ * custom/Extension/modules/$module/ (_override files last) and concatenates them to custom/modules/$module//.
+ * Then it does the same thing in custom/Extension/application/, concatenating those files and copying the result to custom/application//
+ */
+ function merge_files($path, $name, $filter = '', $application = false){
+ if(!$application){
+ $GLOBALS['log']->debug( get_class($this)."->merge_files() : merging module files in custom/Extension/modules//$path to custom/modules//$path$name");
+ foreach($this->modules as $module){
+ //$GLOBALS['log']->debug("Merging Files for: ".$module);
+ //$GLOBALS['log']->debug("Merging Files for path: ".$path);
+ $extension = "read()){
+ if((empty($filter) || substr_count($entry, $filter) > 0) && is_file($module_install.'/'.$entry)
+ && $entry != '.' && $entry != '..' && strtolower(substr($entry, -4)) == ".php")
+ {
+ if (substr($entry, 0, 9) == '_override') {
+ $override[] = $entry;
+ } else {
+ $file = file_get_contents($module_install . '/' . $entry);
+ $GLOBALS['log']->debug(get_class($this)."->merge_files(): found {$module_install}{$entry}") ;
+ $extension .= "\n". str_replace(array('', '', '";
+
+ if($shouldSave){
+ if(!file_exists("custom/$extpath")){
+ mkdir_recursive("custom/$extpath", true);
+ }
+ $out = sugar_fopen("custom/$extpath/$name", 'w');
+ fwrite($out,$extension);
+ fclose($out);
+ }else{
+ if(file_exists("custom/$extpath/$name")){
+ unlink("custom/$extpath/$name");
+ }
+ }
+ }
+
+ }
+
+ $GLOBALS['log']->debug("Merging application files for $name in $path");
+ //Now the application stuff
+ $extension = "read()){
+ $shouldSave = true;
+ if((empty($filter) || substr_count($entry, $filter) > 0) && is_file($module_install.'/'.$entry)
+ && $entry != '.' && $entry != '..' && strtolower(substr($entry, -4)) == ".php")
+ {
+ $file = file_get_contents($module_install . '/' . $entry);
+ $extension .= "\n". str_replace(array('', '";
+ if($shouldSave){
+ if(!file_exists("custom/$extpath")){
+ mkdir_recursive("custom/$extpath", true);
+ }
+ $out = sugar_fopen("custom/$extpath/$name", 'w');
+ fwrite($out,$extension);
+ fclose($out);
+ }else{
+ if(file_exists("custom/$extpath/$name")){
+ unlink("custom/$extpath/$name");
+ }
+ }
+
+}
+
+ /*
+ * ModuleInstaller->install_beans runs through the list of beans given, instantiates each bean, calls bean->create_tables, and then calls SugarBean::createRelationshipMeta for the
+ * bean/module.
+ */
+ function install_beans($beans){
+ include('include/modules.php');
+ foreach($beans as $bean){
+ $this->log( translate('LBL_MI_IN_BEAN') . " $bean");
+ if(isset($beanList[$bean])){
+ $class = $beanList[$bean];
+ if(file_exists($beanFiles[$class])){
+ require_once($beanFiles[$class]);
+ $mod = new $class();
+ //#30273
+ if(is_subclass_of($mod, 'SugarBean') && $mod->disable_vardefs == false ){
+ $GLOBALS['log']->debug( "Creating Tables Bean : $bean");
+ $mod->create_tables();
+ SugarBean::createRelationshipMeta($mod->getObjectName(), $mod->db,$mod->table_name,'',$mod->module_dir);
+ }
+ }else{
+ $GLOBALS['log']->debug( "File Does Not Exist:" . $beanFiles[$class] );
+ }
+ }
+ }
+ }
+
+ function uninstall_beans($beans){
+ include('include/modules.php');
+ foreach($beans as $bean){
+ $this->log( translate('LBL_MI_UN_BEAN') . " $bean");
+ if(isset($beanList[$bean])){
+ $class = $beanList[$bean];
+
+ if(file_exists($beanFiles[$class])){
+ require_once($beanFiles[$class]);
+ $mod = new $class();
+
+ if(is_subclass_of($mod, 'SugarBean')){
+ $GLOBALS['log']->debug( "Drop Tables : $bean");
+ if(isset($GLOBALS['mi_remove_tables']) && $GLOBALS['mi_remove_tables'])
+ $mod->drop_tables();
+ }
+ }else{
+ $GLOBALS['log']->debug( "File Does Not Exist:" . $beanFiles[$class] );
+ }
+ }
+ }
+ }
+
+ /**
+ * Remove any customizations made within Studio while the module was installed.
+ */
+ function uninstall_customizations($beans){
+ foreach($beans as $bean){
+ $dirs = array(
+ 'custom/modules/' . $bean,
+ 'custom/Extension/modules/' . $bean
+ );
+ foreach($dirs as $dir)
+ {
+ if(is_dir($dir)){
+ rmdir_recursive($dir);
+ }
+ }
+ }
+ }
+
+ function log($str){
+ $GLOBALS['log']->debug('ModuleInstaller:'. $str);
+ if(!$this->silent){
+ echo $str . ' ';
+ }
+ }
+
+/* BEGIN - RESTORE POINT - by MR. MILK August 31, 2005 02:15:18 PM */
+function copy_recursive_with_backup( $source, $dest, $backup_path, $uninstall=false ) {
+ if(is_file($source)) {
+ if($uninstall) {
+ $GLOBALS['log']->debug("Restoring ... " . $source. " to " .$dest );
+ if(copy( $source, $dest)) {
+ if(is_writable($dest))
+ sugar_touch( $dest, filemtime($source) );
+ return(unlink($source));
+ }
+ else {
+ $GLOBALS['log']->debug( "Can't restore file: " . $source );
+ return true;
+ }
+ }
+ else {
+ if(file_exists($dest)) {
+ $rest = clean_path($backup_path."/$dest");
+ if( !is_dir(dirname($rest)) )
+ mkdir_recursive(dirname($rest), true);
+
+ $GLOBALS['log']->debug("Backup ... " . $dest. " to " .$rest );
+ if(copy( $dest, $rest)) {
+ if(is_writable($rest))
+ sugar_touch( $rest, filemtime($dest) );
+ }
+ else {
+ $GLOBALS['log']->debug( "Can't backup file: " . $dest );
+ }
+ }
+ return( copy( $source, $dest ) );
+ }
+ }
+ elseif(!is_dir($source)) {
+ if($uninstall) {
+ if(is_file($dest))
+ return(unlink($dest));
+ else {
+ //don't do anything we already cleaned up the files using uninstall_new_files
+ return true;
+ }
+ }
+ else
+ return false;
+ }
+
+ if( !is_dir($dest) && !$uninstall){
+ sugar_mkdir( $dest );
+ }
+
+ $status = true;
+
+ $d = dir( $source );
+ while( $f = $d->read() ){
+ if( $f == "." || $f == ".." ){
+ continue;
+ }
+ $status &= $this->copy_recursive_with_backup( "$source/$f", "$dest/$f", $backup_path, $uninstall );
+ }
+ $d->close();
+ return( $status );
+}
+
+private function dir_get_files($path, $base_path){
+ $files = array();
+ if(!is_dir($path))return $files;
+ $d = dir($path);
+ while ($e = $d->read()){
+ //ignore invisible files . .. ._MACOSX
+ if(substr($e, 0, 1) == '.')continue;
+ if(is_file($path . '/' . $e))$files[str_replace($base_path , '', $path . '/' . $e)] = str_replace($base_path , '', $path . '/' . $e);
+ if(is_dir($path . '/' . $e))$files = array_merge($files, $this->dir_get_files($path . '/' . $e, $base_path));
+ }
+ $d->close();
+ return $files;
+
+}
+
+private function dir_file_count($path){
+ //if its a file then it has at least 1 file in the directory
+ if(is_file($path)) return 1;
+ if(!is_dir($path)) return 0;
+ $d = dir($path);
+ $count = 0;
+ while ($e = $d->read()){
+ //ignore invisible files . .. ._MACOSX
+ if(substr($e, 0, 1) == '.')continue;
+ if(is_file($path . '/' . $e))$count++;
+ if(is_dir($path . '/' . $e))$count += $this->dir_file_count($path . '/' . $e);
+ }
+ $d->close();
+ return $count;
+
+
+}
+/* END - RESTORE POINT - by MR. MILK August 31, 2005 02:15:34 PM */
+
+
+ /**
+ * Static function which allows a module developer to abort their progress, pass in an array of errors and
+ * redirect back to the main module loader page
+ *
+ * @param errors an array of error messages which will be displayed on the
+ * main module loader page once it is loaded.
+ */
+ function abort($errors = array()){
+ //set the errors onto the session so we can display them one the moduler loader page loads
+ $_SESSION['MODULEINSTALLER_ERRORS'] = $errors;
+ echo ' ';
+ die();
+ //header('Location: index.php?module=Administration&action=UpgradeWizard&view=module');
+ }
+
+ /**
+ * Return the set of errors stored in the SESSION
+ *
+ * @return an array of errors
+ */
+ function getErrors(){
+ if(!empty($_SESSION['MODULEINSTALLER_ERRORS'])){
+ $errors = $_SESSION['MODULEINSTALLER_ERRORS'];
+ unset($_SESSION['MODULEINSTALLER_ERRORS']);
+ return $errors;
+ }
+ else
+ return null;
+ }
+
+ /*
+ * Add any fields to the DetailView and EditView of the appropriate modules
+ * Only add into deployed modules, as addFieldsToUndeployedLayouts has done this already for undeployed modules (and the admin might have edited the layouts already)
+ * @param array $layoutAdditions An array of module => fieldname
+ * return null
+ */
+ function addFieldsToLayout($layoutAdditions) {
+ require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php' ;
+
+ // these modules either lack editviews/detailviews or use custom mechanisms for the editview/detailview.
+ // In either case, we don't want to attempt to add a relate field to them
+ // would be better if GridLayoutMetaDataParser could handle this gracefully, so we don't have to maintain this list here
+ $invalidModules = array ( 'emails' , 'kbdocuments' ) ;
+
+ foreach ( $layoutAdditions as $deployedModuleName => $fieldName )
+ {
+ if ( ! in_array( strtolower ( $deployedModuleName ) , $invalidModules ) )
+ {
+ foreach ( array ( MB_EDITVIEW , MB_DETAILVIEW ) as $view )
+ {
+ $GLOBALS [ 'log' ]->debug ( get_class ( $this ) . ": adding $fieldName to $view layout for module $deployedModuleName" ) ;
+ $parser = new GridLayoutMetaDataParser ( $view, $deployedModuleName ) ;
+ $parser->addField ( array ( 'name' => $fieldName ) ) ;
+ $parser->handleSave ( false ) ;
+ }
+ }
+ }
+
+ }
+
+ function removeFieldsFromLayout($layoutAdditions) {
+ require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php' ;
+
+ // these modules either lack editviews/detailviews or use custom mechanisms for the editview/detailview.
+ // In either case, we don't want to attempt to add a relate field to them
+ // would be better if GridLayoutMetaDataParser could handle this gracefully, so we don't have to maintain this list here
+ $invalidModules = array ( 'emails' , 'kbdocuments' ) ;
+
+ foreach ( $layoutAdditions as $deployedModuleName => $fieldName )
+ {
+ if ( ! in_array( strtolower ( $deployedModuleName ) , $invalidModules ) )
+ {
+ foreach ( array ( MB_EDITVIEW , MB_DETAILVIEW ) as $view )
+ {
+ $GLOBALS [ 'log' ]->debug ( get_class ( $this ) . ": adding $fieldName to $view layout for module $deployedModuleName" ) ;
+ $parser = new GridLayoutMetaDataParser ( $view, $deployedModuleName ) ;
+ $parser->removeField ( $fieldName ) ;
+ $parser->handleSave ( false ) ;
+ }
+ }
+ }
+
+ }
+
+ ///////////////////
+ //********** DISABLE/ENABLE FUNCTIONS
+ ///////////////////
+ function enable($base_dir, $is_upgrade = false, $previous_version = ''){
+ global $app_strings;
+ $this->base_dir = $base_dir;
+ $total_steps = 3; //minimum number of steps with no tasks
+ $current_step = 0;
+ $tasks = array(
+ 'enable_copy',
+ 'enable_menus',
+ 'enable_userpage',
+ 'enable_dashlets',
+ 'enable_administration',
+ 'enable_vardefs',
+ 'enable_layoutdefs',
+ 'enable_relationships',
+ 'enable_languages',
+ 'enable_logichooks',
+ 'reset_opcodes',
+ );
+ $total_steps += count($tasks);
+ if(file_exists($this->base_dir . '/manifest.php')){
+ if(!$this->silent){
+ $current_step++;
+ display_progress_bar('install', $current_step, $total_steps);
+ echo '';
+ }
+
+ require_once($this->base_dir . '/manifest.php');
+ if($is_upgrade && !empty($previous_version)){
+ //check if the upgrade path exists
+ if(!empty($upgrade_manifest)){
+ if(!empty($upgrade_manifest['upgrade_paths'])){
+ if(!empty($upgrade_manifest['upgrade_paths'][$previous_version])){
+ $installdefs = $upgrade_manifest['upgrade_paths'][$previous_version];
+ }else{
+ $errors[] = 'No Upgrade Path Found in manifest.';
+ $this->abort($errors);
+ }//fi
+ }//fi
+ }//fi
+ }//fi
+ $this->id_name = $installdefs['id'];
+ $this->installdefs = $installdefs;
+ $installed_modules = array();
+ if(isset($installdefs['beans'])){
+ foreach($this->installdefs['beans'] as $bean){
+ $installed_modules[] = $bean['module'];
+ }
+ if(!file_exists("custom/Extension/application/Ext/Include")){
+ mkdir_recursive("custom/Extension/application/Ext/Include", true);
+ }
+ if (file_exists("custom/Extension/application/Ext/Include/".DISABLED_PATH.'/'. $this->id_name . '.php'))
+ rename("custom/Extension/application/Ext/Include/".DISABLED_PATH.'/'. $this->id_name . '.php',"custom/Extension/application/Ext/Include/$this->id_name.php");
+ $this->rebuild_modules();
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+
+ foreach($tasks as $task){
+ $this->$task();
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+ }
+
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ echo '
';
+ }
+ UpdateSystemTabs('Add',$installed_modules);
+ $GLOBALS['log']->debug('Complete');
+
+ }else{
+ die("No \$installdefs Defined In $this->base_dir/manifest.php");
+ }
+
+ }
+ function disable($base_dir){
+ global $app_strings;
+ $total_steps = 3; //min steps with no tasks
+ $current_step = 0;
+ $this->base_dir = $base_dir;
+ $tasks = array(
+ 'disable_copy',
+ 'disable_menus',
+ 'disable_dashlets',
+ 'disable_userpage',
+ 'disable_administration',
+ 'disable_vardefs',
+ 'disable_layoutdefs',
+ 'disable_relationships',
+ 'disable_languages',
+ 'disable_logichooks',
+ 'reset_opcodes',
+ );
+ $total_steps += count($tasks); //now the real number of steps
+ if(file_exists($this->base_dir . '/manifest.php')){
+ if(!$this->silent){
+ $current_step++;
+ display_progress_bar('install', $current_step, $total_steps);
+ echo '';
+ }
+
+ require_once($this->base_dir . '/manifest.php');
+ $this->installdefs = $installdefs;
+ $this->id_name = $this->installdefs['id'];
+ $installed_modules = array();
+ if(isset($this->installdefs['beans'])){
+ foreach($this->installdefs['beans'] as $bean){
+ $installed_modules[] = $bean['module'];
+ }
+
+ mkdir_recursive("custom/Extension/application/Ext/Include/".DISABLED_PATH, true);
+
+ //Clear any older disabled version
+ if (file_exists("custom/Extension/application/Ext/Include/".DISABLED_PATH.'/'. $this->id_name . '.php'))
+ rmdir_recursive("custom/Extension/application/Ext/Include/".DISABLED_PATH.'/'. $this->id_name . '.php');
+
+ if (file_exists("custom/Extension/application/Ext/Include/$this->id_name.php"))
+ rename("custom/Extension/application/Ext/Include/$this->id_name.php", "custom/Extension/application/Ext/Include/".DISABLED_PATH.'/'. $this->id_name . '.php');
+ $this->rebuild_modules();
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+ foreach($tasks as $task){
+ $this->$task();
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ }
+ }
+ if(!$this->silent){
+ $current_step++;
+ update_progress_bar('install', $current_step, $total_steps);
+ echo '
';
+ }
+ UpdateSystemTabs('Restore',$installed_modules);
+
+ }else{
+ die("No manifest.php Defined In $this->base_dir/manifest.php");
+ }
+ }
+ function enable_vardef($to_module){
+ if(isset($this->installdefs['vardefs'])){
+ foreach($this->installdefs['vardefs'] as $vardefs){
+ $GLOBALS['log']->debug("Enabling Vardefs ..." .$to_module);
+ $path = 'custom/Extension/modules/' . $to_module. '/Ext/Vardefs';
+ if($to_module == 'application'){
+ $path ='custom/Extension/' . $to_module. '/Ext/Vardefs';
+ }
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ if (file_exists($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php'))
+ rename($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php', $path . '/'. $this->id_name . '.php');
+ if (file_exists($path . '/'.DISABLED_PATH.'/'. basename($vardefs['from'])))
+ rename($path . '/'.DISABLED_PATH.'/'. basename($vardefs['from']), $path . '/'. basename($vardefs['from']));
+ }
+ }
+ }
+ function enable_vardefs(){
+ if(isset($this->installdefs['vardefs'])){
+ foreach($this->installdefs['vardefs'] as $vardefs){
+ $vardefs['from'] = str_replace('', $this->base_dir, $vardefs['from']);
+ $GLOBALS['log']->debug("Enabling Vardefs ..." . $vardefs['from'] . " for " .$vardefs['to_module']);
+ $path = 'custom/Extension/modules/' . $vardefs['to_module']. '/Ext/Vardefs';
+ if($vardefs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $vardefs['to_module']. '/Ext/Vardefs';
+ }
+ if(file_exists($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php'))
+ rename( $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php', $path . '/'. $this->id_name . '.php');
+
+ if (file_exists($path . '/'.DISABLED_PATH.'/'. basename($vardefs['from'])))
+ rename($path . '/'.DISABLED_PATH.'/'. basename($vardefs['from']), $path . '/'. basename($vardefs['from']));
+
+ }
+ $this->rebuild_vardefs();
+ }
+ }
+ function disable_vardefs(){
+ $GLOBALS['log']->debug("Disabling Vardefs ".var_export($this->installdefs, true));
+ if(isset($this->installdefs['vardefs'])){
+ foreach($this->installdefs['vardefs'] as $vardefs){
+ $vardefs['from'] = str_replace('', $this->base_dir, $vardefs['from']);
+ $GLOBALS['log']->debug("Disabling Vardefs ..." . $vardefs['from'] . " for " .$vardefs['to_module']);
+ $path = 'custom/Extension/modules/' . $vardefs['to_module']. '/Ext/Vardefs';
+ if($vardefs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $vardefs['to_module']. '/Ext/Vardefs';
+ }
+ if(file_exists($path . '/'. $this->id_name . '.php')) {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }
+ if(file_exists($path . '/'. basename($vardefs['from'])))
+ {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. basename($vardefs['from']), $path . '/'.DISABLED_PATH.'/'.basename($vardefs['from']));
+ }
+ }
+ $this->rebuild_vardefs();
+ }
+ }
+
+ function enable_relationships(){
+ if(isset($this->installdefs['relationships'])){
+ $str = "installdefs['relationships'] as $relationship){
+ $filename =basename($relationship['meta_data']);
+
+ $save_table_dictionary = true;
+ $str .= "include_once('metadata/$filename');\n";
+ if (empty($relationship['module']))
+ continue;
+
+ if(!empty($relationship['module_vardefs'])){
+ $this->enable_vardef($relationship['module']);
+ }
+ if(!empty($relationship['module_layoutdefs'])){
+ $this->enable_layoutdef($relationship['module']);
+ }
+ }
+ $this->rebuild_vardefs();
+ $this->rebuild_layoutdefs();
+ if($save_table_dictionary){
+ if(!file_exists("custom/Extension/application/Ext/TableDictionary")){
+ mkdir_recursive("custom/Extension/application/Ext/TableDictionary", true);
+ }
+ if (file_exists("custom/Extension/application/Ext/TableDictionary/".DISABLED_PATH."/$this->id_name.php"))
+ rename("custom/Extension/application/Ext/TableDictionary/".DISABLED_PATH."/$this->id_name.php", "custom/Extension/application/Ext/TableDictionary/$this->id_name.php");
+ $this->rebuild_tabledictionary();
+ }
+ }
+ }
+
+ function disable_relationships($action = 'disable'){
+ if(isset($this->installdefs['relationships'])){
+ foreach($this->installdefs['relationships'] as $relationship){
+ $filename = basename($relationship['meta_data']);
+ $relName = substr($filename, -12) == "MetaData.php" ? substr($filename,0,strlen($filename) - 12) : "";
+ if (empty($relationship['module']) && empty($relName))
+ continue;
+
+ //remove the vardefs
+ if (empty($relName))
+ $path = 'custom/Extension/modules/' . $relationship['module']. '/Ext/Vardefs';
+ if(!empty($relationship['module']) && $relationship['module'] == 'application'){
+ $path ='custom/Extension/' . $relationship['module']. '/Ext/Vardefs';
+ }
+ if(!empty($relationship['module_vardefs']) && file_exists($path . '/'. $this->id_name . '.php')){
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }
+ //remove the layoutdefs
+ if ( !empty($relationship['module']) ) {
+ $path = 'custom/Extension/modules/' . $relationship['module']. '/Ext/Layoutdefs';
+ if($relationship['module'] == 'application'){
+ $path ='custom/Extension/' . $relationship['module']. '/Ext/Layoutdefs';
+ }
+ }
+
+ if(!empty($relationship['module_layoutdefs']) && file_exists($path . '/'. $this->id_name . '.php')){
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }
+
+ }
+ if(file_exists("custom/Extension/application/Ext/TableDictionary/$this->id_name.php")){
+ mkdir_recursive("custom/Extension/application/Ext/TableDictionary/".DISABLED_PATH, true);
+ rename("custom/Extension/application/Ext/TableDictionary/$this->id_name.php", "custom/Extension/application/Ext/TableDictionary/".DISABLED_PATH."/$this->id_name.php");
+ }
+ $this->rebuild_tabledictionary();
+ $this->rebuild_vardefs();
+ $this->rebuild_layoutdefs();
+ }
+ }
+
+ function enable_layoutdefs(){
+ if(isset($this->installdefs['layoutdefs'])){
+ foreach($this->installdefs['layoutdefs'] as $layoutdefs){
+ $this->enable_layoutdef($layoutdefs['to_module'], $this->id_name);
+ }
+ $this->rebuild_layoutdefs();
+ }
+ }
+ function enable_layoutdef($to_module){
+ $GLOBALS['log']->debug("Enabling Layout Defs ..." .$to_module);
+ if(isset($this->installdefs['layoutdefs'])){
+ foreach($this->installdefs['layoutdefs'] as $layoutdefs){
+ $path = 'custom/Extension/modules/' . $to_module. '/Ext/Layoutdefs';
+ if($to_module == 'application'){
+ $path ='custom/Extension/' . $to_module. '/Ext/Layoutdefs';
+ }
+ if (file_exists($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php'))
+ {
+ rename($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php', $path . '/'. $this->id_name . '.php');
+ }
+ if (file_exists($path . '/'.DISABLED_PATH.'/'. basename($layoutdefs['from'])))
+ {
+ rename($path . '/'.DISABLED_PATH.'/'. basename($layoutdefs['from']), $path . '/'. basename($layoutdefs['from']));
+ }
+ }
+ }
+ }
+
+ function disable_layoutdefs(){
+ if(isset($this->installdefs['layoutdefs'])){
+ foreach($this->installdefs['layoutdefs'] as $layoutdefs){
+ $layoutdefs['from'] = str_replace('', $this->base_dir, $layoutdefs['from']);
+ $GLOBALS['log']->debug("Disabling Layoutdefs ..." . $layoutdefs['from'] . " for " .$layoutdefs['to_module']);
+ $path = 'custom/Extension/modules/' . $layoutdefs['to_module']. '/Ext/Layoutdefs';
+ if($layoutdefs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $layoutdefs['to_module']. '/Ext/Layoutdefs';
+ }
+ if (file_exists($path . '/'. $this->id_name . '.php'))
+ {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }else if (file_exists($path . '/'. basename($layoutdefs['from'])))
+ {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. basename($layoutdefs['from']), $path . '/'.DISABLED_PATH.'/'. basename($layoutdefs['from']));
+ }
+ }
+ $this->rebuild_layoutdefs();
+ }
+ }
+
+ function enable_menus(){
+ if(isset($this->installdefs['menu'])){
+ foreach($this->installdefs['menu'] as $menu){
+ $menu['from'] = str_replace('', $this->base_dir, $menu['from']);
+ $GLOBALS['log']->debug("Enabling Menu ..." . $menu['from']. " for " .$menu['to_module'] );
+ $path = 'custom/Extension/modules/' . $menu['to_module']. '/Ext/Menus';
+ if($menu['to_module'] == 'application'){
+ $path ='custom/Extension/' . $menu['to_module']. '/Ext/Menus';
+ }
+
+ if(file_exists($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php')){
+ rename($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php', $path . '/'. $this->id_name . '.php');
+ }
+
+ }
+ $this->rebuild_menus();
+ }
+
+ }
+
+ function disable_menus(){
+ if(isset($this->installdefs['menu'])){
+ foreach($this->installdefs['menu'] as $menu){
+ $menu['from'] = str_replace('', $this->base_dir, $menu['from']);
+ $GLOBALS['log']->debug("Disabling Menu ..." . $menu['from']. " for " .$menu['to_module'] );
+ $path = 'custom/Extension/modules/' . $menu['to_module']. '/Ext/Menus';
+ if($menu['to_module'] == 'application'){
+ $path ='custom/Extension/' . $menu['to_module']. '/Ext/Menus';
+ }
+ if (file_exists( $path . '/'. $this->id_name . '.php'))
+ {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }
+ }
+ $this->rebuild_menus();
+ }
+ }
+
+ function enable_administration(){
+ if(isset($this->installdefs['administration'])){
+ foreach($this->installdefs['administration'] as $administration){
+ $administration['from'] = str_replace('', $this->base_dir, $administration['from']);
+ $GLOBALS['log']->debug("Installing Administration Section ..." . $administration['from'] );
+ $path = 'custom/Extension/modules/Administration/Ext/Administration';
+
+ if(file_exists($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php')){
+ rename($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php', $path . '/'. $this->id_name . '.php');
+ }
+ }
+ $this->rebuild_administration();
+ }
+
+ }
+ function disable_administration(){
+ if(isset($this->installdefs['administration'])){
+ foreach($this->installdefs['administration'] as $administration){
+ $administration['from'] = str_replace('', $this->base_dir, $administration['from']);
+ $GLOBALS['log']->debug("Uninstalling Administration Section ..." . $administration['from'] );
+ $path = 'custom/Extension/modules/Administration/Ext/Administration';
+ if (file_exists($path . '/'. $this->id_name . '.php'))
+ {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }
+ }
+ $this->rebuild_administration();
+ }
+ }
+
+ function enable_dashlets(){
+ if(isset($this->installdefs['dashlets'])){
+ foreach($this->installdefs['dashlets'] as $cp){
+ $cp['from'] = str_replace('', $this->base_dir, $cp['from']);
+ $path = 'custom/modules/Home/Dashlets/' . $cp['name'] . '/';
+ $disabled_path = 'custom/modules/Home/'.DISABLED_PATH.'Dashlets/' . $cp['name'];
+ $GLOBALS['log']->debug("Enabling Dashlet " . $cp['name'] . "..." . $cp['from'] );
+ if (file_exists($disabled_path))
+ {
+ rename($disabled_path, $path);
+ }
+ }
+ include('modules/Administration/RebuildDashlets.php');
+
+ }
+ }
+
+ function disable_dashlets(){
+ if(isset($this->installdefs['dashlets'])){
+ foreach($this->installdefs['dashlets'] as $cp){
+ $path = 'custom/modules/Home/Dashlets/' . $cp['name'];
+ $disabled_path = 'custom/modules/Home/'.DISABLED_PATH.'Dashlets/' . $cp['name'];
+ $GLOBALS['log']->debug('Disabling ' .$path);
+ if (file_exists($path))
+ {
+ mkdir_recursive('custom/modules/Home/'.DISABLED_PATH.'Dashlets/', true);
+ rename( $path, $disabled_path);
+ }
+ }
+ include('modules/Administration/RebuildDashlets.php');
+ }
+ }
+
+ function enable_languages(){
+ $languages = array();
+ if(isset($this->installdefs['language'])){
+ foreach($this->installdefs['language'] as $packs){
+ $languages[$packs['language']] = $packs['language'];
+ $packs['from'] = str_replace('', $this->base_dir, $packs['from']);
+ $GLOBALS['log']->debug("Installing Language Pack ..." . $packs['from'] . " for " .$packs['to_module']);
+ $path = 'custom/Extension/modules/' . $packs['to_module']. '/Ext/Language';
+ if($packs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $packs['to_module']. '/Ext/Language';
+ }
+
+ if(!file_exists($path)){
+ mkdir_recursive($path, true);
+ }
+ if (file_exists($path.'/'.DISABLED_PATH.'/'.$packs['language'].'.'. $this->id_name . '.php'))
+ rename($path.'/'.DISABLED_PATH.'/'.$packs['language'].'.'. $this->id_name . '.php', $path.'/'.$packs['language'].'.'. $this->id_name . '.php');
+ }
+ $this->rebuild_languages($languages);
+ }
+ }
+
+ function disable_languages(){
+ $languages = array();
+ if(isset($this->installdefs['language'])){
+ foreach($this->installdefs['language'] as $packs){
+ $languages[$packs['language']] = $packs['language'];
+ $packs['from'] = str_replace('', $this->base_dir, $packs['from']);
+ $GLOBALS['log']->debug("Uninstalling Language Pack ..." . $packs['from'] . " for " .$packs['to_module']);
+ $path = 'custom/Extension/modules/' . $packs['to_module']. '/Ext/Language';
+ if($packs['to_module'] == 'application'){
+ $path ='custom/Extension/' . $packs['to_module']. '/Ext/Language';
+ }
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ if (file_exists($path.'/'.$packs['language'].'.'. $this->id_name . '.php'))
+ rename($path.'/'.$packs['language'].'.'. $this->id_name . '.php', $path.'/'.DISABLED_PATH.'/'.$packs['language'].'.'. $this->id_name . '.php');
+
+ }
+ $this->rebuild_languages($languages);
+ }
+ }
+
+ function enable_userpage(){
+ if(isset($this->installdefs['user_page'])){
+ foreach($this->installdefs['user_page'] as $userpage){
+ $userpage['from'] = str_replace('', $this->base_dir, $userpage['from']);
+ $GLOBALS['log']->debug("Installing User Page Section ..." . $userpage['from'] );
+ $path = 'custom/Extension/modules/Users/Ext/UserPage';
+ if(file_exists($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php')){
+ rename($path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php', $path . '/'. $this->id_name . '.php');
+ }
+
+ }
+ $this->rebuild_userpage();
+ }
+
+ }
+ function disable_userpage(){
+ if(isset($this->installdefs['user_page'])){
+ foreach($this->installdefs['user_page'] as $userpage){
+ $userpage['from'] = str_replace('', $this->base_dir, $userpage['from']);
+ $GLOBALS['log']->debug("Uninstalling User Page Section ..." . $userpage['from'] );
+ $path = 'custom/Extension/modules/Users/Ext/UserPage';
+ if (file_exists( $path . '/'. $this->id_name . '.php')) {
+ mkdir_recursive($path . '/'.DISABLED_PATH, true);
+ rename( $path . '/'. $this->id_name . '.php', $path . '/'.DISABLED_PATH.'/'. $this->id_name . '.php');
+ }
+ }
+ $this->rebuild_userpage();
+ }
+ }
+
+ function enable_copy(){
+ //copy files back onto file system. first perform md5 check to determine if anything has been modified
+ //here we should just go through the files in the -restore directory and copy those back
+ if(isset($GLOBALS['mi_overwrite_files']) && $GLOBALS['mi_overwrite_files']){
+ if(!empty($this->installdefs['copy'])){
+ foreach($this->installdefs['copy'] as $cp){
+ $cp['to'] = clean_path(str_replace('', $this->base_dir, $cp['to']));
+ $backup_path = clean_path( remove_file_extension(urldecode(hashToFile($_REQUEST['install_file'])))."-restore/".$cp['to'] );
+
+ //check if this file exists in the -restore directory
+ if(file_exists($backup_path)){
+ //since the file exists, then we want do an md5 of the install version and the file system version
+ //if(is_file($backup_path) && md5_file($backup_path) == md5_file($cp['to'])){
+ //since the files are the same then we can safely move back from the -restore
+ //directory into the file system
+ $GLOBALS['log']->debug("ENABLE COPY:: FROM: ".$cp['from']. " TO: ".$cp['to']);
+ $this->copy_path($cp['from'], $cp['to']);
+ /*}else{
+ //since they are not equal then we need to prompt the user
+ }*/
+ }//fi
+ }//rof
+ }//fi
+ }//fi
+ }
+
+ function disable_copy(){
+ //when we disable we want to copy the -restore files back into the file system
+ //but we should check the version in the module install against the version on the file system
+ //if they match then we can copy the file back, but otherwise we should ask the user.
+
+// $GLOBALS['log']->debug('ModuleInstaller.php->disable_copy()');
+ if(isset($GLOBALS['mi_overwrite_files']) && $GLOBALS['mi_overwrite_files']){
+// $GLOBALS['log']->debug('ModuleInstaller.php->disable_copy():mi_overwrite_files=true');
+ if(!empty($this->installdefs['copy'])){
+// $GLOBALS['log']->debug('ModuleInstaller.php->disable_copy(): installdefs not empty');
+ foreach($this->installdefs['copy'] as $cp){
+ $cp['to'] = clean_path(str_replace('', $this->base_dir, $cp['to']));
+ $backup_path = clean_path( remove_file_extension(urldecode(hashToFile($_REQUEST['install_file'])))."-restore/".$cp['to'] ); // bug 16966 tyoung - replaced missing assignment to $backup_path
+ //check if this file exists in the -restore directory
+// $GLOBALS['log']->debug("ModuleInstaller.php->disable_copy(): backup_path=".$backup_path);
+ if(file_exists($backup_path)){
+ //since the file exists, then we want do an md5 of the install version and the file system version
+ $from = str_replace('', $this->base_dir, $cp['from']);
+
+ //if(is_file($from) && md5_file($from) == md5_file($cp['to'])){
+ //since the files are the same then we can safely move back from the -restore
+ //directory into the file system
+ $GLOBALS['log']->debug("DISABLE COPY:: FROM: ".$backup_path. " TO: ".$cp['to']);
+ $this->copy_path($backup_path, $cp['to']);
+ /*}else{
+ //since they are not equal then we need to prompt the user
+ }*/
+ }//fi
+ }//rof
+ }//fi
+ }//fi
+ }
+
+ public function reset_opcodes()
+ {
+ /* Bug 39354 - added function_exists check. Not optimal fix, but safe nonetheless.
+ * This is for the upgrade to 6.1 from pre 6.1, since the utils files haven't been updated to 6.1 when this is called,
+ * but this file has been updated to 6.1
+ */
+ if(function_exists('sugar_clean_opcodes')){
+ sugar_clean_opcodes();
+ }
+ }
+
+}
+
+ function UpdateSystemTabs($action, $installed_modules){
+ require_once("modules/MySettings/TabController.php");
+ $controller = new TabController();
+ $isSystemTabsInDB = $controller->is_system_tabs_in_db();
+ if ($isSystemTabsInDB && !empty($installed_modules))
+ {
+ global $moduleList;
+ switch ($action)
+ {
+ case 'Restore' :
+ $currentTabs = $controller->get_system_tabs();
+ foreach ($installed_modules as $module)
+ {
+ if(in_array($module, $currentTabs)){
+ unset($currentTabs[$module]);
+ }
+ }
+ $controller->set_system_tabs($currentTabs);;
+ break;
+ case 'Add' :
+ $currentTabs = $controller->get_system_tabs();
+ foreach ($installed_modules as $module)
+ {
+ if(!in_array($module, $currentTabs)){
+ $currentTabs[$module] = $module;
+ }
+ }
+ $controller->set_system_tabs($currentTabs);
+ default:
+ break;
+ }
+ }
+
+}
+
+
+?>
diff --git a/ModuleInstall/ModuleScanner.php b/ModuleInstall/ModuleScanner.php
new file mode 100644
index 00000000..ac9aa547
--- /dev/null
+++ b/ModuleInstall/ModuleScanner.php
@@ -0,0 +1,436 @@
+'pre_execute',
+ 'install_mkdirs'=>'mkdir',
+ 'install_copy'=>'copy',
+ 'install_images'=>'image_dir',
+ 'install_menus'=>'menu',
+ 'install_userpage'=>'user_page',
+ 'install_dashlets'=>'dashlets',
+ 'install_administration'=>'administration',
+ 'install_connectors'=>'connectors',
+ 'install_vardefs'=>'vardefs',
+ 'install_layoutdefs'=>'layoutdefs',
+ 'install_layoutfields'=>'layoutfields',
+ 'install_relationships'=>'relationships',
+ 'install_languages'=>'language',
+ 'install_logichooks'=>'logic_hooks',
+ 'post_execute'=>'post_execute',
+
+ );
+
+ private $blackListExempt = array();
+
+ private $validExt = array('png', 'gif', 'jpg', 'css', 'js', 'php', 'txt', 'html', 'htm', 'tpl', 'pdf', 'md5', 'xml');
+ private $blackList = array(
+ 'eval',
+ 'exec',
+ 'system',
+ 'shell_exec',
+ 'passthru',
+ 'chgrp',
+ 'chmod',
+ 'chwown',
+ 'file_put_contents',
+ 'file',
+ 'fileatime',
+ 'filectime',
+ 'filegroup',
+ 'fileinode',
+ 'filemtime',
+ 'fileowner',
+ 'fileperms',
+ 'fopen',
+ 'is_executable',
+ 'is_writable',
+ 'is_writeable',
+ 'lchgrp',
+ 'lchown',
+ 'linkinfo',
+ 'lstat',
+ 'mkdir',
+ 'parse_ini_file',
+ 'rmdir',
+ 'stat',
+ 'tempnam',
+ 'touch',
+ 'unlink',
+ 'getimagesize',
+ 'call_user_func',
+ 'call_user_func_array',
+ 'create_function',
+
+
+ //mutliple files per function call
+ 'copy',
+ 'link',
+ 'rename',
+ 'symlink',
+ 'move_uploaded_file',
+ 'chdir',
+ 'chroot',
+ 'create_cache_directory',
+ 'mk_temp_dir',
+ 'write_array_to_file',
+ 'write_encoded_file',
+ 'create_custom_directory',
+ 'sugar_rename',
+ 'sugar_chown',
+ 'sugar_fopen',
+ 'sugar_mkdir',
+ 'sugar_file_put_contents',
+ 'sugar_chgrp',
+ 'sugar_chmod',
+ 'sugar_touch',
+
+);
+
+ public function printToWiki(){
+ echo "'''Default Extensions''' ";
+ foreach($this->validExt as $b){
+ echo '#' . $b . ' ';
+
+ }
+ echo "'''Default Black Listed Functions''' ";
+ foreach($this->blackList as $b){
+ echo '#' . $b . ' ';
+
+ }
+
+ }
+
+ public function __construct(){
+ if(!empty($GLOBALS['sugar_config']['moduleInstaller']['blackListExempt'])){
+ $this->blackListExempt = array_merge($this->blackListExempt, $GLOBALS['sugar_config']['moduleInstaller']['blackListExempt']);
+ }
+ if(!empty($GLOBALS['sugar_config']['moduleInstaller']['blackList'])){
+ $this->blackList = array_merge($this->blackList, $GLOBALS['sugar_config']['moduleInstaller']['blackList']);
+ }
+ if(!empty($GLOBALS['sugar_config']['moduleInstaller']['validExt'])){
+ $this->validExt = array_merge($this->validExt, $GLOBALS['sugar_config']['moduleInstaller']['validExt']);
+ }
+
+ }
+
+ private $issues = array();
+ private $pathToModule = '';
+
+ /**
+ *returns a list of issues
+ */
+ public function getIssues(){
+ return $this->issues;
+ }
+
+ /**
+ *returns true or false if any issues were found
+ */
+ public function hasIssues(){
+ return !empty($this->issues);
+ }
+
+ /**
+ *Ensures that a file has a valid extension
+ */
+ private function isValidExtension($file){
+ $file = strtolower($file);
+
+ $extPos = strrpos($file, '.');
+ //make sure they don't override the files.md5
+ if($extPos === false || $file == 'files.md5')return false;
+ $ext = substr($file, $extPos + 1);
+ return in_array($ext, $this->validExt);
+
+ }
+
+ /**
+ *Scans a directory and calls on scan file for each file
+ **/
+ public function scanDir($path){
+ static $startPath = '';
+ if(empty($startPath))$startPath = $path;
+ if(!is_dir($path))return false;
+ $d = dir($path);
+ while($e = $d->read()){
+ $next = $path . '/' . $e;
+ if(is_dir($next)){
+ if(substr($e, 0, 1) == '.')continue;
+ $this->scanDir($next);
+ }else{
+ $issues = $this->scanFile($next);
+
+
+ }
+ }
+ return true;
+ }
+
+
+ /**
+ * Given a file it will open it's contents and check if it is a PHP file (not safe to just rely on extensions) if it finds isValidExtension($file)){
+ $issues[] = translate('ML_INVALID_EXT');
+ $this->issues['file'][$file] = $issues;
+ return $issues;
+ }
+ $contents = file_get_contents($file);
+ if(stripos($contents,'$token){
+ if(is_string($token[0])){
+ switch($token[0]){
+ case '`':
+ $issues['backtick'] = translate('ML_INVALID_FUNCTION') . " '`'";
+ case '(':
+ if($checkFunction)$issues[] = $possibleIssue;
+ break;
+ }
+ $checkFunction = false;
+ $possibleIssue = '';
+ }else{
+ $token['_msi'] = token_name($token[0]);
+ switch($token[0]){
+ case T_WHITESPACE: continue;
+ case T_EVAL:
+ if(in_array('eval', $this->blackList) && !in_array('eval', $this->blackListExempt))
+ $issues[]= translate('ML_INVALID_FUNCTION') . ' eval()';
+ break;
+ case T_STRING:
+ $token[1] = strtolower($token[1]);
+ if(!in_array($token[1], $this->blackList))break;
+ if(in_array($token[1], $this->blackListExempt))break;
+ if ($lastToken !== false &&
+ ($lastToken[0] == T_NEW || $lastToken[0] == T_OBJECT_OPERATOR || $lastToken[0] == T_DOUBLE_COLON))
+ {
+ break;
+ }
+ case T_VARIABLE:
+ $checkFunction = true;
+ $possibleIssue = translate('ML_INVALID_FUNCTION') . ' ' . $token[1] . '()';
+ break;
+
+ default:
+ $checkFunction = false;
+ $possibleIssue = '';
+
+ }
+ if ($token[0] != T_WHITESPACE)
+ {
+ $lastToken = $token;
+ }
+ }
+
+ }
+ if(!empty($issues)){
+ $this->issues['file'][$file] = $issues;
+ }
+
+ return $issues;
+ }
+
+
+ /*
+ * checks files.md5 file to see if the file is from sugar
+ * ONLY WORKS ON FILES
+ */
+ public function sugarFileExists($path){
+ static $md5 = array();
+ if(empty($md5)){
+ include('files.md5');
+ $md5 = $md5_string;
+ }
+ if(isset($md5['./' . $path]))return true;
+
+
+ }
+
+
+ /**
+ *This function will scan the Manifest for disabled actions specified in $GLOBALS['sugar_config']['moduleInstaller']['disableActions']
+ *if $GLOBALS['sugar_config']['moduleInstaller']['disableRestrictedCopy'] is set to false or not set it will call on scanCopy to ensure that it is not overriding files
+ */
+ public function scanManifest($manifestPath){
+ $issues = array();
+ if(!file_exists($manifestPath)){
+ $this->issues['manifest'][$manifestPath] = translate('ML_NO_MANIFEST');
+ return $issues;
+ }
+ $fileIssues = $this->scanFile($manifestPath);
+ //if the manifest contains malicious code do not open it
+ if(!empty($fileIssues)){
+ return $fileIssues;
+ }
+ include($manifestPath);
+
+
+ //scan for disabled actions
+ if(isset($GLOBALS['sugar_config']['moduleInstaller']['disableActions'])){
+ foreach($GLOBALS['sugar_config']['moduleInstaller']['disableActions'] as $action){
+ if(isset($installdefs[$this->manifestMap[$action]])){
+ $issues[] = translate('ML_INVALID_ACTION_IN_MANIFEST') . $this->manifestMap[$action];
+ }
+ }
+ }
+
+ //now lets scan for files that will override our files
+ if(empty($GLOBALS['sugar_config']['moduleInstaller']['disableRestrictedCopy']) && isset($installdefs['copy'])){
+ foreach($installdefs['copy'] as $copy){
+ $from = str_replace('', $this->pathToModule, $copy['from']);
+ $to = $copy['to'];
+ if(substr_count($from, '..')){
+ $this->issues['copy'][$from] = translate('ML_PATH_MAY_NOT_CONTAIN').' ".." -' . $from;
+ }
+ if(substr_count($to, '..')){
+ $this->issues['copy'][$to] = translate('ML_PATH_MAY_NOT_CONTAIN'). ' ".." -' . $to;
+ }
+ while(substr_count($from, '//')){
+ $from = str_replace('//', '/', $from);
+ }
+ while(substr_count($to, '//')){
+ $to = str_replace('//', '/', $to);
+ }
+ $this->scanCopy($from, $to);
+ }
+ }
+ if(!empty($issues)){
+ $this->issues['manifest'][$manifestPath] = $issues;
+ }
+
+
+
+ }
+
+
+
+ /**
+ * Takes in where the file will is specified to be copied from and to
+ * and ensures that there is no official sugar file there. If the file exists it will check
+ * against the MD5 file list to see if Sugar Created the file
+ *
+ */
+ function scanCopy($from, $to){
+ //if the file doesn't exist for the $to then it is not overriding anything
+ if(!file_exists($to))return;
+ //if $to is a dir and $from is a file then make $to a full file path as well
+ if(is_dir($to) && is_file($from)){
+ if(substr($to,-1) === '/'){
+ $to = substr($to, 0 , strlen($to) - 1);
+ }
+ $to .= '/'. basename($from);
+ }
+ //if the $to is a file and it is found in sugarFileExists then don't allow overriding it
+ if(is_file($to) && $this->sugarFileExists($to)){
+ $this->issues['copy'][$from] = translate('ML_OVERRIDE_CORE_FILES') . '(' . $to . ')';
+ }
+
+ if(is_dir($from)){
+ $d = dir($from);
+ while($e = $d->read()){
+ if($e == '.' || $e == '..')continue;
+ $this->scanCopy($from .'/'. $e, $to .'/' . $e);
+ }
+ }
+
+
+
+
+
+ }
+
+
+ /**
+ *Main external function that takes in a path to a package and then scans
+ *that package's manifest for disabled actions and then it scans the PHP files
+ *for restricted function calls
+ *
+ */
+ public function scanPackage($path){
+ $this->pathToModule = $path;
+ $this->scanManifest($path . '/manifest.php');
+ if(empty($GLOBALS['sugar_config']['moduleInstaller']['disableFileScan'])){
+ $this->scanDir($path);
+ }
+ }
+
+ /**
+ *This function will take all issues of the current instance and print them to the screen
+ **/
+ public function displayIssues($package='Package'){
+ echo ''.str_replace('{PACKAGE}' , $package ,translate('ML_PACKAGE_SCANNING')). ' ' . translate('ML_INSTALLATION_FAILED') . ' ' .str_replace('{PACKAGE}' , $package ,translate('ML_PACKAGE_NOT_CONFIRM')). '
'. translate('ML_OBTAIN_NEW_PACKAGE') . ' ' . translate('ML_RELAX_LOCAL').
+'
' . translate('ML_SUGAR_LOADING_POLICY') . ' ' . translate('ML_SUGAR_KB') . ' .'.
+' ' . translate('ML_AVAIL_RESTRICTION'). ' ' . translate('ML_SUGAR_DZ') . ' . ';
+
+
+ foreach($this->issues as $type=>$issues){
+ echo '
'. ucfirst($type) .' ' . translate('ML_ISSUES') . ' ';
+ echo '';
+ foreach($issues as $file=>$issue){
+ $file = str_replace($this->pathToModule . '/', '', $file);
+ echo '
' . $file . '
';
+ if(is_array($issue)){
+ foreach($issue as $i){
+ echo "$i ";
+ }
+ }else{
+ echo "$issue ";
+ }
+ echo "
";
+ }
+ echo '
';
+
+ }
+ echo " ";
+
+ }
+
+
+}
+
+
+?>
\ No newline at end of file
diff --git a/ModuleInstall/PackageManager/ListViewPackages.php b/ModuleInstall/PackageManager/ListViewPackages.php
new file mode 100644
index 00000000..b31b3fe3
--- /dev/null
+++ b/ModuleInstall/PackageManager/ListViewPackages.php
@@ -0,0 +1,72 @@
+data = $data;
+ $this->tpl = $file;
+ }
+
+ /**
+ * Override the display method
+ */
+ function display(){
+ global $odd_bg, $even_bg, $app_strings;
+ $this->ss->assign('rowColor', array('oddListRow', 'evenListRow'));
+ $this->ss->assign('bgColor', array($odd_bg, $even_bg));
+ $this->ss->assign('displayColumns', $this->displayColumns);
+ $this->ss->assign('secondaryDisplayColumns', $this->secondaryDisplayColumns);
+ $this->ss->assign('data', $this->data);
+ return $this->ss->fetch($this->tpl);
+ }
+}
+?>
diff --git a/ModuleInstall/PackageManager/PackageController.php b/ModuleInstall/PackageManager/PackageController.php
new file mode 100644
index 00000000..d4082035
--- /dev/null
+++ b/ModuleInstall/PackageManager/PackageController.php
@@ -0,0 +1,356 @@
+_pm = new PackageManager();
+ }
+
+ function performBasicSearch(){
+ $json = getJSONobj();
+ $search_term = '';
+ $node_id = '';
+ if(isset($_REQUEST['search_term'])) {
+ $search_term = nl2br($_REQUEST['search_term']);
+ }
+ if(isset($_REQUEST['node_id'])) {
+ $node_id = nl2br($_REQUEST['node_id']);
+ }
+ $xml = PackageManager::getPackages($node_id);
+ echo 'result = ' . $json->encode(array('packages' => $xml));
+ }
+
+ /**
+ * Retrieve a list of packages which belong to the corresponding category
+ *
+ * @param category_id this is passed via POST and is the category id of packages
+ * we wish to retrieve
+ * @return packages xml string consisting of the packages and releases which belong to
+ * the category
+ */
+ function getPackages(){
+ $json = getJSONobj();
+ $category_id = '';
+
+ if(isset($_REQUEST['category_id'])) {
+ $category_id = nl2br($_REQUEST['category_id']);
+ }
+ $xml = PackageManager::getPackages($category_id);
+ echo 'result = ' . $json->encode(array('package_output' => $xml));
+ }
+
+ /**
+ * Obtain a list of releases from the server. This function is currently used for generating the patches/langpacks for upgrade wizard
+ * as well as during installation
+ */
+ function getReleases(){
+ $json = getJSONobj();
+ $category_id = '';
+ $package_id = '';
+ $types = '';
+ if(isset($_REQUEST['category_id'])) {
+ $category_id = nl2br($_REQUEST['category_id']);
+ }
+ if(isset($_REQUEST['package_id'])) {
+ $package_id = nl2br($_REQUEST['package_id']);
+ }
+ if(isset($_REQUEST['types'])) {
+ $types = nl2br($_REQUEST['types']);
+ }
+ $types = explode(',', $types);
+
+ $filter = array();
+ $count = count($types);
+ $index = 1;
+ $type_str = '';
+ foreach($types as $type){
+ $type_str .= "'".$type."'";
+ if($index < $count)
+ $type_str .= ",";
+ $index++;
+ }
+
+ $filter = array('type' => $type_str);
+ $filter = PackageManager::toNameValueList($filter);
+ $releases = PackageManager::getReleases($category_id, $package_id, $filter);
+ $nodes = array();
+ $release_map = array();
+ foreach($releases['packages'] as $release){
+ $release = PackageManager::fromNameValueList($release);
+ $nodes[] = array('description' => $release['description'], 'version' => $release['version'], 'build_number' => $release['build_number'], 'id' => $release['id']);
+ $release_map[$release['id']] = array('package_id' => $release['package_id'], 'category_id' => $release['category_id']);
+ }
+ $_SESSION['ML_PATCHES'] = $release_map;
+ echo 'result = ' . $json->encode(array('releases' => $nodes));
+ }
+
+ /**
+ * Obtain a promotion from the depot
+ */
+ function getPromotion(){
+ $json = getJSONobj();
+
+ $header = PackageManager::getPromotion();
+
+ echo 'result = ' . $json->encode(array('promotion' => $header));
+ }
+
+ /**
+ * Download the given release
+ *
+ * @param category_id this is passed via POST and is the category id of the release we wish to download
+ * @param package_id this is passed via POST and is the package id of the release we wish to download
+ * @param release_id this is passed via POST and is the release id of the release we wish to download
+ * @return bool true is successful in downloading, false otherwise
+ */
+ function download(){
+ global $sugar_config;
+ $json = getJSONobj();
+ $package_id = '';
+ $category_id = '';
+ $release_id = '';
+ if(isset($_REQUEST['package_id'])) {
+ $package_id = nl2br($_REQUEST['package_id']);
+ }
+ if(isset($_REQUEST['category_id'])) {
+ $category_id = nl2br($_REQUEST['category_id']);
+ }
+ if(isset($_REQUEST['release_id'])) {
+ $release_id = nl2br($_REQUEST['release_id']);
+ }
+ $GLOBALS['log']->debug("PACKAGE ID: ".$package_id);
+ $GLOBALS['log']->debug("CATEGORY ID: ".$category_id);
+ $GLOBALS['log']->debug("RELEASE ID: ".$release_id);
+ $result = $this->_pm->download($category_id, $package_id, $release_id, getcwd().'/'.$sugar_config['upload_dir']);
+ $GLOBALS['log']->debug("RESULT: ".print_r($result,true));
+ $success = 'false';
+ if($result != null){
+ $GLOBALS['log']->debug("Performing Setup");
+ $this->_pm->performSetup($result, 'module', false);
+ $GLOBALS['log']->debug("Complete Setup");
+ $success = 'true';
+ }
+ echo 'result = ' . $json->encode(array('success' => $success));
+ }
+
+ /**
+ * Retrieve a list of categories that are subcategories to the selected category
+ *
+ * @param id - the id of the parent_category, -1 if this is the root
+ * @return array - a list of categories/nodes which are underneath this node
+ */
+ function getCategories(){
+ $json = getJSONobj();
+ $node_id = '';
+ if(isset($_REQUEST['category_id'])) {
+ $node_id = nl2br($_REQUEST['category_id']);
+ }
+ $GLOBALS['log']->debug("NODE ID: ".$node_id);
+ $nodes = PackageManager::getCategories($node_id);
+ echo 'result = ' . $json->encode(array('nodes' => $nodes));
+ }
+
+ function getNodes(){
+ $json = getJSONobj();
+ $category_id = '';
+ if(isset($_REQUEST['category_id'])) {
+ $category_id = nl2br($_REQUEST['category_id']);
+ }
+ $GLOBALS['log']->debug("CATEGORY ID: ".$category_id);
+ $nodes = PackageManager::getModuleLoaderCategoryPackages($category_id);
+ $GLOBALS['log']->debug(var_export($nodes, true));
+ echo 'result = ' . $json->encode(array('nodes' => $nodes));
+ }
+
+ /**
+ * Check the SugarDepot for updates for the given type as passed in via POST
+ * @param type the type to check for
+ * @return array return an array of releases for each given installed object if an update is found
+ */
+ function checkForUpdates(){
+ $json = getJSONobj();
+ $type = '';
+ if(isset($_REQUEST['type'])) {
+ $type = nl2br($_REQUEST['type']);
+ }
+ $pm = new PackageManager();
+ $updates = $pm->checkForUpdates();
+ $nodes = array();
+ $release_map = array();
+ if(!empty($updates)){
+ foreach($updates as $update){
+ $update = PackageManager::fromNameValueList($update);
+ $nodes[] = array('label' => $update['name'], 'description' => $update['description'], 'version' => $update['version'], 'build_number' => $update['build_number'], 'id' => $update['id'], 'type' => $update['type']);
+ $release_map[$update['id']] = array('package_id' => $update['package_id'], 'category_id' => $update['category_id'], 'type' => $update['type']);
+ }
+ }
+ //patches
+ $filter = array(array('name' => 'type', 'value' => "'patch'"));
+ $releases = $pm->getReleases('', '', $filter);
+ if(!empty($releases['packages'])){
+ foreach($releases['packages'] as $update){
+ $update = PackageManager::fromNameValueList($update);
+ $nodes[] = array('label' => $update['name'], 'description' => $update['description'], 'version' => $update['version'], 'build_number' => $update['build_number'], 'id' => $update['id'], 'type' => $update['type']);
+ $release_map[$update['id']] = array('package_id' => $update['package_id'], 'category_id' => $update['category_id'], 'type' => $update['type']);
+ }
+ }
+ $_SESSION['ML_PATCHES'] = $release_map;
+ echo 'result = ' . $json->encode(array('updates' => $nodes));
+ }
+
+ function getLicenseText(){
+ $json = getJSONobj();
+ $file = '';
+ if(isset($_REQUEST['file'])) {
+ $file = hashToFile($_REQUEST['file']);
+ }
+ $GLOBALS['log']->debug("FILE : ".$file);
+ echo 'result = ' . $json->encode(array('license_display' => PackageManagerDisplay::buildLicenseOutput($file)));
+ }
+
+ /**
+ * build the list of modules that are currently in the staging area waiting to be installed
+ */
+ function getPackagesInStaging(){
+ $packages = $this->_pm->getPackagesInStaging('module');
+ $json = getJSONobj();
+
+ echo 'result = ' . $json->encode(array('packages' => $packages));
+ }
+
+ /**
+ * build the list of modules that are currently in the staging area waiting to be installed
+ */
+ function performInstall(){
+ $file = '';
+ if(isset($_REQUEST['file'])) {
+ $file = hashToFile($_REQUEST['file']);
+ }
+ if(!empty($file)){
+ $this->_pm->performInstall($file);
+ }
+ $json = getJSONobj();
+
+ echo 'result = ' . $json->encode(array('result' => 'success'));
+ }
+
+ function authenticate(){
+ $json = getJSONobj();
+ $username = '';
+ $password = '';
+ $servername = '';
+ $terms_checked = '';
+ if(isset($_REQUEST['username'])) {
+ $username = nl2br($_REQUEST['username']);
+ }
+ if(isset($_REQUEST['password'])) {
+ $password = nl2br($_REQUEST['password']);
+ }
+ if(isset($_REQUEST['servername'])) {
+ $servername = $_REQUEST['servername'];
+ }
+ if(isset($_REQUEST['terms_checked'])) {
+ $terms_checked = $_REQUEST['terms_checked'];
+ if($terms_checked == 'on')
+ $terms_checked = true;
+ }
+
+ if(!empty($username) && !empty($password)){
+ $password = md5($password);
+ $result = PackageManager::authenticate($username, $password, $servername, $terms_checked);
+ if(!is_array($result) && $result == true)
+ $status = 'success';
+ else
+ $status = $result['faultstring'];
+ }else{
+ $status = 'failed';
+ }
+
+ echo 'result = ' . $json->encode(array('status' => $status));
+ }
+
+ function getDocumentation(){
+ $json = getJSONobj();
+ $package_id = '';
+ $release_id = '';
+
+ if(isset($_REQUEST['package_id'])) {
+ $package_id = nl2br($_REQUEST['package_id']);
+ }
+ if(isset($_REQUEST['release_id'])) {
+ $release_id = nl2br($_REQUEST['release_id']);
+ }
+
+ $documents = PackageManager::getDocumentation($package_id, $release_id);
+ $GLOBALS['log']->debug("DOCUMENTS: ".var_export($documents, true));
+ echo 'result = ' . $json->encode(array('documents' => $documents));
+ }
+
+ function downloadedDocumentation(){
+ $json = getJSONobj();
+ $document_id = '';
+
+ if(isset($_REQUEST['document_id'])) {
+ $document_id = nl2br($_REQUEST['document_id']);
+ }
+ $GLOBALS['log']->debug("Downloading Document: ".$document_id);
+ PackageManagerComm::downloadedDocumentation($document_id);
+ echo 'result = ' . $json->encode(array('result' => 'true'));
+ }
+
+ function remove(){
+ $json = getJSONobj();
+ $file = '';
+
+ if(isset($_REQUEST['file'])) {
+ $file = urldecode(hashToFile($_REQUEST['file']));
+ }
+ $GLOBALS['log']->debug("FILE TO REMOVE: ".$file);
+ if(!empty($file)){
+ unlink($file);
+ }
+ echo 'result = ' . $json->encode(array('result' => 'true'));
+ }
+ }
+?>
diff --git a/ModuleInstall/PackageManager/PackageManager.php b/ModuleInstall/PackageManager/PackageManager.php
new file mode 100644
index 00000000..49a174a7
--- /dev/null
+++ b/ModuleInstall/PackageManager/PackageManager.php
@@ -0,0 +1,878 @@
+db = & DBManagerFactory::getInstance();
+ }
+
+ function initializeComm(){
+
+ }
+
+ /**
+ * Obtain a promotion from SugarDepot
+ * @return string the string from the promotion
+ */
+ function getPromotion(){
+ $name_value_list = PackageManagerComm::getPromotion();
+ if(!empty($name_value_list)){
+ $name_value_list = PackageManager::fromNameValueList($name_value_list);
+ return $name_value_list['description'];
+ }else {
+ return '';
+ }
+ }
+
+ /**
+ * Obtain a list of category/packages/releases for use within the module loader
+ */
+ function getModuleLoaderCategoryPackages($category_id = ''){
+ $filter = array();
+ $filter = array('type' => "'module', 'theme', 'langpack'");
+ $filter = PackageManager::toNameValueList($filter);
+ return PackageManager::getCategoryPackages($category_id, $filter);
+ }
+
+ /**
+ * Obtain the list of category_packages from SugarDepot
+ * @return category_packages
+ */
+ function getCategoryPackages($category_id = '', $filter = array()){
+ $results = PackageManagerComm::getCategoryPackages($category_id, $filter);
+ PackageManagerComm::errorCheck();
+ $nodes = array();
+
+ $nodes[$category_id]['packages'] = array();
+ if(!empty($results['categories'])){
+ foreach($results['categories'] as $category){
+ $mycat = PackageManager::fromNameValueList($category);
+ $nodes[$mycat['id']] = array('id' => $mycat['id'], 'label' => $mycat['name'], 'description' => $mycat['description'], 'type' => 'cat', 'parent' => $mycat['parent_id']);
+ $nodes[$mycat['id']]['packages'] = array();
+ }
+ }
+ if(!empty($results['packages'])){
+ $uh = new UpgradeHistory();
+ foreach($results['packages'] as $package){
+ $mypack = PackageManager::fromNameValueList($package);
+ $nodes[$mypack['category_id']]['packages'][$mypack['id']] = array('id' => $mypack['id'], 'label' => $mypack['name'], 'description' => $mypack['description'], 'category_id' => $mypack['category_id'], 'type' => 'package');
+ $releases = PackageManager::getReleases($category_id, $mypack['id'], $filter);
+ $arr_releases = array();
+ $nodes[$mypack['category_id']]['packages'][$mypack['id']]['releases'] = array();
+ if(!empty($releases['packages'])){
+ foreach($releases['packages'] as $release){
+ $myrelease = PackageManager::fromNameValueList($release);
+ //check to see if we already this one installed
+ $result = $uh->determineIfUpgrade($myrelease['id_name'], $myrelease['version']);
+ $enable = false;
+ if($result == true || is_array($result))
+ $enable = true;
+ $nodes[$mypack['category_id']]['packages'][$mypack['id']]['releases'][$myrelease['id']] = array('id' => $myrelease['id'], 'version' => $myrelease['version'], 'label' => $myrelease['description'], 'category_id' => $mypack['category_id'], 'package_id' => $mypack['id'], 'type' => 'release', 'enable' => $enable);
+ }
+ }
+ //array_push($nodes[$mypack['category_id']]['packages'], $package_arr);
+ }
+ }
+ $GLOBALS['log']->debug("NODES". var_export($nodes, true));
+ return $nodes;
+ }
+
+ /**
+ * Get a list of categories from the SugarDepot
+ * @param category_id the category id of parent to obtain
+ * @param filter an array of filters to pass to limit the query
+ * @return array an array of categories for display on the client
+ */
+ function getCategories($category_id, $filter = array()){
+ $nodes = array();
+ $results = PackageManagerComm::getCategories($category_id, $filter);
+ PackageManagerComm::errorCheck();
+ if(!empty($results['categories'])){
+ foreach($results['categories'] as $category){
+ $mycat = PackageManager::fromNameValueList($category);
+ $nodes[] = array('id' => $mycat['id'], 'label' => $mycat['name'], 'description' => $mycat['description'], 'type' => 'cat', 'parent' => $mycat['parent_id']);
+ }
+ }
+ return $nodes;
+ }
+
+ function getPackages($category_id, $filter = array()){
+ $nodes = array();
+ $results = PackageManagerComm::getPackages($category_id, $filter);
+ PackageManagerComm::errorCheck();
+ $packages = array();
+ //$xml = '';
+ //$xml .= '';
+ if(!empty($results['packages'])){
+ foreach($results['packages'] as $package){
+ $mypack = PackageManager::fromNameValueList($package);
+ $packages[$mypack['id']] = array('package_id' => $mypack['id'], 'name' => $mypack['name'], 'description' => $mypack['description'], 'category_id' => $mypack['category_id']);
+ $releases = PackageManager::getReleases($category_id, $mypack['id']);
+ $arr_releases = array();
+ foreach($releases['packages'] as $release){
+ $myrelease = PackageManager::fromNameValueList($release);
+ $arr_releases[$myrelease['id']] = array('release_id' => $myrelease['id'], 'version' => $myrelease['version'], 'description' => $myrelease['description'], 'category_id' => $mypack['category_id'], 'package_id' => $mypack['id']);
+ }
+ $packages[$mypack['id']]['releases'] = $arr_releases;
+ }
+ }
+ return $packages;
+ }
+
+ function getReleases($category_id, $package_id, $filter = array()){
+ $releases = PackageManagerComm::getReleases($category_id, $package_id, $filter);
+ PackageManagerComm::errorCheck();
+ return $releases;
+ }
+
+ /**
+ * Retrieve the package as specified by the $id from the heartbeat server
+ *
+ * @param category_id the category_id to which the release belongs
+ * @param package_id the package_id to which the release belongs
+ * @param release_id the release_id to download
+ * @return filename - the path to which the zip file was saved
+ */
+ function download($category_id, $package_id, $release_id, $save_dir = ''){
+ $GLOBALS['log']->debug('RELEASE _ID: '.$release_id);
+ if(!empty($release_id)){
+ $filename = PackageManagerComm::addDownload($category_id, $package_id, $release_id);
+ if($filename){
+ $GLOBALS['log']->debug('RESULT: '.$filename);
+ PackageManagerComm::errorCheck();
+ $filepath = PackageManagerComm::performDownload($filename, $save_dir);
+ return $filepath;
+ /*if(!empty($result) && !empty($result['filename']) && !empty($save_dir)){
+ $GLOBALS['log']->debug('Saving Package to: '.$save_dir);
+ $GLOBALS['log']->debug('Saving package to the local file system:'.$result['filename']);
+ return write_encoded_file ($result, $save_dir);
+ }else{
+ return null;
+ }*/
+ }
+ }else{
+ return null;
+ }
+ }
+
+ /**
+ * Given the Mambo username, password, and download key attempt to authenticate, if
+ * successful then store these credentials
+ *
+ * @param username Mambo username
+ * @param password Mambo password
+ * @param systemname the user's download key
+ * @return true if successful, false otherwise
+ */
+ function authenticate($username, $password, $systemname='', $terms_checked = true){
+ PackageManager::setCredentials($username, $password, $systemname);
+ PackageManagerComm::clearSession();
+ $result = PackageManagerComm::login($terms_checked);
+ if(is_array($result))
+ return $result;
+ else
+ return true;
+ }
+
+ function setCredentials($username, $password, $systemname){
+
+ $admin = new Administration();
+ $admin->retrieveSettings();
+ $admin->saveSetting(CREDENTIAL_CATEGORY, CREDENTIAL_USERNAME, $username);
+ $admin->saveSetting(CREDENTIAL_CATEGORY, CREDENTIAL_PASSWORD, $password);
+ if(!empty($systemname)){
+ $admin->saveSetting('system', 'name', $systemname);
+ }
+ }
+
+ function getCredentials(){
+
+ $admin = new Administration();
+ $admin->retrieveSettings(CREDENTIAL_CATEGORY, true);
+ $credentials = array();
+ $credentials['username'] = '';
+ $credentials['password'] = '';
+ $credentials['system_name'] = '';
+ if(!empty($admin->settings[CREDENTIAL_CATEGORY.'_'.CREDENTIAL_USERNAME])){
+ $credentials['username'] = $admin->settings[CREDENTIAL_CATEGORY.'_'.CREDENTIAL_USERNAME];
+ }
+ if(!empty($admin->settings[CREDENTIAL_CATEGORY.'_'.CREDENTIAL_USERNAME])){
+ $credentials['password'] = $admin->settings[CREDENTIAL_CATEGORY.'_'.CREDENTIAL_PASSWORD];
+ }
+ if(!empty($admin->settings['system_name'])){
+ $credentials['system_name'] = $admin->settings['system_name'];
+ }
+ return $credentials;
+ }
+
+ function getTermsAndConditions(){
+ return PackageManagerComm::getTermsAndConditions();
+
+ }
+
+ /**
+ * Retrieve documentation for the given release or package
+ *
+ * @param package_id the specified package to retrieve documentation
+ * @param release_id the specified release to retrieve documentation
+ *
+ * @return documents
+ */
+ function getDocumentation($package_id, $release_id){
+ if(!empty($release_id) || !empty($package_id)){
+ $documents = PackageManagerComm::getDocumentation($package_id, $release_id);
+ return $documents;
+ }else{
+ return null;
+ }
+ }
+
+ /**
+ * Grab the list of installed modules and send that list to the depot.
+ * The depot will then send back a list of modules that need to be updated
+ */
+ function checkForUpdates(){
+ $lists = $this->buildInstalledReleases(array('module'), true);
+ $updates = array();
+ if(!empty($lists)){
+ $updates = PackageManagerComm::checkForUpdates($lists);
+ }//fi
+ return $updates;
+ }
+
+ ////////////////////////////////////////////////////////
+ /////////// HELPER FUNCTIONS
+ function toNameValueList($array){
+ $list = array();
+ foreach($array as $name=>$value){
+ $list[] = array('name'=>$name, 'value'=>$value);
+ }
+ return $list;
+ }
+
+ function toNameValueLists($arrays){
+ $lists = array();
+ foreach($arrays as $array){
+ $lists[] = PackageManager::toNameValueList($array);
+ }
+ return $lists;
+ }
+
+ function fromNameValueList($nvl){
+ $array = array();
+ foreach($nvl as $list){
+ $array[$list['name']] = $list['value'];
+ }
+ return $array;
+ }
+
+ function buildInstalledReleases($types = array('module')){
+ //1) get list of installed modules
+ $installeds = $this->getInstalled($types);
+ $releases = array();
+ foreach($installeds as $installed){
+ $releases[] = array('name' => $installed->name, 'id_name' => $installed->id_name, 'version' => $installed->version, 'filename' => $installed->filename, 'type' => $installed->type);
+ }
+
+ $lists = array();
+ $name_value_list = array();
+ if(!empty($releases)){
+ $lists = $this->toNameValueLists($releases);
+ }//fi
+ return $lists;
+ }
+
+ function buildPackageXML($package, $releases = array()){
+ $xml = '';
+ $xml .= ''.$package['id'].' ';
+ $xml .= ''.$package['name'].' ';
+ $xml .= ''.$package['description'].' ';
+ if(!empty($releases)){
+ $xml .= '';
+ foreach($releases['packages'] as $release){
+
+ $myrelease = PackageManager::fromNameValueList($release);
+ $xml .= '';
+ $xml .= ''.$myrelease['id'].' ';
+ $xml .= ''.$myrelease['version'].' ';
+ $xml .= ''.$myrelease['description'].' ';
+ $xml .= ''.$package['id'].' ';
+ $xml .= ''.$package['category_id'].' ';
+ $xml .= ' ';
+ }
+ $xml .= ' ';
+ }
+ $xml .= ' ';
+ return $xml;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ /////////// INSTALL SECTION
+ function extractFile( $zip_file, $file_in_zip, $base_tmp_upgrade_dir){
+ $my_zip_dir = mk_temp_dir( $base_tmp_upgrade_dir );
+ unzip_file( $zip_file, $file_in_zip, $my_zip_dir );
+ return( "$my_zip_dir/$file_in_zip" );
+ }
+
+ function extractManifest( $zip_file,$base_tmp_upgrade_dir ) {
+ global $sugar_config;
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ return( $this->extractFile( $zip_file, "manifest.php",$base_tmp_upgrade_dir ) );
+ }
+
+ function validate_manifest( $manifest ){
+ // takes a manifest.php manifest array and validates contents
+ global $subdirs;
+ global $sugar_version;
+ global $sugar_flavor;
+ global $mod_strings;
+
+ if( !isset($manifest['type']) ){
+ die($mod_strings['ERROR_MANIFEST_TYPE']);
+ }
+ $type = $manifest['type'];
+ $GLOBALS['log']->debug("Getting InstallType");
+ if( $this->getInstallType( "/$type/" ) == "" ){
+ $GLOBALS['log']->debug("Error with InstallType".$type);
+ die($mod_strings['ERROR_PACKAGE_TYPE']. ": '" . $type . "'." );
+ }
+ $GLOBALS['log']->debug("Passed with InstallType");
+ if( isset($manifest['acceptable_sugar_versions']) ){
+ $version_ok = false;
+ $matches_empty = true;
+ if( isset($manifest['acceptable_sugar_versions']['exact_matches']) ){
+ $matches_empty = false;
+ foreach( $manifest['acceptable_sugar_versions']['exact_matches'] as $match ){
+ if( $match == $sugar_version ){
+ $version_ok = true;
+ }
+ }
+ }
+ if( !$version_ok && isset($manifest['acceptable_sugar_versions']['regex_matches']) ){
+ $matches_empty = false;
+ foreach( $manifest['acceptable_sugar_versions']['regex_matches'] as $match ){
+ if( preg_match( "/$match/", $sugar_version ) ){
+ $version_ok = true;
+ }
+ }
+ }
+
+ if( !$matches_empty && !$version_ok ){
+ die( $mod_strings['ERROR_VERSION_INCOMPATIBLE'] . $sugar_version );
+ }
+ }
+
+ if( isset($manifest['acceptable_sugar_flavors']) && sizeof($manifest['acceptable_sugar_flavors']) > 0 ){
+ $flavor_ok = false;
+ foreach( $manifest['acceptable_sugar_flavors'] as $match ){
+ if( $match == $sugar_flavor ){
+ $flavor_ok = true;
+ }
+ }
+ if( !$flavor_ok ){
+ //die( $mod_strings['ERROR_FLAVOR_INCOMPATIBLE'] . $sugar_flavor );
+ }
+ }
+ }
+
+ function getInstallType( $type_string ){
+ // detect file type
+ global $subdirs;
+ $subdirs = array('full', 'langpack', 'module', 'patch', 'theme', 'temp');
+
+
+ foreach( $subdirs as $subdir ){
+ if( preg_match( "#/$subdir/#", $type_string ) ){
+ return( $subdir );
+ }
+ }
+ // return empty if no match
+ return( "" );
+ }
+
+ function performSetup($tempFile, $view = 'module', $display_messages = true){
+ global $sugar_config;
+ $base_filename = urldecode($tempFile);
+ $GLOBALS['log']->debug("BaseFileName: ".$base_filename);
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ $manifest_file = $this->extractManifest( $base_filename,$base_tmp_upgrade_dir);
+ $GLOBALS['log']->debug("Manifest: ".$manifest_file);
+ if($view == 'module')
+ $license_file = $this->extractFile($base_filename, 'LICENSE.txt', $base_tmp_upgrade_dir);
+ if(is_file($manifest_file)){
+ $GLOBALS['log']->debug("VALIDATING MANIFEST". $manifest_file);
+ require_once( $manifest_file );
+ $this->validate_manifest($manifest );
+ $upgrade_zip_type = $manifest['type'];
+ $GLOBALS['log']->debug("VALIDATED MANIFEST");
+ // exclude the bad permutations
+ if( $view == "module" ){
+ if ($upgrade_zip_type != "module" && $upgrade_zip_type != "theme" && $upgrade_zip_type != "langpack"){
+ $this->unlinkTempFiles();
+ if($display_messages)
+ die($mod_strings['ERR_UW_NOT_ACCEPTIBLE_TYPE']);
+ }
+ }elseif( $view == "default" ){
+ if($upgrade_zip_type != "patch" ){
+ $this->unlinkTempFiles();
+ if($display_messages)
+ die($mod_strings['ERR_UW_ONLY_PATCHES']);
+ }
+ }
+
+ $base_filename = preg_replace( "#\\\\#", "/", $base_filename );
+ $base_filename = basename( $base_filename );
+ mkdir_recursive( "$base_upgrade_dir/$upgrade_zip_type" );
+ $target_path = "$base_upgrade_dir/$upgrade_zip_type/$base_filename";
+ $target_manifest = remove_file_extension( $target_path ) . "-manifest.php";
+
+ if( isset($manifest['icon']) && $manifest['icon'] != "" ){
+ $icon_location = $this->extractFile( $tempFile ,$manifest['icon'], $base_tmp_upgrade_dir );
+ $path_parts = pathinfo( $icon_location );
+ copy( $icon_location, remove_file_extension( $target_path ) . "-icon." . $path_parts['extension'] );
+ }
+
+ if( copy( $tempFile , $target_path ) ){
+ copy( $manifest_file, $target_manifest );
+ if($display_messages)
+ $messages = '';
+ }else{
+ if($display_messages)
+ $messages = '';
+ }
+ }//fi
+ else{
+ $this->unlinkTempFiles();
+ if($display_messages)
+ die($mod_strings['ERR_UW_NO_MANIFEST']);
+ }
+ if(isset($messages))
+ return $messages;
+ }
+
+ function unlinkTempFiles() {
+ global $sugar_config;
+ @unlink($_FILES['upgrade_zip']['tmp_name']);
+ @unlink(getcwd().'/'.$sugar_config['upload_dir'].$_FILES['upgrade_zip']['name']);
+ }
+
+ function performInstall($file, $silent=true){
+ global $sugar_config;
+ global $mod_strings;
+ global $current_language;
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ if(!file_exists($base_tmp_upgrade_dir)){
+ mkdir_recursive($base_tmp_upgrade_dir, true);
+ }
+
+ $GLOBALS['log']->debug("INSTALLING: ".$file);
+ $mi = new ModuleInstaller();
+ $mi->silent = $silent;
+ $mod_strings = return_module_language($current_language, "Administration");
+ $GLOBALS['log']->debug("ABOUT TO INSTALL: ".$file);
+ if(preg_match("#.*\.zip\$#", $file)) {
+ $GLOBALS['log']->debug("1: ".$file);
+ // handle manifest.php
+ $target_manifest = remove_file_extension( $file ) . '-manifest.php';
+ include($target_manifest);
+ $GLOBALS['log']->debug("2: ".$file);
+ $unzip_dir = mk_temp_dir( $base_tmp_upgrade_dir );
+ unzip($file, $unzip_dir );
+ $GLOBALS['log']->debug("3: ".$unzip_dir);
+ $id_name = $installdefs['id'];
+ $version = $manifest['version'];
+ $uh = new UpgradeHistory();
+ $previous_install = array();
+ if(!empty($id_name) & !empty($version))
+ $previous_install = $uh->determineIfUpgrade($id_name, $version);
+ $previous_version = (empty($previous_install['version'])) ? '' : $previous_install['version'];
+ $previous_id = (empty($previous_install['id'])) ? '' : $previous_install['id'];
+
+ if(!empty($previous_version)){
+ $mi->install($unzip_dir, true, $previous_version);
+ }else{
+ $mi->install($unzip_dir);
+ }
+ $GLOBALS['log']->debug("INSTALLED: ".$file);
+ $new_upgrade = new UpgradeHistory();
+ $new_upgrade->filename = $file;
+ $new_upgrade->md5sum = md5_file($file);
+ $new_upgrade->type = $manifest['type'];
+ $new_upgrade->version = $manifest['version'];
+ $new_upgrade->status = "installed";
+ //$new_upgrade->author = $manifest['author'];
+ $new_upgrade->name = $manifest['name'];
+ $new_upgrade->description = $manifest['description'];
+ $new_upgrade->id_name = $id_name;
+ $serial_manifest = array();
+ $serial_manifest['manifest'] = (isset($manifest) ? $manifest : '');
+ $serial_manifest['installdefs'] = (isset($installdefs) ? $installdefs : '');
+ $serial_manifest['upgrade_manifest'] = (isset($upgrade_manifest) ? $upgrade_manifest : '');
+ $new_upgrade->manifest = base64_encode(serialize($serial_manifest));
+ //$new_upgrade->unique_key = (isset($manifest['unique_key'])) ? $manifest['unique_key'] : '';
+ $new_upgrade->save();
+ //unlink($file);
+ }//fi
+ }
+
+ function performUninstall($name){
+ $uh = new UpgradeHistory();
+ $uh->name = $name;
+ $uh->id_name = $name;
+ $found = $uh->checkForExisting($uh);
+ if($found != null){
+
+ global $sugar_config;
+ global $mod_strings;
+ global $current_language;
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ if(!isset($GLOBALS['mi_remove_tables']))$GLOBALS['mi_remove_tables'] = true;
+ $unzip_dir = mk_temp_dir( $base_tmp_upgrade_dir );
+ unzip($found->filename, $unzip_dir );
+ $mi = new ModuleInstaller();
+ $mi->silent = true;
+ $mi->uninstall( "$unzip_dir");
+ $found->delete();
+ unlink(remove_file_extension( $found->filename ) . '-manifest.php');
+ unlink($found->filename);
+ }
+ }
+
+ function getUITextForType( $type ){
+ if( $type == "full" ){
+ return( "Full Upgrade" );
+ }
+ if( $type == "langpack" ){
+ return( "Language Pack" );
+ }
+ if( $type == "module" ){
+ return( "Module" );
+ }
+ if( $type == "patch" ){
+ return( "Patch" );
+ }
+ if( $type == "theme" ){
+ return( "Theme" );
+ }
+ }
+
+ function getImageForType( $type ){
+
+ $icon = "";
+ switch( $type ){
+ case "full":
+ $icon = SugarThemeRegistry::current()->getImage("Upgrade", "" );
+ break;
+ case "langpack":
+ $icon = SugarThemeRegistry::current()->getImage("LanguagePacks", "" );
+ break;
+ case "module":
+ $icon = SugarThemeRegistry::current()->getImage("ModuleLoader", "" );
+ break;
+ case "patch":
+ $icon = SugarThemeRegistry::current()->getImage("PatchUpgrades", "" );
+ break;
+ case "theme":
+ $icon = SugarThemeRegistry::current()->getImage("Themes", "" );
+ break;
+ default:
+ break;
+ }
+ return( $icon );
+ }
+
+ function getPackagesInStaging($view = 'module'){
+ global $sugar_config;
+ global $current_language;
+ $uh = new UpgradeHistory();
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ $uContent = findAllFiles( "$base_upgrade_dir", array() , false, 'zip',$base_tmp_upgrade_dir);
+ //other variations of zip file i.e. ZIP, zIp,zIP,Zip,ZIp,ZiP
+ $extns = array( 'ZIP','ZIp','ZiP','Zip','zIP','zIp','ziP');
+ foreach($extns as $extn){
+ $uContent = array_merge($uContent,findAllFiles( "$base_upgrade_dir", array() , false, $extn,$base_tmp_upgrade_dir));
+ }
+ $upgrade_contents = array();
+ $content_values = array_values($uContent);
+ $alreadyProcessed = array();
+ foreach($content_values as $val){
+ if(empty($alreadyProcessed[$val])){
+ $upgrade_contents[] = $val;
+ $alreadyProcessed["$val"] = true;
+ }
+ }
+
+ $upgrades_available = 0;
+ $packages = array();
+ $mod_strings = return_module_language($current_language, "Administration");
+ foreach($upgrade_contents as $upgrade_content)
+ {
+ if(!preg_match("#.*\.zip\$#", strtolower($upgrade_content)) || preg_match("#.*./zips/.*#", strtolower($upgrade_content)))
+ {
+ continue;
+ }
+
+ $upgrade_content = clean_path($upgrade_content);
+ // Bug 22285 - fix for UNC paths
+ if ( substr($upgrade_content,0,2) == '\\\\' )
+ $upgrade_content = '\\\\'.$upgrade_content;
+ $the_base = basename($upgrade_content);
+ $the_md5 = md5_file($upgrade_content);
+ $md5_matches = $uh->findByMd5($the_md5);
+ $file_install = $upgrade_content;
+ if(0 == sizeof($md5_matches))
+ {
+ $target_manifest = remove_file_extension( $upgrade_content ) . '-manifest.php';
+ require_once($target_manifest);
+
+ $name = empty($manifest['name']) ? $upgrade_content : $manifest['name'];
+ $version = empty($manifest['version']) ? '' : $manifest['version'];
+ $published_date = empty($manifest['published_date']) ? '' : $manifest['published_date'];
+ $icon = '';
+ $description = empty($manifest['description']) ? 'None' : $manifest['description'];
+ $uninstallable = empty($manifest['is_uninstallable']) ? 'No' : 'Yes';
+ $type = $this->getUITextForType( $manifest['type'] );
+ $manifest_type = $manifest['type'];
+ $dependencies = array();
+ if( isset( $manifest['dependencies']) ){
+ $dependencies = $manifest['dependencies'];
+ }
+
+ //check dependencies first
+ if(!empty($dependencies)){
+
+ $uh = new UpgradeHistory();
+ $not_found = $uh->checkDependencies($dependencies);
+ if(!empty($not_found) && count($not_found) > 0){
+ $file_install = 'errors_'.$mod_strings['ERR_UW_NO_DEPENDENCY']."[".implode(',', $not_found)."]";
+ }//fi
+ }
+
+ if($view == 'default' && $manifest_type != 'patch')
+ {
+ continue;
+ }
+
+ if($view == 'module'
+ && $manifest_type != 'module' && $manifest_type != 'theme' && $manifest_type != 'langpack')
+ {
+ continue;
+ }
+
+ if(empty($manifest['icon'])){
+ $icon = $this->getImageForType( $manifest['type'] );
+ }else{
+ $path_parts = pathinfo( $manifest['icon'] );
+ $icon = " ";
+ }
+
+ $upgrades_available++;
+
+ // uploaded file in cache/upload
+ $fileS = explode('/', $upgrade_content);
+ $c = count($fileS);
+ $fileName = (isset($fileS[$c-1]) && !empty($fileS[$c-1])) ? $fileS[$c-1] : $fileS[$c-2];
+ $upload_file = $sugar_config['upload_dir'].$fileName;
+
+ $upgrade_content = urlencode($upgrade_content);
+ $upload_content = urlencode($upload_file);
+ $packages[] = array('name' => $name, 'version' => $version, 'published_date' => $published_date, 'description' => $description, 'uninstallable' =>$uninstallable, 'type' => $type, 'file_install' => fileToHash($file_install), 'file' => fileToHash($upgrade_content), 'upload_file' => $upload_content);
+ }//fi
+ }//rof
+ return $packages;
+ }
+
+ function getLicenseFromFile($file){
+ global $sugar_config;
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ $license_file = $this->extractFile($file, 'LICENSE.txt', $base_tmp_upgrade_dir);
+ if(is_file($license_file)){
+ $contents = file_get_contents($license_file);
+ return $contents;
+ }else{
+ return null;
+ }
+ }
+
+ /**
+ * Run the query to obtain the list of installed types as specified by the type param
+ *
+ * @param type an array of types you would like to search for
+ * type options include (theme, langpack, module, patch)
+ *
+ * @return an array of installed upgrade_history objects
+ */
+ function getInstalled($types = array('module')){
+ $uh = new UpgradeHistory();
+ $in = "";
+ for($i = 0; $i < count($types); $i++){
+ $in .= "'".$types[$i]."'";
+ if(($i+1) < count($types)){
+ $in .= ",";
+ }
+ }
+ $query = "SELECT * FROM ".$uh->table_name." WHERE type IN (".$in.")";
+ return $uh->getList($query);
+ }
+
+ function getinstalledPackages($types = array('module', 'langpack')){
+ global $sugar_config;
+ $installeds = $this->getInstalled($types);
+ $packages = array();
+ $upgrades_installed = 0;
+ $uh = new UpgradeHistory();
+ $base_upgrade_dir = $sugar_config['upload_dir'] . "/upgrades";
+ $base_tmp_upgrade_dir = "$base_upgrade_dir/temp";
+ foreach($installeds as $installed)
+ {
+ $populate = false;
+ $filename = from_html($installed->filename);
+ $date_entered = $installed->date_entered;
+ $type = $installed->type;
+ $version = $installed->version;
+ $uninstallable = false;
+ $link = "";
+ $description = $installed->description;
+ $name = $installed->name;
+ $enabled = true;
+ $enabled_string = 'ENABLED';
+ //if the name is empty then we should try to pull from manifest and populate upgrade_history_table
+ if(empty($name)){
+ $populate = true;
+ }
+ $upgrades_installed++;
+ switch($type)
+ {
+ case "theme":
+ case "langpack":
+ case "module":
+ case "patch":
+ if($populate){
+ $manifest_file = $this->extractManifest($filename, $base_tmp_upgrade_dir);
+ require_once($manifest_file);
+ $GLOBALS['log']->info("Filling in upgrade_history table");
+ $populate = false;
+ if( isset( $manifest['name'] ) ){
+ $name = $manifest['name'];
+ $installed->name = $name;
+ }
+ if( isset( $manifest['description'] ) ){
+ $description = $manifest['description'];
+ $installed->description = $description;
+ }
+ if(isset($installdefs) && isset( $installdefs['id'] ) ){
+ $id_name = $installdefs['id'];
+ $installed->id_name = $id_name;
+ }
+
+ $serial_manifest = array();
+ $serial_manifest['manifest'] = (isset($manifest) ? $manifest : '');
+ $serial_manifest['installdefs'] = (isset($installdefs) ? $installdefs : '');
+ $serial_manifest['upgrade_manifest'] = (isset($upgrade_manifest) ? $upgrade_manifest : '');
+ $installed->manifest = base64_encode(serialize($serial_manifest));
+ $installed->save();
+ }else{
+ $serial_manifest = unserialize(base64_decode($installed->manifest));
+ $manifest = $serial_manifest['manifest'];
+ }
+ if(($upgrades_installed==0 || $uh->UninstallAvailable($installeds, $installed))
+ && is_file($filename) && !empty($manifest['is_uninstallable']))
+ {
+ $uninstallable = true;
+ }
+ $enabled = $installed->enabled;
+ if(!$enabled)
+ $enabled_string = 'DISABLED';
+ $file_uninstall = $filename;
+ if(!$uninstallable){
+ $file_uninstall = 'UNINSTALLABLE';
+ $enabled_string = 'UNINSTALLABLE';
+ } else {
+ $file_uninstall = fileToHash( $file_uninstall );
+ }
+
+ $packages[] = array(
+ 'name' => $name,
+ 'version' => $version,
+ 'type' => $type,
+ 'published_date' => $date_entered,
+ 'description' => $description,
+ 'uninstallable' =>$uninstallable,
+ 'file_install' => $file_uninstall ,
+ 'file' => fileToHash($filename),
+ 'enabled' => $enabled_string
+ );
+ break;
+ default:
+ break;
+ }
+
+ }//rof
+ return $packages;
+ }
+ }
+?>
diff --git a/ModuleInstall/PackageManager/PackageManagerComm.php b/ModuleInstall/PackageManager/PackageManagerComm.php
new file mode 100644
index 00000000..cbebb366
--- /dev/null
+++ b/ModuleInstall/PackageManager/PackageManagerComm.php
@@ -0,0 +1,309 @@
+debug('USING HTTPS TO CONNECT TO HEARTBEAT');
+ $soap_client = new nusoapclient(HTTPS_URL, false);
+ $ping = $soap_client->call('sugarPing', array());
+ $GLOBALS['SugarDepot'] = $soap_client;
+ }
+ //if we do not have a session, then try to login
+ if($login && empty($_SESSION['SugarDepotSessionID'])){
+ PackageManagerComm::login();
+ }
+ }
+
+ /**
+ * Check for errors in the response or error_str
+ */
+ function errorCheck(){
+ if(!empty($GLOBALS['SugarDepot']->error_str)){
+ $GLOBALS['log']->fatal($GLOBALS['SugarDepot']->error_str);
+ $GLOBALS['log']->fatal($GLOBALS['SugarDepot']->response);
+ }
+ }
+
+ /**
+ * Set the credentials for use during login
+ *
+ * @param username Mambo username
+ * @param password Mambo password
+ * @param download_key User's download key
+ */
+ function setCredentials($username, $password, $download_key){
+ $_SESSION['SugarDepotUsername'] = $username;
+ $_SESSION['SugarDepotPassword'] = $password;
+ $_SESSION['SugarDepotDownloadKey'] = $download_key;
+ }
+
+ /**
+ * Clears out the session so we can reauthenticate.
+ */
+ function clearSession(){
+ $_SESSION['SugarDepotSessionID'] = null;
+ unset($_SESSION['SugarDepotSessionID']);
+ }
+ /////////////////////////////////////////////////////////
+ ////////// BEGIN: Base Functions for Communicating with the depot
+ /**
+ * Login to the depot
+ *
+ * @return true if successful, false otherwise
+ */
+ function login($terms_checked = true){
+ if(empty($_SESSION['SugarDepotSessionID'])){
+ global $license;
+ $GLOBALS['log']->debug("Begin SugarDepot Login");
+ PackageManagerComm::initialize(false);
+ require('sugar_version.php');
+ require('config.php');
+ $credentials = PackageManager::getCredentials();
+ if(empty($license))loadLicense();
+ $info = sugarEncode('2813', serialize(getSystemInfo(true)));
+ $pm = new PackageManager();
+ $installed = $pm->buildInstalledReleases();
+ $installed = base64_encode(serialize($installed));
+ $params = array('installed_modules' => $installed, 'terms_checked' => $terms_checked, 'system_name' => $credentials['system_name']);
+ $terms_version = (!empty($_SESSION['SugarDepot_TermsVersion']) ? $_SESSION['SugarDepot_TermsVersion'] : '');
+ if(!empty($terms_version))
+ $params['terms_version'] = $terms_version;
+
+ $result = $GLOBALS['SugarDepot']->call('depotLogin', array(array('user_name' => $credentials['username'], 'password' => $credentials['password']),'info'=>$info, 'params' => $params));
+ PackageManagerComm::errorCheck();
+ if(!is_array($result))
+ $_SESSION['SugarDepotSessionID'] = $result;
+ $GLOBALS['log']->debug("End SugarDepot Login");
+ return $result;
+ }
+ else
+ return $_SESSION['SugarDepotSessionID'];
+ }
+
+ /**
+ * Logout from the depot
+ */
+ function logout(){
+ PackageManagerComm::initialize();
+ $result = $GLOBALS['SugarDepot']->call('depotLogout', array('session_id' => $_SESSION['SugarDepotSessionID']));
+ }
+
+ /**
+ * Get all promotions from the depot
+ */
+ function getPromotion(){
+ PackageManagerComm::initialize();
+ //check for fault first and then return
+ $name_value_list = $GLOBALS['SugarDepot']->call('depotGetPromotion', array('session_id' => $_SESSION['SugarDepotSessionID']));
+ return $name_value_list;
+ }
+
+ /**
+ * A generic function which given a category_id some filter will
+ * return an object which contains categories and packages
+ *
+ * @param category_id the category_id to fetch
+ * @param filter a filter which will limit theh number of results returned
+ * @return categories_and_packages
+ * @see categories_and_packages
+ */
+ function getCategoryPackages($category_id, $filter = array()){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotGetCategoriesPackages', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'filter' => $filter));
+ }
+
+ /**
+ * Return a list of child categories to the parent specified in category_id
+ *
+ * @param category_id the parent category_id
+ * @param filter a filter which will limit theh number of results returned
+ * @return categories_and_packages
+ * @see categories_and_packages
+ */
+ function getCategories($category_id, $filter = array()){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotGetCategories', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'filter' => $filter));
+ }
+
+ /**
+ * Return a list of packages which belong to the parent category_id
+ *
+ * @param category_id the category_id to fetch
+ * @param filter a filter which will limit theh number of results returned
+ * @return packages
+ * @see packages
+ */
+ function getPackages($category_id, $filter = array()){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotGetPackages', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'filter' => $filter));
+ }
+
+ /**
+ * Return a list of releases belong to a package
+ *
+ * @param category_id the category_id to fetch
+ * @param package_id the package id which the release belongs to
+ * @return packages
+ * @see packages
+ */
+ function getReleases($category_id, $package_id, $filter = array()){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotGetReleases', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'package_id' => $package_id, 'filter' => $filter));
+ }
+
+ /**
+ * Download a given release
+ *
+ * @param category_id the category_id to fetch
+ * @param package_id the package id which the release belongs to
+ * @param release_id the release we want to download
+ * @return download
+ * @see download
+ */
+ function download($category_id, $package_id, $release_id){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotDownloadRelease', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'package_id' => $package_id, 'release_id' => $release_id));
+ }
+
+ /**
+ * Add a requested download to the queue
+ *
+ * @param category_id the category_id to fetch
+ * @param package_id the package id which the release belongs to
+ * @param release_id the release we want to download
+ * @return the filename to download
+ */
+ function addDownload($category_id, $package_id, $release_id){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotAddDownload', array('session_id' => $_SESSION['SugarDepotSessionID'], 'category_id' => $category_id, 'package_id' => $package_id, 'release_id' => $release_id, 'download_key' => '123'));
+ }
+
+ /**
+ * Call the PackageManagerDownloader function which uses curl in order to download the specified file
+ *
+ * @param filename the file to download
+ * @return path to downloaded file
+ */
+ function performDownload($filename, $save_dir){
+ PackageManagerComm::initialize();
+ //check for fault
+ $GLOBALS['log']->debug("Performing download from depot: Session ID: ".$_SESSION['SugarDepotSessionID']." Filename: ".$filename);
+ return PackageManagerDownloader::download($_SESSION['SugarDepotSessionID'], $filename, $save_dir);
+ }
+
+ /**
+ * Retrieve documentation for the given release or package
+ *
+ * @param package_id the specified package to retrieve documentation
+ * @param release_id the specified release to retrieve documentation
+ *
+ * @return documents
+ */
+ function getDocumentation($package_id, $release_id){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotGetDocumentation', array('session_id' => $_SESSION['SugarDepotSessionID'], 'package_id' => $package_id, 'release_id' => $release_id));
+ }
+
+ function getTermsAndConditions(){
+ PackageManagerComm::initialize(false);
+ return $GLOBALS['SugarDepot']->call('depotTermsAndConditions',array());
+ }
+
+ /**
+ * Log that the user has clicked on a document
+ *
+ * @param document_id the document the user has clicked on
+ */
+ function downloadedDocumentation($document_id){
+ PackageManagerComm::initialize();
+ //check for fault
+ $GLOBALS['log']->debug("Logging Document: ".$document_id);
+ $GLOBALS['SugarDepot']->call('depotDownloadedDocumentation', array('session_id' => $_SESSION['SugarDepotSessionID'], 'document_id' => $document_id));
+ }
+
+ /**
+ * Send the list of installed objects, could be patches, or modules, .. to the depot and allow the depot to send back
+ * a list of corresponding updates
+ *
+ * @param objects_to_check an array of name_value_lists which contain the appropriate values
+ * which will allow the depot to check for updates
+ *
+ * @return array of name_value_lists of corresponding updates
+ */
+ function checkForUpdates($objects_to_check){
+ PackageManagerComm::initialize();
+ //check for fault
+ return $GLOBALS['SugarDepot']->call('depotCheckForUpdates', array('session_id' => $_SESSION['SugarDepotSessionID'], 'objects' => $objects_to_check));
+ }
+ /**
+ * Ping the server to determine if we have established proper communication
+ *
+ * @return true if we can communicate with the server and false otherwise
+ */
+ function isAlive(){
+ PackageManagerComm::initialize(false);
+
+ $status = $GLOBALS['SugarDepot']->call('sugarPing', array());
+ if(empty($status) || $GLOBALS['SugarDepot']->getError() || $status != ACTIVE_STATUS){
+ return false;
+ }else{
+ return true;
+ }
+ }
+ ////////// END: Base Functions for Communicating with the depot
+ ////////////////////////////////////////////////////////
+}
+
+?>
diff --git a/ModuleInstall/PackageManager/PackageManagerDisplay.php b/ModuleInstall/PackageManager/PackageManagerDisplay.php
new file mode 100644
index 00000000..096d38ae
--- /dev/null
+++ b/ModuleInstall/PackageManager/PackageManagerDisplay.php
@@ -0,0 +1,606 @@
+assign('FORM_1_PLACE_HOLDER', $form1);
+ $ss->assign('form_action', $form_action);
+ $ss->assign('hidden_fields', $hidden_fields);
+
+ $result = PackageManagerDisplay::getHeader();
+ $header_text = $result['text'];
+ $isAlive = $result['isAlive'];
+ $show_login = $result['show_login'];
+ $mi_errors = ModuleInstaller::getErrors();
+ $error_html = "";
+ if(!empty($mi_errors)){
+ $error_html = "";
+ foreach($mi_errors as $error){
+ $error_html .= "".$error." ";
+ }
+ $error_html .= " ";
+ }
+
+ $form2 = "";
+
+ $tree = null;
+ //if($isAlive){
+ $tree = PackageManagerDisplay::buildTreeView('treeview', $isAlive);
+ $tree->tree_style= 'include/ytree/TreeView/css/check/tree.css';
+ $ss->assign('TREEHEADER',$tree->generate_header());
+ //}
+ //$form2 .= PackageManagerDisplay::buildLoginPanel($mod_strings);
+ $form2 .= "";
+ $form2 = ''; //Commenting out the form as part of sugar depot hiding.
+ $ss->assign('installation', ($install ? 'true' : 'false'));
+
+
+ $mod_strings = return_module_language($current_language, "Administration");
+
+ $ss->assign('MOD', $mod_strings);
+ $ss->assign('module_load', 'true');
+ $ss->assign('scripts', PackageManagerDisplay::getDisplayScript($install));
+ $show_login = false; //hiding install from sugar
+ $ss->assign('MODULE_SELECTOR', PackageManagerDisplay::buildGridOutput($tree, $mod_strings, $isAlive, $show_login));
+ $ss->assign('FORM_2_PLACE_HOLDER', $form2);
+ $ss->assign('MOD', $mod_strings);
+ $descItemsInstalled = $mod_strings['LBL_UW_DESC_MODULES_INSTALLED'];
+ $ss->assign('INSTALLED_PACKAGES_HOLDER', PackageManagerDisplay::buildInstalledGrid($mod_strings, $types));
+
+ $str = $ss->fetch('ModuleInstall/PackageManager/tpls/PackageForm.tpl');
+ return $str;
+ }
+
+ /**
+ * A Static method to Build the display for the package manager
+ *
+ * @param String form1 - the form to display for manual downloading
+ * @param String hidden_fields - the hidden fields related to downloading a package
+ * @param String form_action - the form_action to be used when downloading from the server
+ * @param String types - the types of objects we will request from the server
+ * @param String active_form - the form to display first
+ * @return String - a string of html which will be used to display the forms
+ */
+ function buildPatchDisplay($form1, $hidden_fields, $form_action, $types = array('module'), $active_form = 'form1'){
+ global $current_language;
+ $mod_strings = return_module_language($current_language, "Administration");
+ $ss = new Sugar_Smarty();
+ $ss->assign('FORM_1_PLACE_HOLDER', $form1);
+ $ss->assign('form_action', $form_action);
+ $ss->assign('hidden_fields', $hidden_fields);
+ $mod_strings = return_module_language($current_language, "Administration");
+
+ $ss->assign('MOD', $mod_strings);
+ $result = PackageManagerDisplay::getHeader();
+ $header_text = $result['text'];
+ $isAlive = $result['isAlive'];
+ $show_login = $result['show_login'];
+ $display = 'none';
+ //if($isAlive){
+ $display = 'block';
+ //}
+ $form2 = "";
+ $form2 .= "";
+ if($show_login){
+ $form2 .= " ";
+ }
+ $form2 .= " ".SugarThemeRegistry::current()->getImage("sqsWait","border='0' align='bottom'")."
";
+ $loginViewStyle = ($isAlive ? 'none' : 'block');
+ $selectViewStyle = ($isAlive ? 'block' : 'none');
+ $form2 .= "";
+ $form2 .= "
";
+ $form2 .= "
";
+ if(!$show_login)
+ $loginViewStyle = 'none';
+ //$form2 .= "";
+ //$form2 .= PackageManagerDisplay::buildLoginPanel($mod_strings, $isAlive);
+ //$form2 .= "
";
+
+ $form2 .= "
";
+ $form2 = '';
+ $packages = array();
+ $releases = array();
+ if($isAlive){
+ $filter = array();
+ $count = count($types);
+ $index = 1;
+ $type_str = '"';
+ foreach($types as $type){
+ $type_str .= "'".$type."'";
+ if($index < $count)
+ $type_str .= ",";
+ $index++;
+ }
+ $type_str .= '"';
+ $filter = array('type' => $type_str);
+ $filter = PackageManager::toNameValueList($filter);
+ $pm = new PackageManager();
+ /*if(in_array('patch', $types)){
+ $releases = $pm->getReleases('3', '3', $filter);
+ }else{
+ $releases = $pm->getReleases('', '', $filter);
+ }*/
+ }
+ if($form_action == 'install.php' && (empty($releases) || count($releases['packages']) == 0)){
+ //return false;
+ }
+ $tree = PackageManagerDisplay::buildTreeView('treeview', $isAlive);
+ $tree->tree_style= 'include/ytree/TreeView/css/check/tree.css';
+ $ss->assign('TREEHEADER',$tree->generate_header());
+ $ss->assign('module_load', 'false');
+ $ss->assign('MODULE_SELECTOR', PackageManagerDisplay::buildGridOutput($tree, $mod_strings, $isAlive, $show_login));
+ $ss->assign('FORM_2_PLACE_HOLDER', $form2);
+ $ss->assign('scripts', PackageManagerDisplay::getDisplayScript(false, 'patch', $releases, $types, $isAlive));
+ $str = $ss->fetch('ModuleInstall/PackageManager/tpls/PackageForm.tpl');
+ return $str;
+ }
+
+ function buildInstalledGrid($mod_strings, $types = array('modules')){
+ $descItemsInstalled = $mod_strings['LBL_UW_DESC_MODULES_INSTALLED'];
+ $output = ''.$descItemsInstalled.' ';
+ $output .= '
';
+ $output .= "";
+ return $output;
+ }
+
+ function buildLoginPanel($mod_strings, $display_cancel){
+ $credentials = PackageManager::getCredentials();
+ $output = "".$mod_strings['HDR_LOGIN_PANEL']."
";
+ $output .= "
";
+ $output .= "
";
+ return $output;
+ }
+
+ /**
+ * Build html in order to display the grids relevant for module loader
+ *
+ * @param Tree tree - the tree which we are using to display the categories
+ * @param Array mod_strings - the local mod strings to display
+ * @return String - a string of html
+ */
+ function buildGridOutput($tree, $mod_strings, $display = true, $show_login = true){
+ $output = "";
+ $loginViewStyle = ($display ? 'none' : 'block');
+ $selectViewStyle = ($display ? 'block' : 'none');
+ $output .= "
";
+ //if($display){
+ $output .= "
";
+ // }
+ $output .= "
";
+ if(!$show_login)
+ $loginViewStyle = 'none';
+ // $output .= "
";
+ // jchi ,#24296 :commented code because we are currently not using depot, in the future this may change so you can put this code back in.
+ //$output .= PackageManagerDisplay::buildLoginPanel($mod_strings, $display);
+ //$output .= "
";
+ //$output .= "
";
+ $output .= "
";
+
+ return $output;
+ }
+
+ /**
+ * A Static method used to build the initial treeview when the page is first displayed
+ *
+ * @param String div_id - this div in which to display the tree
+ * @return Tree - the tree that is built
+ */
+ function buildTreeView($div_id, $isAlive = true){
+ $tree = new Tree($div_id);
+ $nodes = array();
+ if($isAlive)
+ $nodes = PackageManager::getCategories('');
+
+ foreach($nodes as $arr_node){
+ $node = new Node($arr_node['id'], $arr_node['label']);
+ $node->dynamicloadfunction = 'PackageManager.loadDataForNodeForPackage';
+ $node->expanded = false;
+ $node->dynamic_load = true;
+ $node->set_property('href',"javascript:PackageManager.catClick('treeview');");
+ $tree->add_node($node);
+ $node->set_property('description', $arr_node['description']);
+ }
+ return $tree;
+ }
+
+ /**
+ * A Static method used to obtain the div for the license
+ *
+ * @param String license_file - the path to the license file
+ * @param String form_action - the form action when accepting the license file
+ * @param String next_step - the value for the next step in the installation process
+ * @param String zipFile - a string representing the path to the zip file
+ * @param String type - module/patch....
+ * @param String manifest - the path to the manifest file
+ * @param String modify_field - the field to update when the radio button is changed
+ * @return String - a form used to display the license
+ */
+ function getLicenseDisplay($license_file, $form_action, $next_step, $zipFile, $type, $manifest, $modify_field){
+ global $current_language;
+ $mod_strings = return_module_language($current_language, "Administration");
+ $contents = sugar_file_get_contents($license_file);
+ $div_id = urlencode($zipFile);
+ $display = "";
+ $display .= " ";
+ $display .= " ";
+ $display .= " ";
+ $display .= " ";
+ $display .= "";
+ $display .= "";
+ $display .= "{$mod_strings['LBL_MODULE_LICENSE']} ";
+ $display .= " ";
+ $display .= "";
+ $display .= " Expand ";
+ $display .= "";
+ $display .= " ";
+ $display .= "
";
+ $display .= "";
+ $display .= "
";
+ $display .= "
";
+ $display .= " ";
+ return $display;
+ }
+
+ /**
+ * A Static method used to generate the javascript for the page
+ *
+ * @return String - the javascript required for the page
+ */
+ function getDisplayScript($install = false, $type = 'module', $releases = null, $types = array(), $isAlive = true){
+ global $sugar_version, $sugar_config;
+ global $current_language;
+
+ $mod_strings = return_module_language($current_language, "Administration");
+ $ss = new Sugar_Smarty();
+ $ss->assign('MOD', $mod_strings);
+ if(!$install){
+ $install = 0;
+ }
+ $ss->assign('INSTALLATION', $install);
+ $ss->assign('WAIT_IMAGE', SugarThemeRegistry::current()->getImage("loading","border='0' align='bottom'"));
+ $ss->assign('sugar_version', $sugar_version);
+ $ss->assign('js_custom_version', $sugar_config['js_custom_version']);
+ $ss->assign('IS_ALIVE', $isAlive);
+ //if($type == 'patch' && $releases != null){
+ if($type == 'patch'){
+ $ss->assign('module_load', 'false');
+ $patches = PackageManagerDisplay::createJavascriptPackageArray($releases);
+ $ss->assign('PATCHES', $patches);
+ $ss->assign('GRID_TYPE', implode(',', $types));
+ }else{
+ $pm = new PackageManager();
+ $releases = $pm->getPackagesInStaging();
+ $patches = PackageManagerDisplay::createJavascriptModuleArray($releases);
+ $ss->assign('PATCHES', $patches);
+ $installeds = $pm->getinstalledPackages();
+ $patches = PackageManagerDisplay::createJavascriptModuleArray($installeds, 'mti_installed_data');
+ $ss->assign('INSTALLED_MODULES', $patches);
+ $ss->assign('UPGARDE_WIZARD_URL', 'index.php?module=UpgradeWizard&action=index');
+ $ss->assign('module_load', 'true');
+ }
+ if(!empty($GLOBALS['ML_STATUS_MESSAGE']))
+ $ss->assign('ML_STATUS_MESSAGE',$GLOBALS['ML_STATUS_MESSAGE']);
+
+ //Bug 24064. Checking and Defining labels since these might not be cached during Upgrade
+ if(!isset($mod_strings['LBL_ML_INSTALL']) || empty($mod_strings['LBL_ML_INSTALL'])){
+ $mod_strings['LBL_ML_INSTALL'] = 'Install';
+ }
+ if(!isset($mod_strings['LBL_ML_ENABLE_OR_DISABLE']) || empty($mod_strings['LBL_ML_ENABLE_OR_DISABLE'])) {
+ $mod_strings['LBL_ML_ENABLE_OR_DISABLE'] = 'Enable/Disable';
+ }
+ if(!isset($mod_strings['LBL_ML_DELETE'])|| empty($mod_strings['LBL_ML_DELETE'])){
+ $mod_strings['LBL_ML_DELETE'] = 'Delete';
+ }
+ //Add by jchi 6/23/2008 to fix the bug 21667
+ $filegrid_column_ary = array(
+ 'Name' => $mod_strings['LBL_ML_NAME'],
+ 'Install' => $mod_strings['LBL_ML_INSTALL'],
+ 'Delete' => $mod_strings['LBL_ML_DELETE'],
+ 'Type' => $mod_strings['LBL_ML_TYPE'],
+ 'Version' => $mod_strings['LBL_ML_VERSION'],
+ 'Published' => $mod_strings['LBL_ML_PUBLISHED'],
+ 'Uninstallable' => $mod_strings['LBL_ML_UNINSTALLABLE'],
+ 'Description' => $mod_strings['LBL_ML_DESCRIPTION']
+ );
+
+ $filegridinstalled_column_ary = array(
+ 'Name' => $mod_strings['LBL_ML_NAME'],
+ 'Install' => $mod_strings['LBL_ML_INSTALL'],
+ 'Action' => $mod_strings['LBL_ML_ACTION'],
+ 'Enable_Or_Disable' => $mod_strings['LBL_ML_ENABLE_OR_DISABLE'],
+ 'Type' => $mod_strings['LBL_ML_TYPE'],
+ 'Version' => $mod_strings['LBL_ML_VERSION'],
+ 'Date_Installed' => $mod_strings['LBL_ML_INSTALLED'],
+ 'Uninstallable' => $mod_strings['LBL_ML_UNINSTALLABLE'],
+ 'Description' => $mod_strings['LBL_ML_DESCRIPTION']
+ );
+
+ $ss->assign('ML_FILEGRID_COLUMN',$filegrid_column_ary);
+ $ss->assign('ML_FILEGRIDINSTALLED_COLUMN',$filegridinstalled_column_ary);
+ //end
+
+ $str = $ss->fetch('ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl');
+ return $str;
+ }
+
+ function createJavascriptPackageArray($releases){
+ $output = "var mti_data = [";
+ $count = count($releases);
+ $index = 1;
+ if(!empty($releases['packages'])){
+ foreach($releases['packages'] as $release){
+ $release = PackageManager::fromNameValueList($release);
+ $output .= "[";
+ $output .= "'".$release['description']."', '".$release['version']."', '".$release['build_number']."', '".$release['id']."'";
+ $output .= "]";
+ if($index < $count)
+ $output .= ",";
+ $index++;
+ }
+ }
+ $output .= "]\n;";
+ return $output;
+ }
+
+ function createJavascriptModuleArray($modules, $variable_name = 'mti_data'){
+ $output = "var ".$variable_name." = [";
+ $count = count($modules);
+ $index = 1;
+ if(!empty($modules)){
+ foreach($modules as $module){
+ $output .= "[";
+ $output .= "'".$module['name']."', '".$module['file_install']."', '".$module['file']."', '";
+ if(!empty($module['enabled']))
+ $output .= $module['enabled'].'_'.$module['file']."', '";
+
+ $description = js_escape($module['description']);
+ $output .= $module['type']."', '".$module['version']."', '".$module['published_date']."', '".$module['uninstallable']."', '".$description."'".(isset($module['upload_file'])?" , '".$module['upload_file']."']":"]");
+ if($index < $count)
+ $output .= ",";
+ $index++;
+ }
+
+ }
+ $output .= "]\n;";
+ return $output;
+ }
+
+ /**
+ * This method is meant to be used to display the license agreement inline on the page
+ * if the system would like to perform the installation on the same page via an Ajax call
+ */
+ function buildLicenseOutput($file){
+ global $current_language;
+
+ $mod_strings = return_module_language($current_language, "Administration");
+ $contents = '';
+ $pm = new PackageManager();
+ $contents = $pm->getLicenseFromFile($file);
+ $ss = new Sugar_Smarty();
+ $ss->assign('MOD', $mod_strings);
+ $ss->assign('LICENSE_CONTENTS', $contents);
+ $ss->assign('FILE', $file);
+ $str = $ss->fetch('ModuleInstall/PackageManagerLicense.tpl');
+ $GLOBALS['log']->debug('LICENSE OUTPUT: '.$str);
+ return $str;
+ }
+
+ function getHeader(){
+ global $current_language;
+
+ $mod_strings = return_module_language($current_language, "Administration");
+ $header_text = '';
+ $isAlive = false;
+ $show_login = false;
+ if(!function_exists('curl_init') && $show_login){
+ $header_text = "".$mod_strings['ERR_ENABLE_CURL']." ";
+ $show_login = false;
+ }else{
+ $credentials = PackageManager::getCredentials();
+ if(empty($credentials['username']) || empty($credentials['password'])){
+ //$header_text = "".$mod_strings['ERR_CREDENTIALS_MISSING']." ";
+ }
+ else{
+ $result = PackageManagerComm::login();
+ if((is_array($result) && !empty($result['faultcode'])) || $result == false){
+ $header_text = "".$result['faultstring']." ";
+ }else{
+ $header_text = PackageManager::getPromotion();
+ $isAlive = true;
+ }
+ }
+ }
+ return array('text' => $header_text, 'isAlive' => $isAlive, 'show_login' => $show_login);
+ }
+
+ function buildInstallGrid($view){
+ $uh = new UpgradeHistory();
+ $installeds = $uh->getAll();
+ $upgrades_installed = 0;
+ $installed_objects = array();
+ foreach($installeds as $installed)
+ {
+ $filename = from_html($installed->filename);
+ $date_entered = $installed->date_entered;
+ $type = $installed->type;
+ $version = $installed->version;
+ $upgrades_installed++;
+ $link = "";
+
+ switch($type)
+ {
+ case "theme":
+ case "langpack":
+ case "module":
+ case "patch":
+ $manifest_file = extractManifest($filename);
+ require_once($manifest_file);
+
+ $name = empty($manifest['name']) ? $filename : $manifest['name'];
+ $description = empty($manifest['description']) ? $mod_strings['LBL_UW_NONE'] : $manifest['description'];
+ if(($upgrades_installed==0 || $uh->UninstallAvailable($installeds, $installed))
+ && is_file($filename) && !empty($manifest['is_uninstallable']))
+ {
+ $link = urlencode( $filename );
+ }
+ else
+ {
+ $link = 'false';
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ if($view == 'default' && $type != 'patch')
+ {
+ continue;
+ }
+
+ if($view == 'module'
+ && $type != 'module' && $type != 'theme' && $type != 'langpack')
+ {
+ continue;
+ }
+
+ $target_manifest = remove_file_extension( $filename ) . "-manifest.php";
+ require_once( "$target_manifest" );
+
+ if(isset($manifest['icon']) && $manifest['icon'] != "")
+ {
+ $manifest_copy_files_to_dir = isset($manifest['copy_files']['to_dir']) ? clean_path($manifest['copy_files']['to_dir']) : "";
+ $manifest_copy_files_from_dir = isset($manifest['copy_files']['from_dir']) ? clean_path($manifest['copy_files']['from_dir']) : "";
+ $manifest_icon = clean_path($manifest['icon']);
+ $icon = " ";
+ }
+ else
+ {
+ $icon = getImageForType( $manifest['type'] );
+ }
+ $installed_objects[] = array('icon' => $icon, 'name' => $name, 'type' => $type, 'version' => $version, 'date_entered' => $date_entered, 'description' => $description, 'file' => $link);
+ //print( "\n" );
+ //print( "$icon $name $type $version $date_entered $description $link \n" );
+ //print( " \n" );
+ }
+ }
+ }
+?>
diff --git a/ModuleInstall/PackageManager/PackageManagerDownloader.php b/ModuleInstall/PackageManager/PackageManagerDownloader.php
new file mode 100644
index 00000000..16a816a3
--- /dev/null
+++ b/ModuleInstall/PackageManager/PackageManagerDownloader.php
@@ -0,0 +1,72 @@
+
\ No newline at end of file
diff --git a/ModuleInstall/PackageManager/metadata/listviewdefs.php b/ModuleInstall/PackageManager/metadata/listviewdefs.php
new file mode 100644
index 00000000..a3fbb136
--- /dev/null
+++ b/ModuleInstall/PackageManager/metadata/listviewdefs.php
@@ -0,0 +1,64 @@
+ array(
+ 'width' => '5',
+ 'label' => 'LBL_LIST_NAME',
+ 'link' => false,
+ 'default' => true,
+ 'show' => true),
+ 'description' => array(
+ 'width' => '32',
+ 'label' => 'LBL_ML_DESCRIPTION',
+ 'default' => true,
+ 'link' => false,
+ 'show' => true),
+);
+
+$listViewDefs['module_loader']['releases'] = array(
+ 'description' => array(
+ 'width' => '32',
+ 'label' => 'LBL_LIST_SUBJECT',
+ 'default' => true,
+ 'link' => false),
+ 'version' => array(
+ 'width' => '32',
+ 'label' => 'LBL_LIST_SUBJECT',
+ 'default' => true,
+ 'link' => false),
+);
+?>
diff --git a/ModuleInstall/PackageManager/tpls/ModuleLoaderListView.tpl b/ModuleInstall/PackageManager/tpls/ModuleLoaderListView.tpl
new file mode 100644
index 00000000..40f4f9f3
--- /dev/null
+++ b/ModuleInstall/PackageManager/tpls/ModuleLoaderListView.tpl
@@ -0,0 +1,97 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+
+*}
+
+
+
+ {counter start=0 name="colCounter" print=false assign="colCounter"}
+ view/hide
+ {foreach from=$displayColumns key=colHeader item=params}
+ {if $params.show}
+
+
+ {sugar_translate label=$params.label module='Administration'}
+
+
+ {/if}
+ {counter name="colCounter"}
+ {/foreach}
+ Select
+
+ {foreach name=rowIteration from=$data key=package_id item=package}
+ {if $smarty.foreach.rowIteration.iteration is odd}
+ {assign var='_bgColor' value=$bgColor[0]}
+ {assign var='_rowColor' value=$rowColor[0]}
+ {else}
+ {assign var='_bgColor' value=$bgColor[1]}
+ {assign var='_rowColor' value=$rowColor[1]}
+ {/if}
+
+
+
+ {counter start=0 name="colCounter" print=false assign="colCounter"}
+ {foreach from=$displayColumns key=col item=params}
+
+ {if $params.show}
+ {$package.$col}
+ {/if}
+
+
+ {counter name="colCounter"}
+ {/foreach}
+ Select
+
+
+ {foreach name=releaseIteration from=$package.releases key=release_id item=release}
+
+ {counter start=0 name="colCounter" print=false assign="colCounter"}
+ {foreach from=$secondaryDisplayColumns key=col item=params}
+
+ {$release.$col}
+
+
+ {counter name="colCounter"}
+ {/foreach}
+ Select
+
+ {/foreach}
+
+
+ {/foreach}
+
+
\ No newline at end of file
diff --git a/ModuleInstall/PackageManager/tpls/PackageForm.tpl b/ModuleInstall/PackageManager/tpls/PackageForm.tpl
new file mode 100644
index 00000000..3acf94e6
--- /dev/null
+++ b/ModuleInstall/PackageManager/tpls/PackageForm.tpl
@@ -0,0 +1,106 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+ *}
+{$scripts}
+{$TREEHEADER}
+{literal}
+
+
+{/literal}
+{$INSTALLED_PACKAGES_HOLDER}
+
+
+
+
+{$hidden_fields}
+
+{$FORM_2_PLACE_HOLDER}
+{$MODULE_SELECTOR}
+
+
+
+
+{$FORM_1_PLACE_HOLDER}
+
+
+{if $module_load == 'true'}
+
+
+{literal}
+{/literal}
+{/if}
+
+
+
diff --git a/ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl b/ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl
new file mode 100644
index 00000000..ad87d5cf
--- /dev/null
+++ b/ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl
@@ -0,0 +1,51 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+ *}
+
\ No newline at end of file
diff --git a/ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl b/ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl
new file mode 100644
index 00000000..907450bf
--- /dev/null
+++ b/ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl
@@ -0,0 +1,1085 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+
+{literal}
+
+{/literal}
diff --git a/SugarSecurity.php b/SugarSecurity.php
new file mode 100644
index 00000000..eacc9692
--- /dev/null
+++ b/SugarSecurity.php
@@ -0,0 +1,167 @@
+';
+ foreach($this->results as $result){
+ echo '' . nl2br($result) . ' ';
+ }
+ echo '';
+ }
+
+ function save($file=''){
+ $fp = fopen($file, 'a');
+ foreach($this->results as $result){
+ fwrite($fp , $result);
+ }
+ fclose($fp);
+ }
+
+ function scan($path= '.', $ext = '.php'){
+ $dir = dir($path);
+ while($entry = $dir->read()){
+ if(is_dir($path . '/' . $entry) && $entry != '.' && $entry != '..'){
+ $this->scan($path .'/' . $entry);
+ }
+ if(is_file($path . '/'. $entry) && substr($entry, strlen($entry) - strlen($ext), strlen($ext)) == $ext){
+ $contents = file_get_contents($path .'/'. $entry);
+ $this->scanContents($contents, $path .'/'. $entry);
+ }
+ }
+ }
+
+ function scanContents($contents){
+ return;
+ }
+
+
+}
+
+class ScanFileIncludes extends SugarSecure{
+ function scanContents($contents, $file){
+ $results = array();
+ $found = '';
+ /*preg_match_all("'(require_once\([^\)]*\\$[^\)]*\))'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+
+ $found .= "\n" . $result[0];
+ }
+ $results = array();
+ preg_match_all("'include_once\([^\)]*\\$[^\)]*\)'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+ $found .= "\n" . $result[0];
+ }
+ */
+ $results = array();
+ preg_match_all("'require\([^\)]*\\$[^\)]*\)'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+ $found .= "\n" . $result[0];
+ }
+ $results = array();
+ preg_match_all("'include\([^\)]*\\$[^\)]*\)'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+ $found .= "\n" . $result[0];
+ }
+ $results = array();
+ preg_match_all("'require_once\([^\)]*\\$[^\)]*\)'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+ $found .= "\n" . $result[0];
+ }
+ $results = array();
+ preg_match_all("'fopen\([^\)]*\\$[^\)]*\)'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+ $found .= "\n" . $result[0];
+ }
+ $results = array();
+ preg_match_all("'file_get_contents\([^\)]*\\$[^\)]*\)'si", $contents, $results, PREG_SET_ORDER);
+ foreach($results as $result){
+ $found .= "\n" . $result[0];
+ }
+ if(!empty($found)){
+ $this->results[] = $file . $found."\n\n";
+ }
+
+ }
+
+
+}
+
+
+
+class SugarSecureManager{
+ var $scanners = array();
+ function registerScan($class){
+ $this->scanners[] = new $class();
+ }
+
+ function scan(){
+
+ while($scanner = current($this->scanners)){
+ $scanner->scan();
+ $scanner = next($this->scanners);
+ }
+ reset($this->scanners);
+ }
+
+ function display(){
+
+ while($scanner = current($this->scanners)){
+ echo 'Scan Results: ';
+ $scanner->display();
+ $scanner = next($this->scanners);
+ }
+ reset($this->scanners);
+ }
+
+ function save(){
+ //reset($this->scanners);
+ $name = 'SugarSecure'. time() . '.txt';
+ while($this->scanners = next($this->scanners)){
+ $scanner->save($name);
+ }
+ }
+
+}
+$secure = new SugarSecureManager();
+$secure->registerScan('ScanFileIncludes');
+$secure->scan();
+$secure->display();
\ No newline at end of file
diff --git a/TreeData.php b/TreeData.php
new file mode 100644
index 00000000..9ba25da9
--- /dev/null
+++ b/TreeData.php
@@ -0,0 +1,146 @@
+debug("TreeData:session started");
+$current_language = $GLOBALS['current_language'];
+
+//process request parameters. consider following parameters.
+//function, and all parameters prefixed with PARAM.
+//PARAMT_ are tree level parameters.
+//PARAMN_ are node level parameters.
+//module name and function name parameters are the only ones consumed
+//by this file..
+foreach ($_REQUEST as $key=>$value) {
+
+ switch ($key) {
+
+ case "function":
+ case "call_back_function":
+ $func_name=$value;
+ $params1['TREE']['function']=$value;
+ break;
+
+ default:
+ $pssplit=explode('_',$key);
+ if ($pssplit[0] =='PARAMT') {
+ unset($pssplit[0]);
+ $params1['TREE'][implode('_',$pssplit)]=$value;
+ } else {
+ if ($pssplit[0] =='PARAMN') {
+ $depth=$pssplit[count($pssplit)-1];
+ //parmeter is surrounded by PARAMN_ and depth info.
+ unset($pssplit[count($pssplit)-1]);unset($pssplit[0]);
+ $params1['NODES'][$depth][implode('_',$pssplit)]=$value;
+ } else {
+ if ($key=='module') {
+ if (!isset($params1['TREE']['module'])) {
+ $params1['TREE'][$key]=$value;
+ }
+ } else {
+ $params1['REQUEST'][$key]=$value;
+ }
+ }
+ }
+ }
+}
+$modulename=$params1['TREE']['module']; ///module is a required parameter for the tree.
+require('include/modules.php');
+if (!empty($modulename) && !empty($func_name) && isset($beanList[$modulename]) ) {
+ require_once('modules/'.$modulename.'/TreeData.php');
+ $TreeDataFunctions = array(
+ 'ProductTemplates' => array('get_node_data'=>'','get_categories_and_products'=>''),
+ 'ProductCategories' => array('get_node_data'=>'','get_product_categories'=>''),
+ 'KBTags' => array(
+ 'get_node_data'=>'',
+ 'get_tags_nodes'=>'',
+ 'get_tags_nodes_cached'=>'',
+ 'childNodes'=>'',
+ 'get_searched_tags_nodes'=>'',
+ 'find_peers'=>'',
+ 'getRootNode'=>'',
+ 'getParentNode'=>'',
+ 'get_tags_modal_nodes'=>'',
+ 'get_admin_browse_articles'=>'',
+ 'tagged_documents_count'=>'',
+ 'tag_count'=>'',
+ 'get_browse_documents'=>'',
+ 'get_tag_nodes_for_browsing'=>'',
+ 'create_browse_node'=>'',
+ 'untagged_documents_count'=>'',
+ 'check_tag_child_tags_for_articles'=>'',
+ 'childTagsHaveArticles'=>'',
+ ),
+ 'KBDocuments' => array(
+ 'get_node_data'=>'',
+ 'get_category_nodes'=>'',
+ 'get_documents'=>'',
+ ),
+ 'Forecasts' => array(
+ 'get_node_data'=>'',
+ 'get_worksheet'=>'',
+ 'commit_forecast'=>'',
+ 'save_worksheet'=>'',
+ 'list_nav'=>'',
+ 'reset_worksheet'=>'',
+ 'get_chart'=>'',
+ ),
+ 'Documents' => array(
+ 'get_node_data'=>'',
+ 'get_category_nodes'=>'',
+ 'get_documents'=>'',
+ ),
+ );
+
+ if (isset($TreeDataFunctions[$modulename][$func_name])) {
+ $ret=call_user_func($func_name,$params1);
+ }
+}
+
+if (!empty($ret)) {
+ echo $ret;
+}
+
+?>
diff --git a/WebToLeadCapture.php b/WebToLeadCapture.php
new file mode 100644
index 00000000..c37fc5a7
--- /dev/null
+++ b/WebToLeadCapture.php
@@ -0,0 +1,47 @@
+
\ No newline at end of file
diff --git a/XTemplate/LICENSE b/XTemplate/LICENSE
new file mode 100644
index 00000000..551cb4ac
--- /dev/null
+++ b/XTemplate/LICENSE
@@ -0,0 +1,502 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ , 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/XTemplate/xtpl.php b/XTemplate/xtpl.php
new file mode 100644
index 00000000..3ce660fb
--- /dev/null
+++ b/XTemplate/xtpl.php
@@ -0,0 +1,567 @@
+ 14-march-2001
+ latest stable & CVS version always available @ http://sourceforge.net/projects/xtpl
+
+ tested with php 3.0.11 and 4.0.4pl1
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License
+ version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details at
+ http://www.gnu.org/copyleft/lgpl.html
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+*/
+
+/***[ variables ]***********************************************************/
+
+var $filecontents=""; /* raw contents of template file */
+var $blocks=array(); /* unparsed blocks */
+var $parsed_blocks=array(); /* parsed blocks */
+var $block_parse_order=array(); /* block parsing order for recursive parsing (sometimes reverse:) */
+var $sub_blocks=array(); /* store sub-block names for fast resetting */
+var $VARS=array(); /* variables array */
+var $alternate_include_directory = "";
+
+var $file_delim="/\{FILE\s*\"([^\"]+)\"\s*\}/m"; /* regexp for file includes */
+var $block_start_delim=""; /* block end delimiter */
+var $block_start_word="BEGIN:"; /* block start word */
+var $block_end_word="END:"; /* block end word */
+
+/* this makes the delimiters look like: if you use my syntax. */
+
+var $NULL_STRING=array(""=>""); /* null string for unassigned vars */
+var $NULL_BLOCK=array(""=>""); /* null string for unassigned blocks */
+var $mainblock="";
+var $ERROR="";
+var $AUTORESET=1; /* auto-reset sub blocks */
+
+/***[ constructor ]*********************************************************/
+
+function XTemplate ($file, $alt_include = "", $mainblock="main") {
+ $this->alternate_include_directory = $alt_include;
+ $this->mainblock=$mainblock;
+ $this->filecontents=$this->r_getfile($file); /* read in template file */
+ //if(substr_count($file, 'backup') == 1)_ppd($this->filecontents);
+ $this->blocks=$this->maketree($this->filecontents,$mainblock); /* preprocess some stuff */
+ //$this->scan_globals();
+}
+
+
+/***************************************************************************/
+/***[ public stuff ]********************************************************/
+/***************************************************************************/
+
+
+/***[ assign ]**************************************************************/
+/*
+ assign a variable
+*/
+
+function assign ($name,$val="") {
+ if (is_array($name)) {
+ foreach ($name as $k => $v) {
+ $this->VARS[$k] = $v;
+ }
+ } else {
+ $this->VARS[$name]=$val;
+ }
+}
+
+function append ($varname, $name,$val="") {
+ if(!isset($this->VARS[$varname])){
+ $this->VARS[$varname] = array();
+ }
+ if(is_array($this->VARS[$varname])){
+ $this->VARS[$varname][$name] = $val;
+ }
+}
+
+/***[ parse ]***************************************************************/
+/*
+ parse a block
+*/
+
+function parse ($bname) {
+ global $sugar_version, $sugar_config;
+
+ $this->assign('SUGAR_VERSION', $GLOBALS['js_version_key']);
+ $this->assign('JS_CUSTOM_VERSION', $sugar_config['js_custom_version']);
+
+ if(empty($this->blocks[$bname]))
+ return;
+
+ $copy=$this->blocks[$bname];
+ if (!isset($this->blocks[$bname]))
+ $this->set_error ("parse: blockname [$bname] does not exist");
+ preg_match_all("/\{([A-Za-z0-9\._]+?)}/",$this->blocks[$bname],$var_array);
+ $var_array=$var_array[1];
+ foreach ($var_array as $k => $v) {
+ $sub=explode(".",$v);
+ if ($sub[0]=="_BLOCK_") {
+ unset($sub[0]);
+ $bname2=implode(".",$sub);
+
+ if(isset($this->parsed_blocks[$bname2]))
+ {
+ $var=$this->parsed_blocks[$bname2];
+ }
+ else
+ {
+ $var = null;
+ }
+
+ $nul=(!isset($this->NULL_BLOCK[$bname2])) ? $this->NULL_BLOCK[""] : $this->NULL_BLOCK[$bname2];
+ $var=(empty($var))?$nul:trim($var);
+ // Commented out due to regular expression issue with '$' in replacement string.
+ //$copy=preg_replace("/\{".$v."\}/","$var",$copy);
+ // This should be faster and work better for '$'
+ $copy=str_replace("{".$v."}",$var,$copy);
+ } else {
+ $var=$this->VARS;
+
+ foreach ($sub as $k1 => $v1)
+ {
+ if(is_array($var) && isset($var[$v1]))
+ {
+ $var=$var[$v1];
+ }
+ else
+ {
+ $var = null;
+ }
+ }
+
+ $nul=(!isset($this->NULL_STRING[$v])) ? ($this->NULL_STRING[""]) : ($this->NULL_STRING[$v]);
+ $var=(!isset($var))?$nul:$var;
+ // Commented out due to regular expression issue with '$' in replacement string.
+ //$copy=preg_replace("/\{$v\}/","$var",$copy);
+ // This should be faster and work better for '$'
+
+ // this was periodically returning an array to string conversion error....
+ if(!is_array($var))
+ {
+ $copy=str_replace("{".$v."}",$var,$copy);
+ }
+ }
+ }
+
+ if(isset($this->parsed_blocks[$bname]))
+ {
+ $this->parsed_blocks[$bname].=$copy;
+ }
+ else
+ {
+ $this->parsed_blocks[$bname]=$copy;
+ }
+
+ // reset sub-blocks
+ if ($this->AUTORESET && (!empty($this->sub_blocks[$bname]))) {
+ reset($this->sub_blocks[$bname]);
+ foreach ($this->sub_blocks[$bname] as $v)
+ $this->reset($v);
+ }
+}
+
+/***[ exists ]**************************************************************/
+/*
+ returns true if a block exists otherwise returns false.
+*/
+function exists($bname){
+ return (!empty($this->parsed_blocks[$bname])) || (!empty($this->blocks[$bname]));
+}
+
+
+/***[ var_exists ]**************************************************************/
+/*
+ returns true if a block exists otherwise returns false.
+*/
+function var_exists($bname,$vname){
+ if(!empty($this->blocks[$bname])){
+ return substr_count($this->blocks[$bname], '{'. $vname . '}') >0;
+ }
+ return false;
+}
+
+
+/***[ rparse ]**************************************************************/
+/*
+ returns the parsed text for a block, including all sub-blocks.
+*/
+
+function rparse($bname) {
+ if (!empty($this->sub_blocks[$bname])) {
+ reset($this->sub_blocks[$bname]);
+ while (list($k,$v)=each($this->sub_blocks[$bname]))
+ if (!empty($v))
+ $this->rparse($v,$indent."\t");
+ }
+ $this->parse($bname);
+}
+
+/***[ insert_loop ]*********************************************************/
+/*
+ inserts a loop ( call assign & parse )
+*/
+
+function insert_loop($bname,$var,$value="") {
+ $this->assign($var,$value);
+ $this->parse($bname);
+}
+
+/***[ text ]****************************************************************/
+/*
+ returns the parsed text for a block
+*/
+
+function text($bname) {
+
+ if(!empty($this->parsed_blocks)){
+ return $this->parsed_blocks[isset($bname) ? $bname :$this->mainblock];
+ }else{
+ return '';
+ }
+}
+
+/***[ out ]*****************************************************************/
+/*
+ prints the parsed text
+*/
+
+function out ($bname) {
+ global $focus;
+
+ if(isset($focus)){
+ global $action;
+
+ if($focus && is_subclass_of($focus, 'SugarBean') && !$focus->ACLAccess($action)){
+
+ ACLController::displayNoAccess(true);
+
+ sugar_die('');
+ return;
+ }}
+
+ echo $this->text($bname);
+}
+
+/***[ reset ]***************************************************************/
+/*
+ resets the parsed text
+*/
+
+function reset ($bname) {
+ $this->parsed_blocks[$bname]="";
+}
+
+/***[ parsed ]**************************************************************/
+/*
+ returns true if block was parsed, false if not
+*/
+
+function parsed ($bname) {
+ return (!empty($this->parsed_blocks[$bname]));
+}
+
+/***[ SetNullString ]*******************************************************/
+/*
+ sets the string to replace in case the var was not assigned
+*/
+
+function SetNullString($str,$varname="") {
+ $this->NULL_STRING[$varname]=$str;
+}
+
+/***[ SetNullBlock ]********************************************************/
+/*
+ sets the string to replace in case the block was not parsed
+*/
+
+function SetNullBlock($str,$bname="") {
+ $this->NULL_BLOCK[$bname]=$str;
+}
+
+/***[ set_autoreset ]*******************************************************/
+/*
+ sets AUTORESET to 1. (default is 1)
+ if set to 1, parse() automatically resets the parsed blocks' sub blocks
+ (for multiple level blocks)
+*/
+
+function set_autoreset() {
+ $this->AUTORESET=1;
+}
+
+/***[ clear_autoreset ]*****************************************************/
+/*
+ sets AUTORESET to 0. (default is 1)
+ if set to 1, parse() automatically resets the parsed blocks' sub blocks
+ (for multiple level blocks)
+*/
+
+function clear_autoreset() {
+ $this->AUTORESET=0;
+}
+
+/***[ scan_globals ]********************************************************/
+/*
+ scans global variables
+*/
+
+function scan_globals() {
+ reset($GLOBALS);
+ while (list($k,$v)=each($GLOBALS))
+ $GLOB[$k]=$v;
+ $this->assign("PHP",$GLOB); /* access global variables as {PHP.HTTP_HOST} in your template! */
+}
+
+/******
+
+ WARNING
+ PUBLIC FUNCTIONS BELOW THIS LINE DIDN'T GET TESTED
+
+******/
+
+
+/***************************************************************************/
+/***[ private stuff ]*******************************************************/
+/***************************************************************************/
+
+/***[ maketree ]************************************************************/
+/*
+ generates the array containing to-be-parsed stuff:
+ $blocks["main"],$blocks["main.table"],$blocks["main.table.row"], etc.
+ also builds the reverse parse order.
+*/
+
+
+function maketree($con,$block) {
+ $con2=explode($this->block_start_delim,$con);
+ $level=0;
+ $block_names=array();
+ $blocks=array();
+ reset($con2);
+ while(list($k,$v)=each($con2)) {
+ $patt="($this->block_start_word|$this->block_end_word)\s*(\w+)\s*$this->block_end_delim(.*)";
+ if (preg_match_all("/$patt/ims",$v,$res, PREG_SET_ORDER)) {
+ // $res[0][1] = BEGIN or END
+ // $res[0][2] = block name
+ // $res[0][3] = kinda content
+ if ($res[0][1]==$this->block_start_word) {
+ $parent_name=implode(".",$block_names);
+ $block_names[++$level]=$res[0][2]; /* add one level - array("main","table","row")*/
+ $cur_block_name=implode(".",$block_names); /* make block name (main.table.row) */
+ $this->block_parse_order[]=$cur_block_name; /* build block parsing order (reverse) */
+
+ if(array_key_exists($cur_block_name, $blocks))
+ {
+ $blocks[$cur_block_name].=$res[0][3]; /* add contents */
+ }
+ else
+ {
+ $blocks[$cur_block_name]=$res[0][3]; /* add contents */
+ }
+
+ /* add {_BLOCK_.blockname} string to parent block */
+ if(array_key_exists($parent_name, $blocks))
+ {
+ $blocks[$parent_name].="{_BLOCK_.$cur_block_name}";
+ }
+ else
+ {
+ $blocks[$parent_name]="{_BLOCK_.$cur_block_name}";
+ }
+
+ $this->sub_blocks[$parent_name][]=$cur_block_name; /* store sub block names for autoresetting and recursive parsing */
+ $this->sub_blocks[$cur_block_name][]=""; /* store sub block names for autoresetting */
+ } else if ($res[0][1]==$this->block_end_word) {
+ unset($block_names[$level--]);
+ $parent_name=implode(".",$block_names);
+ $blocks[$parent_name].=$res[0][3]; /* add rest of block to parent block */
+ }
+ } else { /* no block delimiters found */
+ $index = implode(".",$block_names);
+ if(array_key_exists($index, $blocks))
+ {
+ $blocks[].=$this->block_start_delim.$v;
+ }
+ else
+ {
+ $blocks[]=$this->block_start_delim.$v;
+ }
+ }
+ }
+ return $blocks;
+}
+
+
+
+/***[ error stuff ]*********************************************************/
+/*
+ sets and gets error
+*/
+
+function get_error() {
+ return ($this->ERROR=="")?0:$this->ERROR;
+}
+
+
+function set_error($str) {
+ $this->ERROR=$str;
+}
+
+/***[ getfile ]*************************************************************/
+/*
+ returns the contents of a file
+*/
+
+function getfile($file) {
+ if (!isset($file)) {
+ $this->set_error("!isset file name!");
+ return "";
+ }
+
+ // Pick which folder we should include from
+ // Prefer the local directory, then try the theme directory.
+ if (!is_file($file))
+ $file = $this->alternate_include_directory.$file;
+
+ if(is_file($file))
+ {
+ $file_text=file_get_contents($file);
+
+ } else {
+ $this->set_error("[$file] does not exist");
+ $file_text="__XTemplate fatal error: file [$file] does not exist__ ";
+ }
+
+ return $file_text;
+}
+
+/***[ r_getfile ]***********************************************************/
+/*
+ recursively gets the content of a file with {FILE "filename.tpl"} directives
+*/
+
+
+function r_getfile($file) {
+ $text=$this->getfile($file);
+ while (preg_match($this->file_delim,$text,$res)) {
+ $text2=$this->getfile($res[1]);
+ $text=preg_replace("'".preg_quote($res[0])."'",$text2,$text);
+ }
+ return $text;
+}
+
+} /* end of XTemplate class. */
+
+?>
diff --git a/Zend/Crypt.php b/Zend/Crypt.php
new file mode 100644
index 00000000..a05d9e0a
--- /dev/null
+++ b/Zend/Crypt.php
@@ -0,0 +1,167 @@
+setPrime($prime);
+ $this->setGenerator($generator);
+ if ($privateKey !== null) {
+ $this->setPrivateKey($privateKey, $privateKeyType);
+ }
+ $this->setBigIntegerMath();
+ }
+
+ /**
+ * Generate own public key. If a private number has not already been
+ * set, one will be generated at this stage.
+ *
+ * @return Zend_Crypt_DiffieHellman
+ */
+ public function generateKeys()
+ {
+ if (function_exists('openssl_dh_compute_key') && self::$useOpenssl !== false) {
+ $details = array();
+ $details['p'] = $this->getPrime();
+ $details['g'] = $this->getGenerator();
+ if ($this->hasPrivateKey()) {
+ $details['priv_key'] = $this->getPrivateKey();
+ }
+ $opensslKeyResource = openssl_pkey_new( array('dh' => $details) );
+ $data = openssl_pkey_get_details($opensslKeyResource);
+ $this->setPrivateKey($data['dh']['priv_key'], self::BINARY);
+ $this->setPublicKey($data['dh']['pub_key'], self::BINARY);
+ } else {
+ // Private key is lazy generated in the absence of PHP 5.3's ext/openssl
+ $publicKey = $this->_math->powmod($this->getGenerator(), $this->getPrivateKey(), $this->getPrime());
+ $this->setPublicKey($publicKey);
+ }
+ return $this;
+ }
+
+ /**
+ * Setter for the value of the public number
+ *
+ * @param string $number
+ * @param string $type
+ * @return Zend_Crypt_DiffieHellman
+ */
+ public function setPublicKey($number, $type = self::NUMBER)
+ {
+ if ($type == self::BINARY) {
+ $number = $this->_math->fromBinary($number);
+ }
+ if (!preg_match("/^\d+$/", $number)) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('invalid parameter; not a positive natural number');
+ }
+ $this->_publicKey = (string) $number;
+ return $this;
+ }
+
+ /**
+ * Returns own public key for communication to the second party to this
+ * transaction.
+ *
+ * @param string $type
+ * @return string
+ */
+ public function getPublicKey($type = self::NUMBER)
+ {
+ if ($this->_publicKey === null) {
+ require_once 'Zend/Crypt/DiffieHellman/Exception.php';
+ throw new Zend_Crypt_DiffieHellman_Exception('A public key has not yet been generated using a prior call to generateKeys()');
+ }
+ if ($type == self::BINARY) {
+ return $this->_math->toBinary($this->_publicKey);
+ } elseif ($type == self::BTWOC) {
+ return $this->_math->btwoc($this->_math->toBinary($this->_publicKey));
+ }
+ return $this->_publicKey;
+ }
+
+ /**
+ * Compute the shared secret key based on the public key received from the
+ * the second party to this transaction. This should agree to the secret
+ * key the second party computes on our own public key.
+ * Once in agreement, the key is known to only to both parties.
+ * By default, the function expects the public key to be in binary form
+ * which is the typical format when being transmitted.
+ *
+ * If you need the binary form of the shared secret key, call
+ * getSharedSecretKey() with the optional parameter for Binary output.
+ *
+ * @param string $publicKey
+ * @param string $type
+ * @return mixed
+ */
+ public function computeSecretKey($publicKey, $type = self::NUMBER, $output = self::NUMBER)
+ {
+ if ($type == self::BINARY) {
+ $publicKey = $this->_math->fromBinary($publicKey);
+ }
+ if (!preg_match("/^\d+$/", $publicKey)) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('invalid parameter; not a positive natural number');
+ }
+ if (function_exists('openssl_dh_compute_key') && self::$useOpenssl !== false) {
+ $this->_secretKey = openssl_dh_compute_key($publicKey, $this->getPublicKey());
+ } else {
+ $this->_secretKey = $this->_math->powmod($publicKey, $this->getPrivateKey(), $this->getPrime());
+ }
+ return $this->getSharedSecretKey($output);
+ }
+
+ /**
+ * Return the computed shared secret key from the DiffieHellman transaction
+ *
+ * @param string $type
+ * @return string
+ */
+ public function getSharedSecretKey($type = self::NUMBER)
+ {
+ if (!isset($this->_secretKey)) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('A secret key has not yet been computed; call computeSecretKey()');
+ }
+ if ($type == self::BINARY) {
+ return $this->_math->toBinary($this->_secretKey);
+ } elseif ($type == self::BTWOC) {
+ return $this->_math->btwoc($this->_math->toBinary($this->_secretKey));
+ }
+ return $this->_secretKey;
+ }
+
+ /**
+ * Setter for the value of the prime number
+ *
+ * @param string $number
+ * @return Zend_Crypt_DiffieHellman
+ */
+ public function setPrime($number)
+ {
+ if (!preg_match("/^\d+$/", $number) || $number < 11) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('invalid parameter; not a positive natural number or too small: should be a large natural number prime');
+ }
+ $this->_prime = (string) $number;
+ return $this;
+ }
+
+ /**
+ * Getter for the value of the prime number
+ *
+ * @return string
+ */
+ public function getPrime()
+ {
+ if (!isset($this->_prime)) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('No prime number has been set');
+ }
+ return $this->_prime;
+ }
+
+
+ /**
+ * Setter for the value of the generator number
+ *
+ * @param string $number
+ * @return Zend_Crypt_DiffieHellman
+ */
+ public function setGenerator($number)
+ {
+ if (!preg_match("/^\d+$/", $number) || $number < 2) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('invalid parameter; not a positive natural number greater than 1');
+ }
+ $this->_generator = (string) $number;
+ return $this;
+ }
+
+ /**
+ * Getter for the value of the generator number
+ *
+ * @return string
+ */
+ public function getGenerator()
+ {
+ if (!isset($this->_generator)) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('No generator number has been set');
+ }
+ return $this->_generator;
+ }
+
+ /**
+ * Setter for the value of the private number
+ *
+ * @param string $number
+ * @param string $type
+ * @return Zend_Crypt_DiffieHellman
+ */
+ public function setPrivateKey($number, $type = self::NUMBER)
+ {
+ if ($type == self::BINARY) {
+ $number = $this->_math->fromBinary($number);
+ }
+ if (!preg_match("/^\d+$/", $number)) {
+ require_once('Zend/Crypt/DiffieHellman/Exception.php');
+ throw new Zend_Crypt_DiffieHellman_Exception('invalid parameter; not a positive natural number');
+ }
+ $this->_privateKey = (string) $number;
+ return $this;
+ }
+
+ /**
+ * Getter for the value of the private number
+ *
+ * @param string $type
+ * @return string
+ */
+ public function getPrivateKey($type = self::NUMBER)
+ {
+ if (!$this->hasPrivateKey()) {
+ $this->setPrivateKey($this->_generatePrivateKey(), self::BINARY);
+ }
+ if ($type == self::BINARY) {
+ return $this->_math->toBinary($this->_privateKey);
+ } elseif ($type == self::BTWOC) {
+ return $this->_math->btwoc($this->_math->toBinary($this->_privateKey));
+ }
+ return $this->_privateKey;
+ }
+
+ /**
+ * Check whether a private key currently exists.
+ *
+ * @return boolean
+ */
+ public function hasPrivateKey()
+ {
+ return isset($this->_privateKey);
+ }
+
+ /**
+ * Setter to pass an extension parameter which is used to create
+ * a specific BigInteger instance for a specific extension type.
+ * Allows manual setting of the class in case of an extension
+ * problem or bug.
+ *
+ * @param string $extension
+ * @return void
+ */
+ public function setBigIntegerMath($extension = null)
+ {
+ /**
+ * @see Zend_Crypt_Math
+ */
+ require_once 'Zend/Crypt/Math.php';
+ $this->_math = new Zend_Crypt_Math($extension);
+ }
+
+ /**
+ * In the event a private number/key has not been set by the user,
+ * or generated by ext/openssl, a best attempt will be made to
+ * generate a random key. Having a random number generator installed
+ * on linux/bsd is highly recommended! The alternative is not recommended
+ * for production unless without any other option.
+ *
+ * @return string
+ */
+ protected function _generatePrivateKey()
+ {
+ $rand = $this->_math->rand($this->getGenerator(), $this->getPrime());
+ return $rand;
+ }
+
+}
diff --git a/Zend/Crypt/DiffieHellman/Exception.php b/Zend/Crypt/DiffieHellman/Exception.php
new file mode 100644
index 00000000..a41b2165
--- /dev/null
+++ b/Zend/Crypt/DiffieHellman/Exception.php
@@ -0,0 +1,36 @@
+80 using internal algo)
+ * @todo Check if mhash() is a required alternative (will be PECL-only soon)
+ * @category Zend
+ * @package Zend_Crypt
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Crypt_Hmac extends Zend_Crypt
+{
+
+ /**
+ * The key to use for the hash
+ *
+ * @var string
+ */
+ protected static $_key = null;
+
+ /**
+ * pack() format to be used for current hashing method
+ *
+ * @var string
+ */
+ protected static $_packFormat = null;
+
+ /**
+ * Hashing algorithm; can be the md5/sha1 functions or any algorithm name
+ * listed in the output of PHP 5.1.2+ hash_algos().
+ *
+ * @var string
+ */
+ protected static $_hashAlgorithm = 'md5';
+
+ /**
+ * List of algorithms supported my mhash()
+ *
+ * @var array
+ */
+ protected static $_supportedMhashAlgorithms = array('adler32',' crc32', 'crc32b', 'gost',
+ 'haval128', 'haval160', 'haval192', 'haval256', 'md4', 'md5', 'ripemd160',
+ 'sha1', 'sha256', 'tiger', 'tiger128', 'tiger160');
+
+ /**
+ * Constants representing the output mode of the hash algorithm
+ */
+ const STRING = 'string';
+ const BINARY = 'binary';
+
+ /**
+ * Performs a HMAC computation given relevant details such as Key, Hashing
+ * algorithm, the data to compute MAC of, and an output format of String,
+ * Binary notation or BTWOC.
+ *
+ * @param string $key
+ * @param string $hash
+ * @param string $data
+ * @param string $output
+ * @param boolean $internal
+ * @return string
+ */
+ public static function compute($key, $hash, $data, $output = self::STRING)
+ {
+ // set the key
+ if (!isset($key) || empty($key)) {
+ require_once 'Zend/Crypt/Hmac/Exception.php';
+ throw new Zend_Crypt_Hmac_Exception('provided key is null or empty');
+ }
+ self::$_key = $key;
+
+ // set the hash
+ self::_setHashAlgorithm($hash);
+
+ // perform hashing and return
+ return self::_hash($data, $output);
+ }
+
+ /**
+ * Setter for the hash method.
+ *
+ * @param string $hash
+ * @return Zend_Crypt_Hmac
+ */
+ protected static function _setHashAlgorithm($hash)
+ {
+ if (!isset($hash) || empty($hash)) {
+ require_once 'Zend/Crypt/Hmac/Exception.php';
+ throw new Zend_Crypt_Hmac_Exception('provided hash string is null or empty');
+ }
+
+ $hash = strtolower($hash);
+ $hashSupported = false;
+
+ if (function_exists('hash_algos') && in_array($hash, hash_algos())) {
+ $hashSupported = true;
+ }
+
+ if ($hashSupported === false && function_exists('mhash') && in_array($hash, self::$_supportedAlgosMhash)) {
+ $hashSupported = true;
+ }
+
+ if ($hashSupported === false) {
+ require_once 'Zend/Crypt/Hmac/Exception.php';
+ throw new Zend_Crypt_Hmac_Exception('hash algorithm provided is not supported on this PHP installation; please enable the hash or mhash extensions');
+ }
+ self::$_hashAlgorithm = $hash;
+ }
+
+ /**
+ * Perform HMAC and return the keyed data
+ *
+ * @param string $data
+ * @param string $output
+ * @param bool $internal Option to not use hash() functions for testing
+ * @return string
+ */
+ protected static function _hash($data, $output = self::STRING, $internal = false)
+ {
+ if (function_exists('hash_hmac')) {
+ if ($output == self::BINARY) {
+ return hash_hmac(self::$_hashAlgorithm, $data, self::$_key, 1);
+ }
+ return hash_hmac(self::$_hashAlgorithm, $data, self::$_key);
+ }
+
+ if (function_exists('mhash')) {
+ if ($output == self::BINARY) {
+ return mhash(self::_getMhashDefinition(self::$_hashAlgorithm), $data, self::$_key);
+ }
+ $bin = mhash(self::_getMhashDefinition(self::$_hashAlgorithm), $data, self::$_key);
+ return bin2hex($bin);
+ }
+ }
+
+ /**
+ * Since MHASH accepts an integer constant representing the hash algorithm
+ * we need to make a small detour to get the correct integer matching our
+ * algorithm's name.
+ *
+ * @param string $hashAlgorithm
+ * @return integer
+ */
+ protected static function _getMhashDefinition($hashAlgorithm)
+ {
+ for ($i = 0; $i <= mhash_count(); $i++)
+ {
+ $types[mhash_get_hash_name($i)] = $i;
+ }
+ return $types[strtoupper($hashAlgorithm)];
+ }
+
+}
\ No newline at end of file
diff --git a/Zend/Crypt/Hmac/Exception.php b/Zend/Crypt/Hmac/Exception.php
new file mode 100644
index 00000000..2563c985
--- /dev/null
+++ b/Zend/Crypt/Hmac/Exception.php
@@ -0,0 +1,36 @@
+ 127) {
+ return "\x00" . $long;
+ }
+ return $long;
+ }
+
+ /**
+ * Translate a binary form into a big integer string
+ *
+ * @param string $binary
+ * @return string
+ */
+ public function fromBinary($binary) {
+ return $this->_math->binaryToInteger($binary);
+ }
+
+ /**
+ * Translate a big integer string into a binary form
+ *
+ * @param string $integer
+ * @return string
+ */
+ public function toBinary($integer)
+ {
+ return $this->_math->integerToBinary($integer);
+ }
+
+}
diff --git a/Zend/Crypt/Math/BigInteger.php b/Zend/Crypt/Math/BigInteger.php
new file mode 100644
index 00000000..e5c4427c
--- /dev/null
+++ b/Zend/Crypt/Math/BigInteger.php
@@ -0,0 +1,117 @@
+_loadAdapter($extension);
+ }
+
+ /**
+ * Redirect all public method calls to the wrapped extension object.
+ *
+ * @param string $methodName
+ * @param array $args
+ * @throws Zend_Crypt_Math_BigInteger_Exception
+ */
+ public function __call($methodName, $args)
+ {
+ if(!method_exists($this->_math, $methodName)) {
+ require_once 'Zend/Crypt/Math/BigInteger/Exception.php';
+ throw new Zend_Crypt_Math_BigInteger_Exception('invalid method call: ' . get_class($this->_math) . '::' . $methodName . '() does not exist');
+ }
+ return call_user_func_array(array($this->_math, $methodName), $args);
+ }
+
+ /**
+ * @param string $extension
+ * @throws Zend_Crypt_Math_BigInteger_Exception
+ */
+ protected function _loadAdapter($extension = null)
+ {
+ if ($extension === null) {
+ if (extension_loaded('gmp')) {
+ $extension = 'gmp';
+ //} elseif (extension_loaded('big_int')) {
+ // $extension = 'big_int';
+ } else {
+ $extension = 'bcmath';
+ }
+ }
+ if($extension == 'gmp' && extension_loaded('gmp')) {
+ require_once 'Zend/Crypt/Math/BigInteger/Gmp.php';
+ $this->_math = new Zend_Crypt_Math_BigInteger_Gmp();
+ //} elseif($extension == 'bigint' && extension_loaded('big_int')) {
+ // require_once 'Zend/Crypt_Math/BigInteger/Bigint.php';
+ // $this->_math = new Zend_Crypt_Math_BigInteger_Bigint();
+ } elseif ($extension == 'bcmath') {
+ require_once 'Zend/Crypt/Math/BigInteger/Bcmath.php';
+ $this->_math = new Zend_Crypt_Math_BigInteger_Bcmath();
+ } else {
+ require_once 'Zend/Crypt/Math/BigInteger/Exception.php';
+ throw new Zend_Crypt_Math_BigInteger_Exception($extension . ' big integer precision math support not detected');
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Zend/Crypt/Math/BigInteger/Bcmath.php b/Zend/Crypt/Math/BigInteger/Bcmath.php
new file mode 100644
index 00000000..0d83ffc5
--- /dev/null
+++ b/Zend/Crypt/Math/BigInteger/Bcmath.php
@@ -0,0 +1,203 @@
+ 0) {
+ $return = chr(bcmod($operand, 256)) . $return;
+ $operand = bcdiv($operand, 256);
+ }
+ if (ord($return[0]) > 127) {
+ $return = "\0" . $return;
+ }
+ return $return;
+ }
+
+ /**public function integerToBinary($operand)
+ {
+ $return = '';
+ while(bccomp($operand, '0')) {
+ $return .= chr(bcmod($operand, '256'));
+ $operand = bcdiv($operand, '256');
+ }
+ return $return;
+ }**/ // Prior version for referenced offset
+
+
+ public function hexToDecimal($operand)
+ {
+ $return = '0';
+ while(strlen($hex)) {
+ $hex = hexdec(substr($operand, 0, 4));
+ $dec = bcadd(bcmul($return, 65536), $hex);
+ $operand = substr($operand, 4);
+ }
+ return $return;
+ }
+
+}
\ No newline at end of file
diff --git a/Zend/Crypt/Math/BigInteger/Exception.php b/Zend/Crypt/Math/BigInteger/Exception.php
new file mode 100644
index 00000000..66fd8bc4
--- /dev/null
+++ b/Zend/Crypt/Math/BigInteger/Exception.php
@@ -0,0 +1,36 @@
+ '7') {
+ $bigInt = '00' . $bigInt;
+ }
+ $return = pack("H*", $bigInt);
+ return $return;
+ }
+
+
+ public function hexToDecimal($operand)
+ {
+ $return = '0';
+ while(strlen($hex)) {
+ $hex = hexdec(substr($operand, 0, 4));
+ $dec = gmp_add(gmp_mul($return, 65536), $hex);
+ $operand = substr($operand, 4);
+ }
+ return $return;
+ }
+
+}
\ No newline at end of file
diff --git a/Zend/Crypt/Math/BigInteger/Interface.php b/Zend/Crypt/Math/BigInteger/Interface.php
new file mode 100644
index 00000000..cf7aea10
--- /dev/null
+++ b/Zend/Crypt/Math/BigInteger/Interface.php
@@ -0,0 +1,51 @@
+setOptions($options);
+ }
+ }
+
+ public function setOptions(array $options)
+ {
+ if (isset($options['passPhrase'])) {
+ $this->_passPhrase = $options['passPhrase'];
+ }
+ foreach ($options as $option=>$value) {
+ switch ($option) {
+ case 'pemString':
+ $this->setPemString($value);
+ break;
+ case 'pemPath':
+ $this->setPemPath($value);
+ break;
+ case 'certificateString':
+ $this->setCertificateString($value);
+ break;
+ case 'certificatePath':
+ $this->setCertificatePath($value);
+ break;
+ case 'hashAlgorithm':
+ $this->setHashAlgorithm($value);
+ break;
+ }
+ }
+ }
+
+ public function getPrivateKey()
+ {
+ return $this->_privateKey;
+ }
+
+ public function getPublicKey()
+ {
+ return $this->_publicKey;
+ }
+
+ /**
+ * @param string $data
+ * @param Zend_Crypt_Rsa_Key_Private $privateKey
+ * @param string $format
+ * @return string
+ */
+ public function sign($data, Zend_Crypt_Rsa_Key_Private $privateKey = null, $format = null)
+ {
+ $signature = '';
+ if (isset($privateKey)) {
+ $opensslKeyResource = $privateKey->getOpensslKeyResource();
+ } else {
+ $opensslKeyResource = $this->_privateKey->getOpensslKeyResource();
+ }
+ $result = openssl_sign(
+ $data, $signature,
+ $opensslKeyResource,
+ $this->getHashAlgorithm()
+ );
+ if ($format == self::BASE64) {
+ return base64_encode($signature);
+ }
+ return $signature;
+ }
+
+ /**
+ * @param string $data
+ * @param string $signature
+ * @param string $format
+ * @return string
+ */
+ public function verifySignature($data, $signature, $format = null)
+ {
+ if ($format == self::BASE64) {
+ $signature = base64_decode($signature);
+ }
+ $result = openssl_verify($data, $signature,
+ $this->getPublicKey()->getOpensslKeyResource(),
+ $this->getHashAlgorithm());
+ return $result;
+ }
+
+ /**
+ * @param string $data
+ * @param Zend_Crypt_Rsa_Key $key
+ * @param string $format
+ * @return string
+ */
+ public function encrypt($data, Zend_Crypt_Rsa_Key $key, $format = null)
+ {
+ $encrypted = '';
+ $function = 'openssl_public_encrypt';
+ if ($key instanceof Zend_Crypt_Rsa_Key_Private) {
+ $function = 'openssl_private_encrypt';
+ }
+ $function($data, $encrypted, $key->getOpensslKeyResource());
+ if ($format == self::BASE64) {
+ return base64_encode($encrypted);
+ }
+ return $encrypted;
+ }
+
+ /**
+ * @param string $data
+ * @param Zend_Crypt_Rsa_Key $key
+ * @param string $format
+ * @return string
+ */
+ public function decrypt($data, Zend_Crypt_Rsa_Key $key, $format = null)
+ {
+ $decrypted = '';
+ if ($format == self::BASE64) {
+ $data = base64_decode($data);
+ }
+ $function = 'openssl_private_decrypt';
+ if ($key instanceof Zend_Crypt_Rsa_Key_Public) {
+ $function = 'openssl_public_decrypt';
+ }
+ $function($data, $decrypted, $key->getOpensslKeyResource());
+ return $decrypted;
+ }
+
+ public function generateKeys(array $configargs = null)
+ {
+ $config = null;
+ $passPhrase = null;
+ if ($configargs !== null) {
+ if (isset($configargs['passPhrase'])) {
+ $passPhrase = $configargs['passPhrase'];
+ unset($configargs['passPhrase']);
+ }
+ $config = $this->_parseConfigArgs($configargs);
+ }
+ $privateKey = null;
+ $publicKey = null;
+ $resource = openssl_pkey_new($config);
+ // above fails on PHP 5.3
+ openssl_pkey_export($resource, $private, $passPhrase);
+ $privateKey = new Zend_Crypt_Rsa_Key_Private($private, $passPhrase);
+ $details = openssl_pkey_get_details($resource);
+ $publicKey = new Zend_Crypt_Rsa_Key_Public($details['key']);
+ $return = new ArrayObject(array(
+ 'privateKey'=>$privateKey,
+ 'publicKey'=>$publicKey
+ ), ArrayObject::ARRAY_AS_PROPS);
+ return $return;
+ }
+
+ /**
+ * @param string $value
+ */
+ public function setPemString($value)
+ {
+ $this->_pemString = $value;
+ try {
+ $this->_privateKey = new Zend_Crypt_Rsa_Key_Private($this->_pemString, $this->_passPhrase);
+ $this->_publicKey = $this->_privateKey->getPublicKey();
+ } catch (Zend_Crypt_Exception $e) {
+ $this->_privateKey = null;
+ $this->_publicKey = new Zend_Crypt_Rsa_Key_Public($this->_pemString);
+ }
+ }
+
+ public function setPemPath($value)
+ {
+ $this->_pemPath = $value;
+ $this->setPemString(file_get_contents($this->_pemPath));
+ }
+
+ public function setCertificateString($value)
+ {
+ $this->_certificateString = $value;
+ $this->_publicKey = new Zend_Crypt_Rsa_Key_Public($this->_certificateString, $this->_passPhrase);
+ }
+
+ public function setCertificatePath($value)
+ {
+ $this->_certificatePath = $value;
+ $this->setCertificateString(file_get_contents($this->_certificatePath));
+ }
+
+ public function setHashAlgorithm($name)
+ {
+ switch (strtolower($name)) {
+ case 'md2':
+ $this->_hashAlgorithm = OPENSSL_ALGO_MD2;
+ break;
+ case 'md4':
+ $this->_hashAlgorithm = OPENSSL_ALGO_MD4;
+ break;
+ case 'md5':
+ $this->_hashAlgorithm = OPENSSL_ALGO_MD5;
+ break;
+ case 'sha1':
+ $this->_hashAlgorithm = OPENSSL_ALGO_SHA1;
+ break;
+ case 'dss1':
+ $this->_hashAlgorithm = OPENSSL_ALGO_DSS1;
+ break;
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getPemString()
+ {
+ return $this->_pemString;
+ }
+
+ public function getPemPath()
+ {
+ return $this->_pemPath;
+ }
+
+ public function getCertificateString()
+ {
+ return $this->_certificateString;
+ }
+
+ public function getCertificatePath()
+ {
+ return $this->_certificatePath;
+ }
+
+ public function getHashAlgorithm()
+ {
+ return $this->_hashAlgorithm;
+ }
+
+ protected function _parseConfigArgs(array $config = null)
+ {
+ $configs = array();
+ if (isset($config['privateKeyBits'])) {
+ $configs['private_key_bits'] = $config['privateKeyBits'];
+ }
+ if (!empty($configs)) {
+ return $configs;
+ }
+ return null;
+ }
+
+}
diff --git a/Zend/Crypt/Rsa/Key.php b/Zend/Crypt/Rsa/Key.php
new file mode 100644
index 00000000..9b18abe4
--- /dev/null
+++ b/Zend/Crypt/Rsa/Key.php
@@ -0,0 +1,95 @@
+_opensslKeyResource;
+ }
+
+ /**
+ * @return string
+ * @throws Zend_Crypt_Exception
+ */
+ public function toString()
+ {
+ if (!empty($this->_pemString)) {
+ return $this->_pemString;
+ } elseif (!empty($this->_certificateString)) {
+ return $this->_certificateString;
+ }
+ /**
+ * @see Zend_Crypt_Exception
+ */
+ require_once 'Zend/Crypt/Exception.php';
+ throw new Zend_Crypt_Exception('No public key string representation is available');
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->toString();
+ }
+
+ public function count()
+ {
+ return $this->_details['bits'];
+ }
+
+ public function getType()
+ {
+ return $this->_details['type'];
+ }
+}
\ No newline at end of file
diff --git a/Zend/Crypt/Rsa/Key/Private.php b/Zend/Crypt/Rsa/Key/Private.php
new file mode 100644
index 00000000..560ac8df
--- /dev/null
+++ b/Zend/Crypt/Rsa/Key/Private.php
@@ -0,0 +1,75 @@
+_pemString = $pemString;
+ $this->_parse($passPhrase);
+ }
+
+ /**
+ * @param string $passPhrase
+ * @throws Zend_Crypt_Exception
+ */
+ protected function _parse($passPhrase)
+ {
+ $result = openssl_get_privatekey($this->_pemString, $passPhrase);
+ if (!$result) {
+ /**
+ * @see Zend_Crypt_Exception
+ */
+ require_once 'Zend/Crypt/Exception.php';
+ throw new Zend_Crypt_Exception('Unable to load private key');
+ }
+ $this->_opensslKeyResource = $result;
+ $this->_details = openssl_pkey_get_details($this->_opensslKeyResource);
+ }
+
+ public function getPublicKey()
+ {
+ if ($this->_publicKey === null) {
+ /**
+ * @see Zend_Crypt_Rsa_Key_Public
+ */
+ require_once 'Zend/Crypt/Rsa/Key/Public.php';
+ $this->_publicKey = new Zend_Crypt_Rsa_Key_Public($this->_details['key']);
+ }
+ return $this->_publicKey;
+ }
+
+}
\ No newline at end of file
diff --git a/Zend/Crypt/Rsa/Key/Public.php b/Zend/Crypt/Rsa/Key/Public.php
new file mode 100644
index 00000000..c07bd5e1
--- /dev/null
+++ b/Zend/Crypt/Rsa/Key/Public.php
@@ -0,0 +1,74 @@
+_parse($string);
+ }
+
+ /**
+ * @param string $string
+ * @throws Zend_Crypt_Exception
+ */
+ protected function _parse($string)
+ {
+ if (preg_match("/^-----BEGIN CERTIFICATE-----/", $string)) {
+ $this->_certificateString = $string;
+ } else {
+ $this->_pemString = $string;
+ }
+ $result = openssl_get_publickey($string);
+ if (!$result) {
+ /**
+ * @see Zend_Crypt_Exception
+ */
+ require_once 'Zend/Crypt/Exception.php';
+ throw new Zend_Crypt_Exception('Unable to load public key');
+ }
+ //openssl_pkey_export($result, $public);
+ //$this->_pemString = $public;
+ $this->_opensslKeyResource = $result;
+ $this->_details = openssl_pkey_get_details($this->_opensslKeyResource);
+ }
+
+ public function getCertificate()
+ {
+ return $this->_certificateString;
+ }
+
+}
\ No newline at end of file
diff --git a/Zend/Exception.php b/Zend/Exception.php
new file mode 100644
index 00000000..bbfb792e
--- /dev/null
+++ b/Zend/Exception.php
@@ -0,0 +1,95 @@
+_previous = $previous;
+ } else {
+ parent::__construct($msg, (int) $code, $previous);
+ }
+ }
+
+ /**
+ * Overloading
+ *
+ * For PHP < 5.3.0, provides access to the getPrevious() method.
+ *
+ * @param string $method
+ * @param array $args
+ * @return mixed
+ */
+ public function __call($method, array $args)
+ {
+ if ('getprevious' == strtolower($method)) {
+ return $this->_getPrevious();
+ }
+ return null;
+ }
+
+ /**
+ * String representation of the exception
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<')) {
+ if (null !== ($e = $this->getPrevious())) {
+ return $e->__toString()
+ . "\n\nNext "
+ . parent::__toString();
+ }
+ }
+ return parent::__toString();
+ }
+
+ /**
+ * Returns previous Exception
+ *
+ * @return Exception|null
+ */
+ protected function _getPrevious()
+ {
+ return $this->_previous;
+ }
+}
diff --git a/Zend/Gdata.php b/Zend/Gdata.php
new file mode 100644
index 00000000..0f864480
--- /dev/null
+++ b/Zend/Gdata.php
@@ -0,0 +1,241 @@
+decodeRequest('GET', $uri);
+ $response = $app->performHttpRequest($requestData['method'], $requestData['url']);
+
+ $feedContent = $response->getBody();
+
+ $feed = self::importString($feedContent, $className);
+ if ($client != null) {
+ $feed->setHttpClient($client);
+ }
+ return $feed;
+ }
+
+ /**
+ * Retrieve feed as string or object
+ *
+ * @param mixed $location The location as string or Zend_Gdata_Query
+ * @param string $className The class type to use for returning the feed
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getFeed($location, $className='Zend_Gdata_Feed')
+ {
+ if (is_string($location)) {
+ $uri = $location;
+ } elseif ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the location as either a string URI ' .
+ 'or a child of Zend_Gdata_Query');
+ }
+ return parent::getFeed($uri, $className);
+ }
+
+ /**
+ * Retrieve entry as string or object
+ *
+ * @param mixed $location The location as string or Zend_Gdata_Query
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return string|Zend_Gdata_App_Entry Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getEntry($location, $className='Zend_Gdata_Entry')
+ {
+ if (is_string($location)) {
+ $uri = $location;
+ } elseif ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the location as either a string URI ' .
+ 'or a child of Zend_Gdata_Query');
+ }
+ return parent::getEntry($uri, $className);
+ }
+
+ /**
+ * Performs a HTTP request using the specified method.
+ *
+ * Overrides the definition in the parent (Zend_Gdata_App)
+ * and uses the Zend_Gdata_HttpClient functionality
+ * to filter the HTTP requests and responses.
+ *
+ * @param string $method The HTTP method for the request -
+ * 'GET', 'POST', 'PUT', 'DELETE'
+ * @param string $url The URL to which this request is being performed,
+ * or null if found in $data
+ * @param array $headers An associative array of HTTP headers
+ * for this request
+ * @param string $body The body of the HTTP request
+ * @param string $contentType The value for the content type of the
+ * request body
+ * @param int $remainingRedirects Number of redirects to follow
+ * if requests results in one
+ * @return Zend_Http_Response The response object
+ */
+ public function performHttpRequest($method, $url, $headers = array(), $body = null, $contentType = null, $remainingRedirects = null)
+ {
+ if ($this->_httpClient instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $this->_httpClient->filterHttpRequest($method, $url, $headers, $body, $contentType);
+ $method = $filterResult['method'];
+ $url = $filterResult['url'];
+ $body = $filterResult['body'];
+ $headers = $filterResult['headers'];
+ $contentType = $filterResult['contentType'];
+ return $this->_httpClient->filterHttpResponse(parent::performHttpRequest($method, $url, $headers, $body, $contentType, $remainingRedirects));
+ } else {
+ return parent::performHttpRequest($method, $url, $headers, $body, $contentType, $remainingRedirects);
+ }
+ }
+
+ /**
+ * Determines whether service object is authenticated.
+ *
+ * @return boolean True if service object is authenticated, false otherwise.
+ */
+ public function isAuthenticated()
+ {
+ $client = parent::getHttpClient();
+ if ($client->getClientLoginToken() ||
+ $client->getAuthSubToken()) {
+ return true;
+ }
+
+ return false;
+ }
+
+}
diff --git a/Zend/Gdata/App.php b/Zend/Gdata/App.php
new file mode 100644
index 00000000..db519938
--- /dev/null
+++ b/Zend/Gdata/App.php
@@ -0,0 +1,1234 @@
+= 1 is considered valid.
+ *
+ * Under most circumtances, this will be automatically set by
+ * Zend_Gdata_App subclasses.
+ *
+ * @see setMajorProtocolVersion()
+ * @see getMajorProtocolVersion()
+ */
+ protected $_majorProtocolVersion;
+
+ /**
+ * Indicates the minor protocol version that should be used. Can be set
+ * to either an integer >= 0, or NULL if no minor version should be sent
+ * to the server.
+ *
+ * At present, this field is not used by any Google services, but may be
+ * used in the future.
+ *
+ * Under most circumtances, this will be automatically set by
+ * Zend_Gdata_App subclasses.
+ *
+ * @see setMinorProtocolVersion()
+ * @see getMinorProtocolVersion()
+ */
+ protected $_minorProtocolVersion;
+
+ /**
+ * Whether we want to use XML to object mapping when fetching data.
+ *
+ * @var boolean
+ */
+ protected $_useObjectMapping = true;
+
+ /**
+ * Create Gdata object
+ *
+ * @param Zend_Http_Client $client
+ * @param string $applicationId
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->setHttpClient($client, $applicationId);
+ // Set default protocol version. Subclasses should override this as
+ // needed once a given service supports a new version.
+ $this->setMajorProtocolVersion(self::DEFAULT_MAJOR_PROTOCOL_VERSION);
+ $this->setMinorProtocolVersion(self::DEFAULT_MINOR_PROTOCOL_VERSION);
+ }
+
+ /**
+ * Adds a Zend Framework package to the $_registeredPackages array.
+ * This array is searched when using the magic __call method below
+ * to instantiante new objects.
+ *
+ * @param string $name The name of the package (eg Zend_Gdata_App)
+ * @return void
+ */
+ public function registerPackage($name)
+ {
+ array_unshift($this->_registeredPackages, $name);
+ }
+
+ /**
+ * Retrieve feed as string or object
+ *
+ * @param string $uri The uri from which to retrieve the feed
+ * @param string $className The class which is used as the return type
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getFeed($uri, $className='Zend_Gdata_App_Feed')
+ {
+ return $this->importUrl($uri, $className, null);
+ }
+
+ /**
+ * Retrieve entry as string or object
+ *
+ * @param string $uri
+ * @param string $className The class which is used as the return type
+ * @return string|Zend_Gdata_App_Entry Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getEntry($uri, $className='Zend_Gdata_App_Entry')
+ {
+ return $this->importUrl($uri, $className, null);
+ }
+
+ /**
+ * Get the Zend_Http_Client object used for communication
+ *
+ * @return Zend_Http_Client
+ */
+ public function getHttpClient()
+ {
+ return $this->_httpClient;
+ }
+
+ /**
+ * Set the Zend_Http_Client object used for communication
+ *
+ * @param Zend_Http_Client $client The client to use for communication
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_App Provides a fluent interface
+ */
+ public function setHttpClient($client,
+ $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ if ($client === null) {
+ $client = new Zend_Http_Client();
+ }
+ if (!$client instanceof Zend_Http_Client) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Argument is not an instance of Zend_Http_Client.');
+ }
+ $userAgent = $applicationId . ' Zend_Framework_Gdata/' .
+ Zend_Version::VERSION;
+ $client->setHeaders('User-Agent', $userAgent);
+ $client->setConfig(array(
+ 'strictredirects' => true
+ )
+ );
+ $this->_httpClient = $client;
+ self::setStaticHttpClient($client);
+ return $this;
+ }
+
+ /**
+ * Set the static HTTP client instance
+ *
+ * Sets the static HTTP client object to use for retrieving the feed.
+ *
+ * @param Zend_Http_Client $httpClient
+ * @return void
+ */
+ public static function setStaticHttpClient(Zend_Http_Client $httpClient)
+ {
+ self::$_staticHttpClient = $httpClient;
+ }
+
+
+ /**
+ * Gets the HTTP client object. If none is set, a new Zend_Http_Client will be used.
+ *
+ * @return Zend_Http_Client
+ */
+ public static function getStaticHttpClient()
+ {
+ if (!self::$_staticHttpClient instanceof Zend_Http_Client) {
+ $client = new Zend_Http_Client();
+ $userAgent = 'Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setHeaders('User-Agent', $userAgent);
+ $client->setConfig(array(
+ 'strictredirects' => true
+ )
+ );
+ self::$_staticHttpClient = $client;
+ }
+ return self::$_staticHttpClient;
+ }
+
+ /**
+ * Toggle using POST instead of PUT and DELETE HTTP methods
+ *
+ * Some feed implementations do not accept PUT and DELETE HTTP
+ * methods, or they can't be used because of proxies or other
+ * measures. This allows turning on using POST where PUT and
+ * DELETE would normally be used; in addition, an
+ * X-Method-Override header will be sent with a value of PUT or
+ * DELETE as appropriate.
+ *
+ * @param boolean $override Whether to override PUT and DELETE with POST.
+ * @return void
+ */
+ public static function setHttpMethodOverride($override = true)
+ {
+ self::$_httpMethodOverride = $override;
+ }
+
+ /**
+ * Get the HTTP override state
+ *
+ * @return boolean
+ */
+ public static function getHttpMethodOverride()
+ {
+ return self::$_httpMethodOverride;
+ }
+
+ /**
+ * Toggle requesting gzip encoded responses
+ *
+ * @param boolean $enabled Whether or not to enable gzipped responses
+ * @return void
+ */
+ public static function setGzipEnabled($enabled = false)
+ {
+ if ($enabled && !function_exists('gzinflate')) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You cannot enable gzipped responses if the zlib module ' .
+ 'is not enabled in your PHP installation.');
+
+ }
+ self::$_gzipEnabled = $enabled;
+ }
+
+ /**
+ * Get the HTTP override state
+ *
+ * @return boolean
+ */
+ public static function getGzipEnabled()
+ {
+ return self::$_gzipEnabled;
+ }
+
+ /**
+ * Get whether to use verbose exception messages
+ *
+ * In the case of HTTP errors, use the body of the HTTP response
+ * in the exception message.
+ *
+ * @return boolean
+ */
+ public static function getVerboseExceptionMessages()
+ {
+ return self::$_verboseExceptionMessages;
+ }
+
+ /**
+ * Set whether to use verbose exception messages
+ *
+ * In the case of HTTP errors, use the body of the HTTP response
+ * in the exception message.
+ *
+ * @param boolean $verbose Whether to use verbose exception messages
+ */
+ public static function setVerboseExceptionMessages($verbose)
+ {
+ self::$_verboseExceptionMessages = $verbose;
+ }
+
+ /**
+ * Set the maximum number of redirects to follow during HTTP operations
+ *
+ * @param int $maxRedirects Maximum number of redirects to follow
+ * @return void
+ */
+ public static function setMaxRedirects($maxRedirects)
+ {
+ self::$_maxRedirects = $maxRedirects;
+ }
+
+ /**
+ * Get the maximum number of redirects to follow during HTTP operations
+ *
+ * @return int Maximum number of redirects to follow
+ */
+ public static function getMaxRedirects()
+ {
+ return self::$_maxRedirects;
+ }
+
+ /**
+ * Set the major protocol version that should be used. Values < 1 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * @see _majorProtocolVersion
+ * @param int $value The major protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMajorProtocolVersion($value)
+ {
+ if (!($value >= 1)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Major protocol version must be >= 1');
+ }
+ $this->_majorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the major protocol version that is in use.
+ *
+ * @see _majorProtocolVersion
+ * @return int The major protocol version in use.
+ */
+ public function getMajorProtocolVersion()
+ {
+ return $this->_majorProtocolVersion;
+ }
+
+ /**
+ * Set the minor protocol version that should be used. If set to NULL, no
+ * minor protocol version will be sent to the server. Values < 0 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * @see _minorProtocolVersion
+ * @param (int|NULL) $value The minor protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMinorProtocolVersion($value)
+ {
+ if (!($value >= 0)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Minor protocol version must be >= 0');
+ }
+ $this->_minorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the minor protocol version that is in use.
+ *
+ * @see _minorProtocolVersion
+ * @return (int|NULL) The major protocol version in use, or NULL if no
+ * minor version is specified.
+ */
+ public function getMinorProtocolVersion()
+ {
+ return $this->_minorProtocolVersion;
+ }
+
+ /**
+ * Provides pre-processing for HTTP requests to APP services.
+ *
+ * 1. Checks the $data element and, if it's an entry, extracts the XML,
+ * multipart data, edit link (PUT,DELETE), etc.
+ * 2. If $data is a string, sets the default content-type header as
+ * 'application/atom+xml' if it's not already been set.
+ * 3. Adds a x-http-method override header and changes the HTTP method
+ * to 'POST' if necessary as per getHttpMethodOverride()
+ *
+ * @param string $method The HTTP method for the request - 'GET', 'POST',
+ * 'PUT', 'DELETE'
+ * @param string $url The URL to which this request is being performed,
+ * or null if found in $data
+ * @param array $headers An associative array of HTTP headers for this
+ * request
+ * @param mixed $data The Zend_Gdata_App_Entry or XML for the
+ * body of the request
+ * @param string $contentTypeOverride The override value for the
+ * content type of the request body
+ * @return array An associative array containing the determined
+ * 'method', 'url', 'data', 'headers', 'contentType'
+ */
+ public function prepareRequest($method,
+ $url = null,
+ $headers = array(),
+ $data = null,
+ $contentTypeOverride = null)
+ {
+ // As a convenience, if $headers is null, we'll convert it back to
+ // an empty array.
+ if ($headers === null) {
+ $headers = array();
+ }
+
+ $rawData = null;
+ $finalContentType = null;
+ if ($url == null) {
+ $url = $this->_defaultPostUri;
+ }
+
+ if (is_string($data)) {
+ $rawData = $data;
+ if ($contentTypeOverride === null) {
+ $finalContentType = 'application/atom+xml';
+ }
+ } elseif ($data instanceof Zend_Gdata_App_MediaEntry) {
+ $rawData = $data->encode();
+ if ($data->getMediaSource() !== null) {
+ $finalContentType = $rawData->getContentType();
+ $headers['MIME-version'] = '1.0';
+ $headers['Slug'] = $data->getMediaSource()->getSlug();
+ } else {
+ $finalContentType = 'application/atom+xml';
+ }
+ if ($method == 'PUT' || $method == 'DELETE') {
+ $editLink = $data->getEditLink();
+ if ($editLink != null && $url == null) {
+ $url = $editLink->getHref();
+ }
+ }
+ } elseif ($data instanceof Zend_Gdata_App_Entry) {
+ $rawData = $data->saveXML();
+ $finalContentType = 'application/atom+xml';
+ if ($method == 'PUT' || $method == 'DELETE') {
+ $editLink = $data->getEditLink();
+ if ($editLink != null) {
+ $url = $editLink->getHref();
+ }
+ }
+ } elseif ($data instanceof Zend_Gdata_App_MediaSource) {
+ $rawData = $data->encode();
+ if ($data->getSlug() !== null) {
+ $headers['Slug'] = $data->getSlug();
+ }
+ $finalContentType = $data->getContentType();
+ }
+
+ if ($method == 'DELETE') {
+ $rawData = null;
+ }
+
+ // Set an If-Match header if:
+ // - This isn't a DELETE
+ // - If this isn't a GET, the Etag isn't weak
+ // - A similar header (If-Match/If-None-Match) hasn't already been
+ // set.
+ if ($method != 'DELETE' && (
+ !array_key_exists('If-Match', $headers) &&
+ !array_key_exists('If-None-Match', $headers)
+ ) ) {
+ $allowWeak = $method == 'GET';
+ if ($ifMatchHeader = $this->generateIfMatchHeaderData(
+ $data, $allowWeak)) {
+ $headers['If-Match'] = $ifMatchHeader;
+ }
+ }
+
+ if ($method != 'POST' && $method != 'GET' && Zend_Gdata_App::getHttpMethodOverride()) {
+ $headers['x-http-method-override'] = $method;
+ $method = 'POST';
+ } else {
+ $headers['x-http-method-override'] = null;
+ }
+
+ if ($contentTypeOverride != null) {
+ $finalContentType = $contentTypeOverride;
+ }
+
+ return array('method' => $method, 'url' => $url,
+ 'data' => $rawData, 'headers' => $headers,
+ 'contentType' => $finalContentType);
+ }
+
+ /**
+ * Performs a HTTP request using the specified method
+ *
+ * @param string $method The HTTP method for the request - 'GET', 'POST',
+ * 'PUT', 'DELETE'
+ * @param string $url The URL to which this request is being performed
+ * @param array $headers An associative array of HTTP headers
+ * for this request
+ * @param string $body The body of the HTTP request
+ * @param string $contentType The value for the content type
+ * of the request body
+ * @param int $remainingRedirects Number of redirects to follow if request
+ * s results in one
+ * @return Zend_Http_Response The response object
+ */
+ public function performHttpRequest($method, $url, $headers = null,
+ $body = null, $contentType = null, $remainingRedirects = null)
+ {
+ require_once 'Zend/Http/Client/Exception.php';
+ if ($remainingRedirects === null) {
+ $remainingRedirects = self::getMaxRedirects();
+ }
+ if ($headers === null) {
+ $headers = array();
+ }
+ // Append a Gdata version header if protocol v2 or higher is in use.
+ // (Protocol v1 does not use this header.)
+ $major = $this->getMajorProtocolVersion();
+ $minor = $this->getMinorProtocolVersion();
+ if ($major >= 2) {
+ $headers['GData-Version'] = $major +
+ (($minor === null) ? '.' + $minor : '');
+ }
+
+ // check the overridden method
+ if (($method == 'POST' || $method == 'PUT') && $body === null &&
+ $headers['x-http-method-override'] != 'DELETE') {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the data to post as either a ' .
+ 'string or a child of Zend_Gdata_App_Entry');
+ }
+ if ($url === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify an URI to which to post.');
+ }
+ $headers['Content-Type'] = $contentType;
+ if (Zend_Gdata_App::getGzipEnabled()) {
+ // some services require the word 'gzip' to be in the user-agent
+ // header in addition to the accept-encoding header
+ if (strpos($this->_httpClient->getHeader('User-Agent'),
+ 'gzip') === false) {
+ $headers['User-Agent'] =
+ $this->_httpClient->getHeader('User-Agent') . ' (gzip)';
+ }
+ $headers['Accept-encoding'] = 'gzip, deflate';
+ } else {
+ $headers['Accept-encoding'] = 'identity';
+ }
+
+ // Make sure the HTTP client object is 'clean' before making a request
+ // In addition to standard headers to reset via resetParameters(),
+ // also reset the Slug and If-Match headers
+ $this->_httpClient->resetParameters();
+ $this->_httpClient->setHeaders(array('Slug', 'If-Match'));
+
+ // Set the params for the new request to be performed
+ $this->_httpClient->setHeaders($headers);
+ $uri = Zend_Uri_Http::fromString($url);
+ preg_match("/^(.*?)(\?.*)?$/", $url, $matches);
+ $this->_httpClient->setUri($matches[1]);
+ $queryArray = $uri->getQueryAsArray();
+ foreach ($queryArray as $name => $value) {
+ $this->_httpClient->setParameterGet($name, $value);
+ }
+
+
+ $this->_httpClient->setConfig(array('maxredirects' => 0));
+
+ // Set the proper adapter if we are handling a streaming upload
+ $usingMimeStream = false;
+ $oldHttpAdapter = null;
+
+ if ($body instanceof Zend_Gdata_MediaMimeStream) {
+ $usingMimeStream = true;
+ $this->_httpClient->setRawDataStream($body, $contentType);
+ $oldHttpAdapter = $this->_httpClient->getAdapter();
+
+ if ($oldHttpAdapter instanceof Zend_Http_Client_Adapter_Proxy) {
+ require_once 'Zend/Gdata/HttpAdapterStreamingProxy.php';
+ $newAdapter = new Zend_Gdata_HttpAdapterStreamingProxy();
+ } else {
+ require_once 'Zend/Gdata/HttpAdapterStreamingSocket.php';
+ $newAdapter = new Zend_Gdata_HttpAdapterStreamingSocket();
+ }
+ $this->_httpClient->setAdapter($newAdapter);
+ } else {
+ $this->_httpClient->setRawData($body, $contentType);
+ }
+
+ try {
+ $response = $this->_httpClient->request($method);
+ // reset adapter
+ if ($usingMimeStream) {
+ $this->_httpClient->setAdapter($oldHttpAdapter);
+ }
+ } catch (Zend_Http_Client_Exception $e) {
+ // reset adapter
+ if ($usingMimeStream) {
+ $this->_httpClient->setAdapter($oldHttpAdapter);
+ }
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ if ($response->isRedirect() && $response->getStatus() != '304') {
+ if ($remainingRedirects > 0) {
+ $newUrl = $response->getHeader('Location');
+ $response = $this->performHttpRequest(
+ $method, $newUrl, $headers, $body,
+ $contentType, $remainingRedirects);
+ } else {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Number of redirects exceeds maximum', null, $response);
+ }
+ }
+ if (!$response->isSuccessful()) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ $exceptionMessage = 'Expected response code 200, got ' .
+ $response->getStatus();
+ if (self::getVerboseExceptionMessages()) {
+ $exceptionMessage .= "\n" . $response->getBody();
+ }
+ $exception = new Zend_Gdata_App_HttpException($exceptionMessage);
+ $exception->setResponse($response);
+ throw $exception;
+ }
+ return $response;
+ }
+
+ /**
+ * Imports a feed located at $uri.
+ *
+ * @param string $uri
+ * @param Zend_Http_Client $client The client used for communication
+ * @param string $className The class which is used as the return type
+ * @throws Zend_Gdata_App_Exception
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public static function import($uri, $client = null,
+ $className='Zend_Gdata_App_Feed')
+ {
+ $app = new Zend_Gdata_App($client);
+ $requestData = $app->prepareRequest('GET', $uri);
+ $response = $app->performHttpRequest(
+ $requestData['method'], $requestData['url']);
+
+ $feedContent = $response->getBody();
+ if (!$this->_useObjectMapping) {
+ return $feedContent;
+ }
+ $feed = self::importString($feedContent, $className);
+ if ($client != null) {
+ $feed->setHttpClient($client);
+ }
+ return $feed;
+ }
+
+ /**
+ * Imports the specified URL (non-statically).
+ *
+ * @param string $url The URL to import
+ * @param string $className The class which is used as the return type
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @throws Zend_Gdata_App_Exception
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function importUrl($url, $className='Zend_Gdata_App_Feed',
+ $extraHeaders = array())
+ {
+ $response = $this->get($url, $extraHeaders);
+
+ $feedContent = $response->getBody();
+ if (!$this->_useObjectMapping) {
+ return $feedContent;
+ }
+
+ $protocolVersionStr = $response->getHeader('GData-Version');
+ $majorProtocolVersion = null;
+ $minorProtocolVersion = null;
+ if ($protocolVersionStr !== null) {
+ // Extract protocol major and minor version from header
+ $delimiterPos = strpos($protocolVersionStr, '.');
+ $length = strlen($protocolVersionStr);
+ $major = substr($protocolVersionStr, 0, $delimiterPos);
+ $minor = substr($protocolVersionStr, $delimiterPos + 1, $length);
+ $majorProtocolVersion = $major;
+ $minorProtocolVersion = $minor;
+ }
+
+ $feed = self::importString($feedContent, $className,
+ $majorProtocolVersion, $minorProtocolVersion);
+ if ($this->getHttpClient() != null) {
+ $feed->setHttpClient($this->getHttpClient());
+ }
+ $etag = $response->getHeader('ETag');
+ if ($etag !== null) {
+ $feed->setEtag($etag);
+ }
+ return $feed;
+ }
+
+
+ /**
+ * Imports a feed represented by $string.
+ *
+ * @param string $string
+ * @param string $className The class which is used as the return type
+ * @param integer $majorProcolVersion (optional) The major protocol version
+ * of the data model object that is to be created.
+ * @param integer $minorProcolVersion (optional) The minor protocol version
+ * of the data model object that is to be created.
+ * @throws Zend_Gdata_App_Exception
+ * @return Zend_Gdata_App_Feed
+ */
+ public static function importString($string,
+ $className='Zend_Gdata_App_Feed', $majorProtocolVersion = null,
+ $minorProtocolVersion = null)
+ {
+ if (!class_exists($className, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($className);
+ }
+
+ // Load the feed as an XML DOMDocument object
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($string);
+ @ini_restore('track_errors');
+
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "DOMDocument cannot parse XML: $php_errormsg");
+ }
+
+ $feed = new $className();
+ $feed->setMajorProtocolVersion($majorProtocolVersion);
+ $feed->setMinorProtocolVersion($minorProtocolVersion);
+ $feed->transferFromXML($string);
+ $feed->setHttpClient(self::getstaticHttpClient());
+ return $feed;
+ }
+
+
+ /**
+ * Imports a feed from a file located at $filename.
+ *
+ * @param string $filename
+ * @param string $className The class which is used as the return type
+ * @param string $useIncludePath Whether the include_path should be searched
+ * @throws Zend_Gdata_App_Exception
+ * @return Zend_Gdata_App_Feed
+ */
+ public static function importFile($filename,
+ $className='Zend_Gdata_App_Feed', $useIncludePath = false)
+ {
+ @ini_set('track_errors', 1);
+ $feed = @file_get_contents($filename, $useIncludePath);
+ @ini_restore('track_errors');
+ if ($feed === false) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "File could not be loaded: $php_errormsg");
+ }
+ return self::importString($feed, $className);
+ }
+
+ /**
+ * GET a URI using client object.
+ *
+ * @param string $uri GET URI
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Http_Response
+ */
+ public function get($uri, $extraHeaders = array())
+ {
+ $requestData = $this->prepareRequest('GET', $uri, $extraHeaders);
+ return $this->performHttpRequest(
+ $requestData['method'], $requestData['url'],
+ $requestData['headers']);
+ }
+
+ /**
+ * POST data with client object
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri POST URI
+ * @param array $headers Additional HTTP headers to insert.
+ * @param string $contentType Content-type of the data
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function post($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ $requestData = $this->prepareRequest(
+ 'POST', $uri, $extraHeaders, $data, $contentType);
+ return $this->performHttpRequest(
+ $requestData['method'], $requestData['url'],
+ $requestData['headers'], $requestData['data'],
+ $requestData['contentType']);
+ }
+
+ /**
+ * PUT data with client object
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri PUT URI
+ * @param array $headers Additional HTTP headers to insert.
+ * @param string $contentType Content-type of the data
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function put($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ $requestData = $this->prepareRequest(
+ 'PUT', $uri, $extraHeaders, $data, $contentType);
+ return $this->performHttpRequest(
+ $requestData['method'], $requestData['url'],
+ $requestData['headers'], $requestData['data'],
+ $requestData['contentType']);
+ }
+
+ /**
+ * DELETE entry with client object
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or URL to delete
+ * @return void
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function delete($data, $remainingRedirects = null)
+ {
+ if (is_string($data)) {
+ $requestData = $this->prepareRequest('DELETE', $data);
+ } else {
+ $headers = array();
+
+ $requestData = $this->prepareRequest(
+ 'DELETE', null, $headers, $data);
+ }
+ return $this->performHttpRequest($requestData['method'],
+ $requestData['url'],
+ $requestData['headers'],
+ '',
+ $requestData['contentType'],
+ $remainingRedirects);
+ }
+
+ /**
+ * Inserts an entry to a given URI and returns the response as a
+ * fully formed Entry.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri POST URI
+ * @param string $className The class of entry to be returned.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The entry returned by the service after
+ * insertion.
+ */
+ public function insertEntry($data, $uri, $className='Zend_Gdata_App_Entry',
+ $extraHeaders = array())
+ {
+ if (!class_exists($className, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($className);
+ }
+
+ $response = $this->post($data, $uri, null, null, $extraHeaders);
+
+ $returnEntry = new $className($response->getBody());
+ $returnEntry->setHttpClient(self::getstaticHttpClient());
+
+ $etag = $response->getHeader('ETag');
+ if ($etag !== null) {
+ $returnEntry->setEtag($etag);
+ }
+
+ return $returnEntry;
+ }
+
+ /**
+ * Update an entry
+ *
+ * @param mixed $data Zend_Gdata_App_Entry or XML (w/ID and link rel='edit')
+ * @param string|null The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null The name of the class that should be deserialized
+ * from the server response. If null, then 'Zend_Gdata_App_Entry'
+ * will be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The entry returned from the server
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function updateEntry($data, $uri = null, $className = null,
+ $extraHeaders = array())
+ {
+ if ($className === null && $data instanceof Zend_Gdata_App_Entry) {
+ $className = get_class($data);
+ } elseif ($className === null) {
+ $className = 'Zend_Gdata_App_Entry';
+ }
+
+ if (!class_exists($className, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($className);
+ }
+
+ $response = $this->put($data, $uri, null, null, $extraHeaders);
+ $returnEntry = new $className($response->getBody());
+ $returnEntry->setHttpClient(self::getstaticHttpClient());
+
+ $etag = $response->getHeader('ETag');
+ if ($etag !== null) {
+ $returnEntry->setEtag($etag);
+ }
+
+ return $returnEntry;
+ }
+
+ /**
+ * Provides a magic factory method to instantiate new objects with
+ * shorter syntax than would otherwise be required by the Zend Framework
+ * naming conventions. For instance, to construct a new
+ * Zend_Gdata_Calendar_Extension_Color, a developer simply needs to do
+ * $gCal->newColor(). For this magic constructor, packages are searched
+ * in the same order as which they appear in the $_registeredPackages
+ * array
+ *
+ * @param string $method The method name being called
+ * @param array $args The arguments passed to the call
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function __call($method, $args)
+ {
+ if (preg_match('/^new(\w+)/', $method, $matches)) {
+ $class = $matches[1];
+ $foundClassName = null;
+ foreach ($this->_registeredPackages as $name) {
+ try {
+ // Autoloading disabled on next line for compatibility
+ // with magic factories. See ZF-6660.
+ if (!class_exists($name . '_' . $class, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($name . '_' . $class);
+ }
+ $foundClassName = $name . '_' . $class;
+ break;
+ } catch (Zend_Exception $e) {
+ // package wasn't here- continue searching
+ }
+ }
+ if ($foundClassName != null) {
+ $reflectionObj = new ReflectionClass($foundClassName);
+ $instance = $reflectionObj->newInstanceArgs($args);
+ if ($instance instanceof Zend_Gdata_App_FeedEntryParent) {
+ $instance->setHttpClient($this->_httpClient);
+
+ // Propogate version data
+ $instance->setMajorProtocolVersion(
+ $this->_majorProtocolVersion);
+ $instance->setMinorProtocolVersion(
+ $this->_minorProtocolVersion);
+ }
+ return $instance;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "Unable to find '${class}' in registered packages");
+ }
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("No such method ${method}");
+ }
+ }
+
+ /**
+ * Retrieve all entries for a feed, iterating through pages as necessary.
+ * Be aware that calling this function on a large dataset will take a
+ * significant amount of time to complete. In some cases this may cause
+ * execution to timeout without proper precautions in place.
+ *
+ * @param $feed The feed to iterate through.
+ * @return mixed A new feed of the same type as the one originally
+ * passed in, containing all relevent entries.
+ */
+ public function retrieveAllEntriesForFeed($feed) {
+ $feedClass = get_class($feed);
+ $reflectionObj = new ReflectionClass($feedClass);
+ $result = $reflectionObj->newInstance();
+ do {
+ foreach ($feed as $entry) {
+ $result->addEntry($entry);
+ }
+
+ $next = $feed->getLink('next');
+ if ($next !== null) {
+ $feed = $this->getFeed($next->href, $feedClass);
+ } else {
+ $feed = null;
+ }
+ }
+ while ($feed != null);
+ return $result;
+ }
+
+ /**
+ * This method enables logging of requests by changing the
+ * Zend_Http_Client_Adapter used for performing the requests.
+ * NOTE: This will not work if you have customized the adapter
+ * already to use a proxy server or other interface.
+ *
+ * @param $logfile The logfile to use when logging the requests
+ */
+ public function enableRequestDebugLogging($logfile)
+ {
+ $this->_httpClient->setConfig(array(
+ 'adapter' => 'Zend_Gdata_App_LoggingHttpClientAdapterSocket',
+ 'logfile' => $logfile
+ ));
+ }
+
+ /**
+ * Retrieve next set of results based on a given feed.
+ *
+ * @param Zend_Gdata_App_Feed $feed The feed from which to
+ * retreive the next set of results.
+ * @param string $className (optional) The class of feed to be returned.
+ * If null, the next feed (if found) will be the same class as
+ * the feed that was given as the first argument.
+ * @return Zend_Gdata_App_Feed|null Returns a
+ * Zend_Gdata_App_Feed or null if no next set of results
+ * exists.
+ */
+ public function getNextFeed($feed, $className = null)
+ {
+ $nextLink = $feed->getNextLink();
+ if (!$nextLink) {
+ return null;
+ }
+ $nextLinkHref = $nextLink->getHref();
+
+ if ($className === null) {
+ $className = get_class($feed);
+ }
+
+ return $this->getFeed($nextLinkHref, $className);
+ }
+
+ /**
+ * Retrieve previous set of results based on a given feed.
+ *
+ * @param Zend_Gdata_App_Feed $feed The feed from which to
+ * retreive the previous set of results.
+ * @param string $className (optional) The class of feed to be returned.
+ * If null, the previous feed (if found) will be the same class as
+ * the feed that was given as the first argument.
+ * @return Zend_Gdata_App_Feed|null Returns a
+ * Zend_Gdata_App_Feed or null if no previous set of results
+ * exists.
+ */
+ public function getPreviousFeed($feed, $className = null)
+ {
+ $previousLink = $feed->getPreviousLink();
+ if (!$previousLink) {
+ return null;
+ }
+ $previousLinkHref = $previousLink->getHref();
+
+ if ($className === null) {
+ $className = get_class($feed);
+ }
+
+ return $this->getFeed($previousLinkHref, $className);
+ }
+
+ /**
+ * Returns the data for an If-Match header based on the current Etag
+ * property. If Etags are not supported by the server or cannot be
+ * extracted from the data, then null will be returned.
+ *
+ * @param boolean $allowWeak If false, then if a weak Etag is detected,
+ * then return null rather than the Etag.
+ * @return string|null $data
+ */
+ public function generateIfMatchHeaderData($data, $allowWeek)
+ {
+ $result = '';
+ // Set an If-Match header if an ETag has been set (version >= 2 only)
+ if ($this->_majorProtocolVersion >= 2 &&
+ $data instanceof Zend_Gdata_App_Entry) {
+ $etag = $data->getEtag();
+ if (($etag !== null) &&
+ ($allowWeek || substr($etag, 0, 2) != 'W/')) {
+ $result = $data->getEtag();
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Determine whether service object is using XML to object mapping.
+ *
+ * @return boolean True if service object is using XML to object mapping,
+ * false otherwise.
+ */
+ public function usingObjectMapping()
+ {
+ return $this->_useObjectMapping;
+ }
+
+ /**
+ * Enable/disable the use of XML to object mapping.
+ *
+ * @param boolean $value Pass in true to use the XML to object mapping.
+ * Pass in false or null to disable it.
+ * @return void
+ */
+ public function useObjectMapping($value)
+ {
+ if ($value === True) {
+ $this->_useObjectMapping = true;
+ } else {
+ $this->_useObjectMapping = false;
+ }
+ }
+
+}
diff --git a/Zend/Gdata/App/AuthException.php b/Zend/Gdata/App/AuthException.php
new file mode 100644
index 00000000..235a8ef5
--- /dev/null
+++ b/Zend/Gdata/App/AuthException.php
@@ -0,0 +1,41 @@
+ array(
+ 1 => array(
+ 0 => 'http://www.w3.org/2005/Atom'
+ )
+ ),
+ 'app' => array(
+ 1 => array(
+ 0 => 'http://purl.org/atom/app#'
+ ),
+ 2 => array(
+ 0 => 'http://www.w3.org/2007/app'
+ )
+ )
+ );
+
+ public function __construct()
+ {
+ }
+
+ /**
+ * Returns the child text node of this element
+ * This represents any raw text contained within the XML element
+ *
+ * @return string Child text node
+ */
+ public function getText($trim = true)
+ {
+ if ($trim) {
+ return trim($this->_text);
+ } else {
+ return $this->_text;
+ }
+ }
+
+ /**
+ * Sets the child text node of this element
+ * This represents any raw text contained within the XML element
+ *
+ * @param string $value Child text node
+ * @return Zend_Gdata_App_Base Returns an object of the same type as 'this' to provide a fluent interface.
+ */
+ public function setText($value)
+ {
+ $this->_text = $value;
+ return $this;
+ }
+
+ /**
+ * Returns an array of all elements not matched to data model classes
+ * during the parsing of the XML
+ *
+ * @return array All elements not matched to data model classes during parsing
+ */
+ public function getExtensionElements()
+ {
+ return $this->_extensionElements;
+ }
+
+ /**
+ * Sets an array of all elements not matched to data model classes
+ * during the parsing of the XML. This method can be used to add arbitrary
+ * child XML elements to any data model class.
+ *
+ * @param array $value All extension elements
+ * @return Zend_Gdata_App_Base Returns an object of the same type as 'this' to provide a fluent interface.
+ */
+ public function setExtensionElements($value)
+ {
+ $this->_extensionElements = $value;
+ return $this;
+ }
+
+ /**
+ * Returns an array of all extension attributes not transformed into data
+ * model properties during parsing of the XML. Each element of the array
+ * is a hashed array of the format:
+ * array('namespaceUri' => string, 'name' => string, 'value' => string);
+ *
+ * @return array All extension attributes
+ */
+ public function getExtensionAttributes()
+ {
+ return $this->_extensionAttributes;
+ }
+
+ /**
+ * Sets an array of all extension attributes not transformed into data
+ * model properties during parsing of the XML. Each element of the array
+ * is a hashed array of the format:
+ * array('namespaceUri' => string, 'name' => string, 'value' => string);
+ * This can be used to add arbitrary attributes to any data model element
+ *
+ * @param array $value All extension attributes
+ * @return Zend_Gdata_App_Base Returns an object of the same type as 'this' to provide a fluent interface.
+ */
+ public function setExtensionAttributes($value)
+ {
+ $this->_extensionAttributes = $value;
+ return $this;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ if ($doc === null) {
+ $doc = new DOMDocument('1.0', 'utf-8');
+ }
+ if ($this->_rootNamespaceURI != null) {
+ $element = $doc->createElementNS($this->_rootNamespaceURI, $this->_rootElement);
+ } elseif ($this->_rootNamespace !== null) {
+ if (strpos($this->_rootElement, ':') === false) {
+ $elementName = $this->_rootNamespace . ':' . $this->_rootElement;
+ } else {
+ $elementName = $this->_rootElement;
+ }
+ $element = $doc->createElementNS($this->lookupNamespace($this->_rootNamespace), $elementName);
+ } else {
+ $element = $doc->createElement($this->_rootElement);
+ }
+ if ($this->_text != null) {
+ $element->appendChild($element->ownerDocument->createTextNode($this->_text));
+ }
+ foreach ($this->_extensionElements as $extensionElement) {
+ $element->appendChild($extensionElement->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_extensionAttributes as $attribute) {
+ $element->setAttribute($attribute['name'], $attribute['value']);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a child DOMNode, tries to determine how to map the data into
+ * object instance members. If no mapping is defined, Extension_Element
+ * objects are created and stored in an array.
+ *
+ * @param DOMNode $child The DOMNode needed to be handled
+ */
+ protected function takeChildFromDOM($child)
+ {
+ if ($child->nodeType == XML_TEXT_NODE) {
+ $this->_text = $child->nodeValue;
+ } else {
+ $extensionElement = new Zend_Gdata_App_Extension_Element();
+ $extensionElement->transferFromDOM($child);
+ $this->_extensionElements[] = $extensionElement;
+ }
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ $arrayIndex = ($attribute->namespaceURI != '')?(
+ $attribute->namespaceURI . ':' . $attribute->name):
+ $attribute->name;
+ $this->_extensionAttributes[$arrayIndex] =
+ array('namespaceUri' => $attribute->namespaceURI,
+ 'name' => $attribute->localName,
+ 'value' => $attribute->nodeValue);
+ }
+
+ /**
+ * Transfers each child and attribute into member variables.
+ * This is called when XML is received over the wire and the data
+ * model needs to be built to represent this XML.
+ *
+ * @param DOMNode $node The DOMNode that represents this object's data
+ */
+ public function transferFromDOM($node)
+ {
+ foreach ($node->childNodes as $child) {
+ $this->takeChildFromDOM($child);
+ }
+ foreach ($node->attributes as $attribute) {
+ $this->takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Parses the provided XML text and generates data model classes for
+ * each know element by turning the XML text into a DOM tree and calling
+ * transferFromDOM($element). The first data model element with the same
+ * name as $this->_rootElement is used and the child elements are
+ * recursively parsed.
+ *
+ * @param string $xml The XML text to parse
+ */
+ public function transferFromXML($xml)
+ {
+ if ($xml) {
+ // Load the feed as an XML DOMDocument object
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($xml);
+ @ini_restore('track_errors');
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("DOMDocument cannot parse XML: $php_errormsg");
+ }
+ $element = $doc->getElementsByTagName($this->_rootElement)->item(0);
+ if (!$element) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('No root <' . $this->_rootElement . '> element');
+ }
+ $this->transferFromDOM($element);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('XML passed to transferFromXML cannot be null');
+ }
+ }
+
+ /**
+ * Converts this element and all children into XML text using getDOM()
+ *
+ * @return string XML content
+ */
+ public function saveXML()
+ {
+ $element = $this->getDOM();
+ return $element->ownerDocument->saveXML($element);
+ }
+
+ /**
+ * Alias for saveXML() returns XML content for this element and all
+ * children
+ *
+ * @return string XML content
+ */
+ public function getXML()
+ {
+ return $this->saveXML();
+ }
+
+ /**
+ * Alias for saveXML()
+ *
+ * Can be overridden by children to provide more complex representations
+ * of entries.
+ *
+ * @return string Encoded string content
+ */
+ public function encode()
+ {
+ return $this->saveXML();
+ }
+
+ /**
+ * Get the full version of a namespace prefix
+ *
+ * Looks up a prefix (atom:, etc.) in the list of registered
+ * namespaces and returns the full namespace URI if
+ * available. Returns the prefix, unmodified, if it's not
+ * registered.
+ *
+ * @param string $prefix The namespace prefix to lookup.
+ * @param integer $majorVersion The major protocol version in effect.
+ * Defaults to '1'.
+ * @param integer $minorVersion The minor protocol version in effect.
+ * Defaults to null (use latest).
+ * @return string
+ */
+ public function lookupNamespace($prefix,
+ $majorVersion = 1,
+ $minorVersion = null)
+ {
+ // Check for a memoized result
+ $key = $prefix . ' ' .
+ (is_null($majorVersion) ? 'NULL' : $majorVersion) .
+ ' '. (is_null($minorVersion) ? 'NULL' : $minorVersion);
+ if (array_key_exists($key, self::$_namespaceLookupCache))
+ return self::$_namespaceLookupCache[$key];
+ // If no match, return the prefix by default
+ $result = $prefix;
+
+ // Find tuple of keys that correspond to the namespace we should use
+ if (isset($this->_namespaces[$prefix])) {
+ // Major version search
+ $nsData = $this->_namespaces[$prefix];
+ $foundMajorV = Zend_Gdata_App_Util::findGreatestBoundedValue(
+ $majorVersion, $nsData);
+ // Minor version search
+ $nsData = $nsData[$foundMajorV];
+ $foundMinorV = Zend_Gdata_App_Util::findGreatestBoundedValue(
+ $minorVersion, $nsData);
+ // Extract NS
+ $result = $nsData[$foundMinorV];
+ }
+
+ // Memoize result
+ self::$_namespaceLookupCache[$key] = $result;
+
+ return $result;
+ }
+
+ /**
+ * Add a namespace and prefix to the registered list
+ *
+ * Takes a prefix and a full namespace URI and adds them to the
+ * list of registered namespaces for use by
+ * $this->lookupNamespace().
+ *
+ * WARNING: Currently, registering a namespace will NOT invalidate any
+ * memoized data stored in $_namespaceLookupCache. Under normal
+ * use, this behavior is acceptable. If you are adding
+ * contradictory data to the namespace lookup table, you must
+ * call flushNamespaceLookupCache().
+ *
+ * @param string $prefix The namespace prefix
+ * @param string $namespaceUri The full namespace URI
+ * @param integer $majorVersion The major protocol version in effect.
+ * Defaults to '1'.
+ * @param integer $minorVersion The minor protocol version in effect.
+ * Defaults to null (use latest).
+ * @return void
+ */
+ public function registerNamespace($prefix,
+ $namespaceUri,
+ $majorVersion = 1,
+ $minorVersion = 0)
+ {
+ $this->_namespaces[$prefix][$majorVersion][$minorVersion] =
+ $namespaceUri;
+ }
+
+ /**
+ * Flush namespace lookup cache.
+ *
+ * Empties the namespace lookup cache. Call this function if you have
+ * added data to the namespace lookup table that contradicts values that
+ * may have been cached during a previous call to lookupNamespace().
+ */
+ public static function flushNamespaceLookupCache()
+ {
+ self::$_namespaceLookupCache = array();
+ }
+
+ /**
+ * Add an array of namespaces to the registered list.
+ *
+ * Takes an array in the format of:
+ * namespace prefix, namespace URI, major protocol version,
+ * minor protocol version and adds them with calls to ->registerNamespace()
+ *
+ * @param array $namespaceArray An array of namespaces.
+ * @return void
+ */
+ public function registerAllNamespaces($namespaceArray)
+ {
+ foreach($namespaceArray as $namespace) {
+ $this->registerNamespace(
+ $namespace[0], $namespace[1], $namespace[2], $namespace[3]);
+ }
+ }
+
+
+ /**
+ * Magic getter to allow access like $entry->foo to call $entry->getFoo()
+ * Alternatively, if no getFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * TODO Remove ability to bypass getFoo() methods??
+ *
+ * @param string $name The variable name sought
+ */
+ public function __get($name)
+ {
+ $method = 'get'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method));
+ } else if (property_exists($this, "_${name}")) {
+ return $this->{'_' . $name};
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic setter to allow acces like $entry->foo='bar' to call
+ * $entry->setFoo('bar') automatically.
+ *
+ * Alternatively, if no setFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * TODO Remove ability to bypass getFoo() methods??
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function __set($name, $val)
+ {
+ $method = 'set'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method), $val);
+ } else if (isset($this->{'_' . $name}) || ($this->{'_' . $name} === null)) {
+ $this->{'_' . $name} = $val;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic __isset method
+ *
+ * @param string $name
+ */
+ public function __isset($name)
+ {
+ $rc = new ReflectionClass(get_class($this));
+ $privName = '_' . $name;
+ if (!($rc->hasProperty($privName))) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ } else {
+ if (isset($this->{$privName})) {
+ if (is_array($this->{$privName})) {
+ if (count($this->{$privName}) > 0) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Magic __unset method
+ *
+ * @param string $name
+ */
+ public function __unset($name)
+ {
+ if (isset($this->{'_' . $name})) {
+ if (is_array($this->{'_' . $name})) {
+ $this->{'_' . $name} = array();
+ } else {
+ $this->{'_' . $name} = null;
+ }
+ }
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string The text representation of this object
+ */
+ public function __toString()
+ {
+ return $this->getText();
+ }
+
+}
diff --git a/Zend/Gdata/App/BaseMediaSource.php b/Zend/Gdata/App/BaseMediaSource.php
new file mode 100644
index 00000000..a5b75385
--- /dev/null
+++ b/Zend/Gdata/App/BaseMediaSource.php
@@ -0,0 +1,179 @@
+_contentType;
+ }
+
+ /**
+ * Set the content type for the file attached (example image/png)
+ *
+ * @param string $value The content type
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface
+ */
+ public function setContentType($value)
+ {
+ $this->_contentType = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the Slug header value. Used by some services to determine the
+ * title for the uploaded file. Returns null if no slug should be used.
+ *
+ * @return string
+ */
+ public function getSlug(){
+ return $this->_slug;
+ }
+
+ /**
+ * Sets the Slug header value. Used by some services to determine the
+ * title for the uploaded file. A null value indicates no slug header.
+ *
+ * @var string The slug value
+ * @return Zend_Gdata_App_MediaSource Provides a fluent interface
+ */
+ public function setSlug($value){
+ $this->_slug = $value;
+ return $this;
+ }
+
+
+ /**
+ * Magic getter to allow acces like $source->foo to call $source->getFoo()
+ * Alternatively, if no getFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * TODO Remove ability to bypass getFoo() methods??
+ *
+ * @param string $name The variable name sought
+ */
+ public function __get($name)
+ {
+ $method = 'get'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method));
+ } else if (property_exists($this, "_${name}")) {
+ return $this->{'_' . $name};
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic setter to allow acces like $source->foo='bar' to call
+ * $source->setFoo('bar') automatically.
+ *
+ * Alternatively, if no setFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function __set($name, $val)
+ {
+ $method = 'set'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method), $val);
+ } else if (isset($this->{'_' . $name}) || ($this->{'_' . $name} === null)) {
+ $this->{'_' . $name} = $val;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic __isset method
+ *
+ * @param string $name
+ */
+ public function __isset($name)
+ {
+ $rc = new ReflectionClass(get_class($this));
+ $privName = '_' . $name;
+ if (!($rc->hasProperty($privName))) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ } else {
+ if (isset($this->{$privName})) {
+ if (is_array($this->{$privName})) {
+ if (count($this->{$privName}) > 0) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+ }
+
+}
diff --git a/Zend/Gdata/App/CaptchaRequiredException.php b/Zend/Gdata/App/CaptchaRequiredException.php
new file mode 100644
index 00000000..38bb8a8d
--- /dev/null
+++ b/Zend/Gdata/App/CaptchaRequiredException.php
@@ -0,0 +1,94 @@
+captchaToken = $captchaToken;
+ $this->captchaUrl = Zend_Gdata_App_CaptchaRequiredException::ACCOUNTS_URL . $captchaUrl;
+ parent::__construct('CAPTCHA challenge issued by server');
+ }
+
+ /**
+ * Retrieves the token identifier as provided by the server.
+ *
+ * @return string
+ */
+ public function getCaptchaToken() {
+ return $this->captchaToken;
+ }
+
+ /**
+ * Retrieves the URL CAPTCHA image as provided by the server.
+ *
+ * @return string
+ */
+ public function getCaptchaUrl() {
+ return $this->captchaUrl;
+ }
+
+}
diff --git a/Zend/Gdata/App/Entry.php b/Zend/Gdata/App/Entry.php
new file mode 100644
index 00000000..f5f29efe
--- /dev/null
+++ b/Zend/Gdata/App/Entry.php
@@ -0,0 +1,389 @@
+_content != null) {
+ $element->appendChild($this->_content->getDOM($element->ownerDocument));
+ }
+ if ($this->_published != null) {
+ $element->appendChild($this->_published->getDOM($element->ownerDocument));
+ }
+ if ($this->_source != null) {
+ $element->appendChild($this->_source->getDOM($element->ownerDocument));
+ }
+ if ($this->_summary != null) {
+ $element->appendChild($this->_summary->getDOM($element->ownerDocument));
+ }
+ if ($this->_control != null) {
+ $element->appendChild($this->_control->getDOM($element->ownerDocument));
+ }
+ if ($this->_edited != null) {
+ $element->appendChild($this->_edited->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'content':
+ $content = new Zend_Gdata_App_Extension_Content();
+ $content->transferFromDOM($child);
+ $this->_content = $content;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'published':
+ $published = new Zend_Gdata_App_Extension_Published();
+ $published->transferFromDOM($child);
+ $this->_published = $published;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'source':
+ $source = new Zend_Gdata_App_Extension_Source();
+ $source->transferFromDOM($child);
+ $this->_source = $source;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'summary':
+ $summary = new Zend_Gdata_App_Extension_Summary();
+ $summary->transferFromDOM($child);
+ $this->_summary = $summary;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'control':
+ $control = new Zend_Gdata_App_Extension_Control();
+ $control->transferFromDOM($child);
+ $this->_control = $control;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'edited':
+ $edited = new Zend_Gdata_App_Extension_Edited();
+ $edited->transferFromDOM($child);
+ $this->_edited = $edited;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Uploads changes in this entry to the server using Zend_Gdata_App
+ *
+ * @param string|null $uri The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null $className The name of the class that should we
+ * deserializing the server response. If null, then
+ * 'Zend_Gdata_App_Entry' will be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The updated entry.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function save($uri = null, $className = null, $extraHeaders = array())
+ {
+ return $this->getService()->updateEntry($this,
+ $uri,
+ $className,
+ $extraHeaders);
+ }
+
+ /**
+ * Deletes this entry to the server using the referenced
+ * Zend_Http_Client to do a HTTP DELETE to the edit link stored in this
+ * entry's link collection.
+ *
+ * @return void
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function delete()
+ {
+ $this->getService()->delete($this);
+ }
+
+ /**
+ * Reload the current entry. Returns a new copy of the entry as returned
+ * by the server, or null if no changes exist. This does not
+ * modify the current entry instance.
+ *
+ * @param string|null The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null The name of the class that should we deserializing
+ * the server response. If null, then 'Zend_Gdata_App_Entry' will
+ * be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return mixed A new instance of the current entry with updated data, or
+ * null if the server reports that no changes have been made.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function reload($uri = null, $className = null, $extraHeaders = array())
+ {
+ // Get URI
+ $editLink = $this->getEditLink();
+ if (($uri === null) && $editLink != null) {
+ $uri = $editLink->getHref();
+ }
+
+ // Set classname to current class, if not otherwise set
+ if ($className === null) {
+ $className = get_class($this);
+ }
+
+ // Append ETag, if present (Gdata v2 and above, only) and doesn't
+ // conflict with existing headers
+ if ($this->_etag != null
+ && !array_key_exists('If-Match', $extraHeaders)
+ && !array_key_exists('If-None-Match', $extraHeaders)) {
+ $extraHeaders['If-None-Match'] = $this->_etag;
+ }
+
+ // If an HTTP 304 status (Not Modified)is returned, then we return
+ // null.
+ $result = null;
+ try {
+ $result = $this->service->importUrl($uri, $className, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() != '304')
+ throw $e;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets the value of the atom:content element
+ *
+ * @return Zend_Gdata_App_Extension_Content
+ */
+ public function getContent()
+ {
+ return $this->_content;
+ }
+
+ /**
+ * Sets the value of the atom:content element
+ *
+ * @param Zend_Gdata_App_Extension_Content $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setContent($value)
+ {
+ $this->_content = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the value of the atom:published element
+ * This represents the publishing date for an entry
+ *
+ * @return Zend_Gdata_App_Extension_Published
+ */
+ public function getPublished()
+ {
+ return $this->_published;
+ }
+
+ /**
+ * Sets the value of the atom:published element
+ * This represents the publishing date for an entry
+ *
+ * @param Zend_Gdata_App_Extension_Published $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setPublished($value)
+ {
+ $this->_published = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the value of the atom:source element
+ *
+ * @return Zend_Gdata_App_Extension_Source
+ */
+ public function getSource()
+ {
+ return $this->_source;
+ }
+
+ /**
+ * Sets the value of the atom:source element
+ *
+ * @param Zend_Gdata_App_Extension_Source $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setSource($value)
+ {
+ $this->_source = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the value of the atom:summary element
+ * This represents a textual summary of this entry's content
+ *
+ * @return Zend_Gdata_App_Extension_Summary
+ */
+ public function getSummary()
+ {
+ return $this->_summary;
+ }
+
+ /**
+ * Sets the value of the atom:summary element
+ * This represents a textual summary of this entry's content
+ *
+ * @param Zend_Gdata_App_Extension_Summary $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setSummary($value)
+ {
+ $this->_summary = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the value of the app:control element
+ *
+ * @return Zend_Gdata_App_Extension_Control
+ */
+ public function getControl()
+ {
+ return $this->_control;
+ }
+
+ /**
+ * Sets the value of the app:control element
+ *
+ * @param Zend_Gdata_App_Extension_Control $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setControl($value)
+ {
+ $this->_control = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Exception.php b/Zend/Gdata/App/Exception.php
new file mode 100644
index 00000000..facdddeb
--- /dev/null
+++ b/Zend/Gdata/App/Exception.php
@@ -0,0 +1,43 @@
+_term = $term;
+ $this->_scheme = $scheme;
+ $this->_label = $label;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_term !== null) {
+ $element->setAttribute('term', $this->_term);
+ }
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_label !== null) {
+ $element->setAttribute('label', $this->_label);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'term':
+ $this->_term = $attribute->nodeValue;
+ break;
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'label':
+ $this->_label = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getTerm()
+ {
+ return $this->_term;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Extension_Category Provides a fluent interface
+ */
+ public function setTerm($value)
+ {
+ $this->_term = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Extension_Category Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Extension_Category Provides a fluent interface
+ */
+ public function setLabel($value)
+ {
+ $this->_label = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Content.php b/Zend/Gdata/App/Extension/Content.php
new file mode 100644
index 00000000..5bafde59
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Content.php
@@ -0,0 +1,88 @@
+_src = $src;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_src !== null) {
+ $element->setAttribute('src', $this->_src);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'src':
+ $this->_src = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getSrc()
+ {
+ return $this->_src;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setSrc($value)
+ {
+ $this->_src = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Contributor.php b/Zend/Gdata/App/Extension/Contributor.php
new file mode 100644
index 00000000..6340923c
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Contributor.php
@@ -0,0 +1,43 @@
+_draft = $draft;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_draft != null) {
+ $element->appendChild($this->_draft->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('app') . ':' . 'draft':
+ $draft = new Zend_Gdata_App_Extension_Draft();
+ $draft->transferFromDOM($child);
+ $this->_draft = $draft;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Draft
+ */
+ public function getDraft()
+ {
+ return $this->_draft;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Draft $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setDraft($value)
+ {
+ $this->_draft = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Draft.php b/Zend/Gdata/App/Extension/Draft.php
new file mode 100644
index 00000000..b14f1ed6
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Draft.php
@@ -0,0 +1,50 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Edited.php b/Zend/Gdata/App/Extension/Edited.php
new file mode 100644
index 00000000..a33df51f
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Edited.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Element.php b/Zend/Gdata/App/Extension/Element.php
new file mode 100644
index 00000000..c87ace00
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Element.php
@@ -0,0 +1,58 @@
+_rootElement = $rootElement;
+ $this->_rootNamespace = $rootNamespace;
+ $this->_rootNamespaceURI = $rootNamespaceURI;
+ $this->_text = $text;
+ }
+
+ public function transferFromDOM($node)
+ {
+ parent::transferFromDOM($node);
+ $this->_rootNamespace = null;
+ $this->_rootNamespaceURI = $node->namespaceURI;
+ $this->_rootElement = $node->localName;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Email.php b/Zend/Gdata/App/Extension/Email.php
new file mode 100644
index 00000000..232f7126
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Email.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Generator.php b/Zend/Gdata/App/Extension/Generator.php
new file mode 100644
index 00000000..d557ac41
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Generator.php
@@ -0,0 +1,115 @@
+_text = $text;
+ $this->_uri = $uri;
+ $this->_version = $version;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_uri !== null) {
+ $element->setAttribute('uri', $this->_uri);
+ }
+ if ($this->_version !== null) {
+ $element->setAttribute('version', $this->_version);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'uri':
+ $this->_uri = $attribute->nodeValue;
+ break;
+ case 'version':
+ $this->_version= $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Uri
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Uri $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setUri($value)
+ {
+ $this->_uri = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Version
+ */
+ public function getVersion()
+ {
+ return $this->_version;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Version $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setVersion($value)
+ {
+ $this->_version = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Icon.php b/Zend/Gdata/App/Extension/Icon.php
new file mode 100644
index 00000000..1f3d6665
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Icon.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Id.php b/Zend/Gdata/App/Extension/Id.php
new file mode 100644
index 00000000..42094f37
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Id.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Link.php b/Zend/Gdata/App/Extension/Link.php
new file mode 100644
index 00000000..78a80e49
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Link.php
@@ -0,0 +1,219 @@
+_href = $href;
+ $this->_rel = $rel;
+ $this->_type = $type;
+ $this->_hrefLang = $hrefLang;
+ $this->_title = $title;
+ $this->_length = $length;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ if ($this->_hrefLang !== null) {
+ $element->setAttribute('hreflang', $this->_hrefLang);
+ }
+ if ($this->_title !== null) {
+ $element->setAttribute('title', $this->_title);
+ }
+ if ($this->_length !== null) {
+ $element->setAttribute('length', $this->_length);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ case 'hreflang':
+ $this->_hrefLang = $attribute->nodeValue;
+ break;
+ case 'title':
+ $this->_title = $attribute->nodeValue;
+ break;
+ case 'length':
+ $this->_length = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getHrefLang()
+ {
+ return $this->_hrefLang;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setHrefLang($value)
+ {
+ $this->_hrefLang = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ $this->_title = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLength()
+ {
+ return $this->_length;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setLength($value)
+ {
+ $this->_length = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Logo.php b/Zend/Gdata/App/Extension/Logo.php
new file mode 100644
index 00000000..cf053903
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Logo.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Name.php b/Zend/Gdata/App/Extension/Name.php
new file mode 100644
index 00000000..813693b0
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Name.php
@@ -0,0 +1,48 @@
+_text = $text;
+ }
+}
diff --git a/Zend/Gdata/App/Extension/Person.php b/Zend/Gdata/App/Extension/Person.php
new file mode 100644
index 00000000..74c6543b
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Person.php
@@ -0,0 +1,163 @@
+_name = $name;
+ $this->_email = $email;
+ $this->_uri = $uri;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name != null) {
+ $element->appendChild($this->_name->getDOM($element->ownerDocument));
+ }
+ if ($this->_email != null) {
+ $element->appendChild($this->_email->getDOM($element->ownerDocument));
+ }
+ if ($this->_uri != null) {
+ $element->appendChild($this->_uri->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'name':
+ $name = new Zend_Gdata_App_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_name = $name;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'email':
+ $email = new Zend_Gdata_App_Extension_Email();
+ $email->transferFromDOM($child);
+ $this->_email = $email;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'uri':
+ $uri = new Zend_Gdata_App_Extension_Uri();
+ $uri->transferFromDOM($child);
+ $this->_uri = $uri;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Name
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Name $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Email
+ */
+ public function getEmail()
+ {
+ return $this->_email;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Email $value
+ * @return Zend_Gdata_App_Extension_Person Provides a fluent interface
+ */
+ public function setEmail($value)
+ {
+ $this->_email = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Uri
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Uri $value
+ * @return Zend_Gdata_App_Extension_Person Provides a fluent interface
+ */
+ public function setUri($value)
+ {
+ $this->_uri = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Published.php b/Zend/Gdata/App/Extension/Published.php
new file mode 100644
index 00000000..dece31dc
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Published.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Rights.php b/Zend/Gdata/App/Extension/Rights.php
new file mode 100644
index 00000000..b770f688
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Rights.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Source.php b/Zend/Gdata/App/Extension/Source.php
new file mode 100644
index 00000000..16bf4405
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Source.php
@@ -0,0 +1,46 @@
+_text = $text;
+ $this->_type = $type;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /*
+ * @return Zend_Gdata_App_Extension_Type
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /*
+ * @param string $value
+ * @return Zend_Gdata_App_Extension_Text Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Title.php b/Zend/Gdata/App/Extension/Title.php
new file mode 100644
index 00000000..008922cb
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Title.php
@@ -0,0 +1,43 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Extension/Uri.php b/Zend/Gdata/App/Extension/Uri.php
new file mode 100644
index 00000000..f60e6aa7
--- /dev/null
+++ b/Zend/Gdata/App/Extension/Uri.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/App/Feed.php b/Zend/Gdata/App/Feed.php
new file mode 100644
index 00000000..d7c713a6
--- /dev/null
+++ b/Zend/Gdata/App/Feed.php
@@ -0,0 +1,352 @@
+entries as $entry) or foreach
+ * ($feed->entry as $entry).
+ *
+ * @param string $var The property to get.
+ * @return mixed
+ */
+ public function __get($var)
+ {
+ switch ($var) {
+ case 'entries':
+ return $this;
+ default:
+ return parent::__get($var);
+ }
+ }
+
+ /**
+ * Retrieves the DOM model representing this object and all children
+ *
+ * @param DOMDocument $doc
+ * @return DOMElement
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_entry as $entry) {
+ $element->appendChild($entry->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $newEntry = new $this->_entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $newEntry->setMajorProtocolVersion($this->getMajorProtocolVersion());
+ $newEntry->setMinorProtocolVersion($this->getMinorProtocolVersion());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the number of entries in this feed object.
+ *
+ * @return integer Entry count.
+ */
+ public function count()
+ {
+ return count($this->_entry);
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return void
+ */
+ public function rewind()
+ {
+ $this->_entryIndex = 0;
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return mixed The current row, or null if no rows.
+ */
+ public function current()
+ {
+ return $this->_entry[$this->_entryIndex];
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return mixed The current row number (starts at 0), or NULL if no rows
+ */
+ public function key()
+ {
+ return $this->_entryIndex;
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return mixed The next row, or null if no more rows.
+ */
+ public function next()
+ {
+ ++$this->_entryIndex;
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return boolean Whether the iteration is valid
+ */
+ public function valid()
+ {
+ return 0 <= $this->_entryIndex && $this->_entryIndex < $this->count();
+ }
+
+ /**
+ * Gets the array of atom:entry elements contained within this
+ * atom:feed representation
+ *
+ * @return array Zend_Gdata_App_Entry array
+ */
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ /**
+ * Sets the array of atom:entry elements contained within this
+ * atom:feed representation
+ *
+ * @param array $value The array of Zend_Gdata_App_Entry elements
+ * @return Zend_Gdata_App_Feed Provides a fluent interface
+ */
+ public function setEntry($value)
+ {
+ $this->_entry = $value;
+ return $this;
+ }
+
+ /**
+ * Adds an entry representation to the array of entries
+ * contained within this feed
+ *
+ * @param Zend_Gdata_App_Entry An individual entry to add.
+ * @return Zend_Gdata_App_Feed Provides a fluent interface
+ */
+ public function addEntry($value)
+ {
+ $this->_entry[] = $value;
+ return $this;
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to set
+ * @param Zend_Gdata_App_Entry $value The value to set
+ * @return void
+ */
+ public function offsetSet($key, $value)
+ {
+ $this->_entry[$key] = $value;
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to get
+ * @param Zend_Gdata_App_Entry $value The value to set
+ */
+ public function offsetGet($key)
+ {
+ if (array_key_exists($key, $this->_entry)) {
+ return $this->_entry[$key];
+ }
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to set
+ * @param Zend_Gdata_App_Entry $value The value to set
+ */
+ public function offsetUnset($key)
+ {
+ if (array_key_exists($key, $this->_entry)) {
+ unset($this->_entry[$key]);
+ }
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to check for existence
+ * @return boolean
+ */
+ public function offsetExists($key)
+ {
+ return (array_key_exists($key, $this->_entry));
+ }
+
+ /**
+ * Retrieve the next set of results from this feed.
+ *
+ * @throws Zend_Gdata_App_Exception
+ * @return mixed|null Returns the next set of results as a feed of the same
+ * class as this feed, or null if no results exist.
+ */
+ public function getNextFeed()
+ {
+ $nextLink = $this->getNextLink();
+ if (!$nextLink) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_Exception('No link to next set ' .
+ 'of results found.');
+ }
+ $nextLinkHref = $nextLink->getHref();
+ $service = new Zend_Gdata_App($this->getHttpClient());
+
+ return $service->getFeed($nextLinkHref, get_class($this));
+ }
+
+ /**
+ * Retrieve the previous set of results from this feed.
+ *
+ * @throws Zend_Gdata_App_Exception
+ * @return mixed|null Returns the previous set of results as a feed of
+ * the same class as this feed, or null if no results exist.
+ */
+ public function getPreviousFeed()
+ {
+ $previousLink = $this->getPreviousLink();
+ if (!$previousLink) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_Exception('No link to previous set ' .
+ 'of results found.');
+ }
+ $previousLinkHref = $previousLink->getHref();
+ $service = new Zend_Gdata_App($this->getHttpClient());
+
+ return $service->getFeed($previousLinkHref, get_class($this));
+ }
+
+ /**
+ * Set the major protocol version that should be used. Values < 1 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * This value will be propogated to all child entries.
+ *
+ * @see _majorProtocolVersion
+ * @param (int|NULL) $value The major protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMajorProtocolVersion($value)
+ {
+ parent::setMajorProtocolVersion($value);
+ foreach ($this->entries as $entry) {
+ $entry->setMajorProtocolVersion($value);
+ }
+ }
+
+ /**
+ * Set the minor protocol version that should be used. If set to NULL, no
+ * minor protocol version will be sent to the server. Values < 0 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * This value will be propogated to all child entries.
+ *
+ * @see _minorProtocolVersion
+ * @param (int|NULL) $value The minor protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMinorProtocolVersion($value)
+ {
+ parent::setMinorProtocolVersion($value);
+ foreach ($this->entries as $entry) {
+ $entry->setMinorProtocolVersion($value);
+ }
+ }
+
+}
diff --git a/Zend/Gdata/App/FeedEntryParent.php b/Zend/Gdata/App/FeedEntryParent.php
new file mode 100644
index 00000000..d92e639a
--- /dev/null
+++ b/Zend/Gdata/App/FeedEntryParent.php
@@ -0,0 +1,681 @@
+= 1 is considered valid.
+ *
+ * @see setMajorProtocolVersion()
+ * @see getMajorProtocolVersion()
+ */
+ protected $_majorProtocolVersion = 1;
+
+ /**
+ * Indicates the minor protocol version that should be used. Can be set
+ * to either an integer >= 0, or NULL if no minor version should be sent
+ * to the server.
+ *
+ * @see setMinorProtocolVersion()
+ * @see getMinorProtocolVersion()
+ */
+ protected $_minorProtocolVersion = null;
+
+ /**
+ * Constructs a Feed or Entry
+ */
+ public function __construct($element = null)
+ {
+ if (!($element instanceof DOMElement)) {
+ if ($element) {
+ $this->transferFromXML($element);
+ }
+ } else {
+ $this->transferFromDOM($element);
+ }
+ }
+
+ /**
+ * Set the HTTP client instance
+ *
+ * Sets the HTTP client object to use for retrieving the feed.
+ *
+ * @deprecated Deprecated as of Zend Framework 1.7. Use
+ * setService() instead.
+ * @param Zend_Http_Client $httpClient
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setHttpClient(Zend_Http_Client $httpClient)
+ {
+ if (!$this->_service) {
+ $this->_service = new Zend_Gdata_App();
+ }
+ $this->_service->setHttpClient($httpClient);
+ return $this;
+ }
+
+ /**
+ * Gets the HTTP client object. If none is set, a new Zend_Http_Client
+ * will be used.
+ *
+ * @deprecated Deprecated as of Zend Framework 1.7. Use
+ * getService() instead.
+ * @return Zend_Http_Client_Abstract
+ */
+ public function getHttpClient()
+ {
+ if (!$this->_service) {
+ $this->_service = new Zend_Gdata_App();
+ }
+ $client = $this->_service->getHttpClient();
+ return $client;
+ }
+
+ /**
+ * Set the active service instance for this object. This will be used to
+ * perform network requests, such as when calling save() and delete().
+ *
+ * @param Zend_Gdata_App $instance The new service instance.
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface.
+ */
+ public function setService($instance)
+ {
+ $this->_service = $instance;
+ return $this;
+ }
+
+ /**
+ * Get the active service instance for this object. This will be used to
+ * perform network requests, such as when calling save() and delete().
+ *
+ * @return Zend_Gdata_App|null The current service instance, or null if
+ * not set.
+ */
+ public function getService()
+ {
+ return $this->_service;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_author as $author) {
+ $element->appendChild($author->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_category as $category) {
+ $element->appendChild($category->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_contributor as $contributor) {
+ $element->appendChild($contributor->getDOM($element->ownerDocument));
+ }
+ if ($this->_id != null) {
+ $element->appendChild($this->_id->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_link as $link) {
+ $element->appendChild($link->getDOM($element->ownerDocument));
+ }
+ if ($this->_rights != null) {
+ $element->appendChild($this->_rights->getDOM($element->ownerDocument));
+ }
+ if ($this->_title != null) {
+ $element->appendChild($this->_title->getDOM($element->ownerDocument));
+ }
+ if ($this->_updated != null) {
+ $element->appendChild($this->_updated->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'author':
+ $author = new Zend_Gdata_App_Extension_Author();
+ $author->transferFromDOM($child);
+ $this->_author[] = $author;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'category':
+ $category = new Zend_Gdata_App_Extension_Category();
+ $category->transferFromDOM($child);
+ $this->_category[] = $category;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'contributor':
+ $contributor = new Zend_Gdata_App_Extension_Contributor();
+ $contributor->transferFromDOM($child);
+ $this->_contributor[] = $contributor;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'id':
+ $id = new Zend_Gdata_App_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_id = $id;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'link':
+ $link = new Zend_Gdata_App_Extension_Link();
+ $link->transferFromDOM($child);
+ $this->_link[] = $link;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'rights':
+ $rights = new Zend_Gdata_App_Extension_Rights();
+ $rights->transferFromDOM($child);
+ $this->_rights = $rights;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'title':
+ $title = new Zend_Gdata_App_Extension_Title();
+ $title->transferFromDOM($child);
+ $this->_title = $title;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'updated':
+ $updated = new Zend_Gdata_App_Extension_Updated();
+ $updated->transferFromDOM($child);
+ $this->_updated = $updated;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Author
+ */
+ public function getAuthor()
+ {
+ return $this->_author;
+ }
+
+ /**
+ * Sets the list of the authors of this feed/entry. In an atom feed, each
+ * author is represented by an atom:author element
+ *
+ * @param array $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setAuthor($value)
+ {
+ $this->_author = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the array of categories that classify this feed/entry. Each
+ * category is represented in an atom feed by an atom:category element.
+ *
+ * @return array Array of Zend_Gdata_App_Extension_Category
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+ /**
+ * Sets the array of categories that classify this feed/entry. Each
+ * category is represented in an atom feed by an atom:category element.
+ *
+ * @param array $value Array of Zend_Gdata_App_Extension_Category
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setCategory($value)
+ {
+ $this->_category = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the array of contributors to this feed/entry. Each contributor
+ * is represented in an atom feed by an atom:contributor XML element
+ *
+ * @return array An array of Zend_Gdata_App_Extension_Contributor
+ */
+ public function getContributor()
+ {
+ return $this->_contributor;
+ }
+
+ /**
+ * Sets the array of contributors to this feed/entry. Each contributor
+ * is represented in an atom feed by an atom:contributor XML element
+ *
+ * @param array $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setContributor($value)
+ {
+ $this->_contributor = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Id
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Id $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setId($value)
+ {
+ $this->_id = $value;
+ return $this;
+ }
+
+ /**
+ * Given a particular 'rel' value, this method returns a matching
+ * Zend_Gdata_App_Extension_Link element. If the 'rel' value
+ * is not provided, the full array of Zend_Gdata_App_Extension_Link
+ * elements is returned. In an atom feed, each link is represented
+ * by an atom:link element. The 'rel' value passed to this function
+ * is the atom:link/@rel attribute. Example rel values include 'self',
+ * 'edit', and 'alternate'.
+ *
+ * @param string $rel The rel value of the link to be found. If null,
+ * the array of Zend_Gdata_App_Extension_link elements is returned
+ * @return mixed Either a single Zend_Gdata_App_Extension_link element,
+ * an array of the same or null is returned depending on the rel value
+ * supplied as the argument to this function
+ */
+ public function getLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_link;
+ } else {
+ foreach ($this->_link as $link) {
+ if ($link->rel == $rel) {
+ return $link;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to edit this resource. This link is in the atom feed/entry
+ * as an atom:link with a rel attribute value of 'edit'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getEditLink()
+ {
+ return $this->getLink('edit');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to retrieve the next chunk of results when paging through
+ * a feed. This link is in the atom feed as an atom:link with a
+ * rel attribute value of 'next'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getNextLink()
+ {
+ return $this->getLink('next');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to retrieve the previous chunk of results when paging
+ * through a feed. This link is in the atom feed as an atom:link with a
+ * rel attribute value of 'previous'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getPreviousLink()
+ {
+ return $this->getLink('previous');
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getLicenseLink()
+ {
+ return $this->getLink('license');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to retrieve the entry or feed represented by this object
+ * This link is in the atom feed/entry as an atom:link with a
+ * rel attribute value of 'self'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getSelfLink()
+ {
+ return $this->getLink('self');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL for an alternate view of the data represented by this feed or
+ * entry. This alternate view is commonly a user-facing webpage, blog
+ * post, etc. The MIME type for the data at the URL is available from the
+ * returned Zend_Gdata_App_Extension_Link element.
+ * This link is in the atom feed/entry as an atom:link with a
+ * rel attribute value of 'self'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getAlternateLink()
+ {
+ return $this->getLink('alternate');
+ }
+
+ /**
+ * @param array $value The array of Zend_Gdata_App_Extension_Link elements
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setLink($value)
+ {
+ $this->_link = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Rights
+ */
+ public function getRights()
+ {
+ return $this->_rights;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Rights $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setRights($value)
+ {
+ $this->_rights = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the title of this feed or entry. The title is an extremely
+ * short textual representation of this resource and is found as
+ * an atom:title element in a feed or entry
+ *
+ * @return Zend_Gdata_App_Extension_Title
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * Returns a string representation of the title of this feed or entry.
+ * The title is an extremely short textual representation of this
+ * resource and is found as an atom:title element in a feed or entry
+ *
+ * @return string
+ */
+ public function getTitleValue()
+ {
+ if (($titleObj = $this->getTitle()) != null) {
+ return $titleObj->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the title of this feed or entry. The title is an extremely
+ * short textual representation of this resource and is found as
+ * an atom:title element in a feed or entry
+ *
+ * @param Zend_Gdata_App_Extension_Title $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ $this->_title = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Updated
+ */
+ public function getUpdated()
+ {
+ return $this->_updated;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Updated $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setUpdated($value)
+ {
+ $this->_updated = $value;
+ return $this;
+ }
+
+ /**
+ * Set the Etag for the current entry to $value. Setting $value to null
+ * unsets the Etag.
+ *
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setEtag($value) {
+ $this->_etag = $value;
+ return $this;
+ }
+
+ /**
+ * Return the Etag for the current entry, or null if not set.
+ *
+ * @return string|null
+ */
+ public function getEtag() {
+ return $this->_etag;
+ }
+
+ /**
+ * Set the major protocol version that should be used. Values < 1
+ * (excluding NULL) will cause a Zend_Gdata_App_InvalidArgumentException
+ * to be thrown.
+ *
+ * @see _majorProtocolVersion
+ * @param (int|NULL) $value The major protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMajorProtocolVersion($value)
+ {
+ if (!($value >= 1) && ($value !== null)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Major protocol version must be >= 1');
+ }
+ $this->_majorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the major protocol version that is in use.
+ *
+ * @see _majorProtocolVersion
+ * @return (int|NULL) The major protocol version in use.
+ */
+ public function getMajorProtocolVersion()
+ {
+ return $this->_majorProtocolVersion;
+ }
+
+ /**
+ * Set the minor protocol version that should be used. If set to NULL, no
+ * minor protocol version will be sent to the server. Values < 0 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * @see _minorProtocolVersion
+ * @param (int|NULL) $value The minor protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMinorProtocolVersion($value)
+ {
+ if (!($value >= 0)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Minor protocol version must be >= 0 or null');
+ }
+ $this->_minorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the minor protocol version that is in use.
+ *
+ * @see _minorProtocolVersion
+ * @return (int|NULL) The major protocol version in use, or NULL if no
+ * minor version is specified.
+ */
+ public function getMinorProtocolVersion()
+ {
+ return $this->_minorProtocolVersion;
+ }
+
+ /**
+ * Get the full version of a namespace prefix
+ *
+ * Looks up a prefix (atom:, etc.) in the list of registered
+ * namespaces and returns the full namespace URI if
+ * available. Returns the prefix, unmodified, if it's not
+ * registered.
+ *
+ * The current entry or feed's version will be used when performing the
+ * namespace lookup unless overridden using $majorVersion and
+ * $minorVersion. If the entry/fee has a null version, then the latest
+ * protocol version will be used by default.
+ *
+ * @param string $prefix The namespace prefix to lookup.
+ * @param integer $majorVersion The major protocol version in effect.
+ * Defaults to null (auto-select).
+ * @param integer $minorVersion The minor protocol version in effect.
+ * Defaults to null (auto-select).
+ * @return string
+ */
+ public function lookupNamespace($prefix,
+ $majorVersion = null,
+ $minorVersion = null)
+ {
+ // Auto-select current version
+ if ($majorVersion === null) {
+ $majorVersion = $this->getMajorProtocolVersion();
+ }
+ if ($minorVersion === null) {
+ $minorVersion = $this->getMinorProtocolVersion();
+ }
+
+ // Perform lookup
+ return parent::lookupNamespace($prefix, $majorVersion, $minorVersion);
+ }
+
+}
diff --git a/Zend/Gdata/App/FeedSourceParent.php b/Zend/Gdata/App/FeedSourceParent.php
new file mode 100644
index 00000000..d1f08f96
--- /dev/null
+++ b/Zend/Gdata/App/FeedSourceParent.php
@@ -0,0 +1,267 @@
+_entry as $entry) {
+ $entry->setHttpClient($httpClient);
+ }
+ return $this;
+ }
+
+ /**
+ * Set the active service instance for this feed and all enclosed entries.
+ * This will be used to perform network requests, such as when calling
+ * save() and delete().
+ *
+ * @param Zend_Gdata_App $instance The new service instance.
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface.
+ */
+ public function setService($instance)
+ {
+ parent::setService($instance);
+ foreach ($this->_entry as $entry) {
+ $entry->setService($instance);
+ }
+ return $this;
+ }
+
+ /**
+ * Make accessing some individual elements of the feed easier.
+ *
+ * Special accessors 'entry' and 'entries' are provided so that if
+ * you wish to iterate over an Atom feed's entries, you can do so
+ * using foreach ($feed->entries as $entry) or foreach
+ * ($feed->entry as $entry).
+ *
+ * @param string $var The property to access.
+ * @return mixed
+ */
+ public function __get($var)
+ {
+ switch ($var) {
+ default:
+ return parent::__get($var);
+ }
+ }
+
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_generator != null) {
+ $element->appendChild($this->_generator->getDOM($element->ownerDocument));
+ }
+ if ($this->_icon != null) {
+ $element->appendChild($this->_icon->getDOM($element->ownerDocument));
+ }
+ if ($this->_logo != null) {
+ $element->appendChild($this->_logo->getDOM($element->ownerDocument));
+ }
+ if ($this->_subtitle != null) {
+ $element->appendChild($this->_subtitle->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'generator':
+ $generator = new Zend_Gdata_App_Extension_Generator();
+ $generator->transferFromDOM($child);
+ $this->_generator = $generator;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'icon':
+ $icon = new Zend_Gdata_App_Extension_Icon();
+ $icon->transferFromDOM($child);
+ $this->_icon = $icon;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'logo':
+ $logo = new Zend_Gdata_App_Extension_Logo();
+ $logo->transferFromDOM($child);
+ $this->_logo = $logo;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'subtitle':
+ $subtitle = new Zend_Gdata_App_Extension_Subtitle();
+ $subtitle->transferFromDOM($child);
+ $this->_subtitle = $subtitle;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Generator
+ */
+ public function getGenerator()
+ {
+ return $this->_generator;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Generator $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setGenerator($value)
+ {
+ $this->_generator = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Icon
+ */
+ public function getIcon()
+ {
+ return $this->_icon;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Icon $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setIcon($value)
+ {
+ $this->_icon = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_logo
+ */
+ public function getlogo()
+ {
+ return $this->_logo;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_logo $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setlogo($value)
+ {
+ $this->_logo = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Subtitle
+ */
+ public function getSubtitle()
+ {
+ return $this->_subtitle;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Subtitle $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setSubtitle($value)
+ {
+ $this->_subtitle = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/HttpException.php b/Zend/Gdata/App/HttpException.php
new file mode 100644
index 00000000..92ba020d
--- /dev/null
+++ b/Zend/Gdata/App/HttpException.php
@@ -0,0 +1,121 @@
+_httpClientException = $e;
+ $this->_response = $response;
+ parent::__construct($message);
+ }
+
+ /**
+ * Get the Zend_Http_Client_Exception.
+ *
+ * @return Zend_Http_Client_Exception
+ */
+ public function getHttpClientException()
+ {
+ return $this->_httpClientException;
+ }
+
+ /**
+ * Set the Zend_Http_Client_Exception.
+ *
+ * @param Zend_Http_Client_Exception $value
+ */
+ public function setHttpClientException($value)
+ {
+ $this->_httpClientException = $value;
+ return $this;
+ }
+
+ /**
+ * Set the Zend_Http_Response.
+ *
+ * @param Zend_Http_Response $response
+ */
+ public function setResponse($response)
+ {
+ $this->_response = $response;
+ return $this;
+ }
+
+ /**
+ * Get the Zend_Http_Response.
+ *
+ * @return Zend_Http_Response
+ */
+ public function getResponse()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Get the body of the Zend_Http_Response
+ *
+ * @return string
+ */
+ public function getRawResponseBody()
+ {
+ if ($this->getResponse()) {
+ $response = $this->getResponse();
+ return $response->getRawBody();
+ }
+ return null;
+ }
+
+}
diff --git a/Zend/Gdata/App/IOException.php b/Zend/Gdata/App/IOException.php
new file mode 100644
index 00000000..f8308e02
--- /dev/null
+++ b/Zend/Gdata/App/IOException.php
@@ -0,0 +1,43 @@
+log_handle == null) {
+ $this->log_handle = fopen($this->config['logfile'], 'a');
+ }
+ fwrite($this->log_handle, $message);
+ }
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ * @param int $timeout
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ $this->log("Connecting to: ${host}:${port}");
+ return parent::connect($host, $port, $secure);
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ $request = parent::write($method, $uri, $http_ver, $headers, $body);
+ $this->log("\n\n" . $request);
+ return $request;
+ }
+
+ /**
+ * Read response from server
+ *
+ * @return string
+ */
+ public function read()
+ {
+ $response = parent::read();
+ $this->log("${response}\n\n");
+ return $response;
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ $this->log("Closing socket\n\n");
+ parent::close();
+ }
+
+}
diff --git a/Zend/Gdata/App/MediaEntry.php b/Zend/Gdata/App/MediaEntry.php
new file mode 100644
index 00000000..0d6a90de
--- /dev/null
+++ b/Zend/Gdata/App/MediaEntry.php
@@ -0,0 +1,119 @@
+_mediaSource = $mediaSource;
+ }
+
+ /**
+ * Return the MIME multipart representation of this MediaEntry.
+ *
+ * @return string|Zend_Gdata_MediaMimeStream The MIME multipart
+ * representation of this MediaEntry. If the entry consisted only
+ * of XML, a string is returned.
+ */
+ public function encode()
+ {
+ $xmlData = $this->saveXML();
+ $mediaSource = $this->getMediaSource();
+ if ($mediaSource === null) {
+ // No attachment, just send XML for entry
+ return $xmlData;
+ } else {
+ return new Zend_Gdata_MediaMimeStream($xmlData,
+ $mediaSource->getFilename(), $mediaSource->getContentType());
+ }
+ }
+
+ /**
+ * Return the MediaSource object representing the file attached to this
+ * MediaEntry.
+ *
+ * @return Zend_Gdata_App_MediaSource The attached MediaSource/file
+ */
+ public function getMediaSource()
+ {
+ return $this->_mediaSource;
+ }
+
+ /**
+ * Set the MediaSource object (file) for this MediaEntry
+ *
+ * @param Zend_Gdata_App_MediaSource $value The attached MediaSource/file
+ * @return Zend_Gdata_App_MediaEntry Provides a fluent interface
+ */
+ public function setMediaSource($value)
+ {
+ if ($value instanceof Zend_Gdata_App_MediaSource) {
+ $this->_mediaSource = $value;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the media data as a class that conforms to Zend_Gdata_App_MediaSource.');
+ }
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/App/MediaFileSource.php b/Zend/Gdata/App/MediaFileSource.php
new file mode 100644
index 00000000..b860968d
--- /dev/null
+++ b/Zend/Gdata/App/MediaFileSource.php
@@ -0,0 +1,146 @@
+setFilename($filename);
+ }
+
+ /**
+ * Return the MIME multipart representation of this MediaEntry.
+ *
+ * @return string
+ * @throws Zend_Gdata_App_IOException
+ */
+ public function encode()
+ {
+ if ($this->getFilename() !== null &&
+ is_readable($this->getFilename())) {
+
+ // Retrieves the file, using the include path
+ $fileHandle = fopen($this->getFilename(), 'r', true);
+ $result = fread($fileHandle, filesize($this->getFilename()));
+ if ($result === false) {
+ require_once 'Zend/Gdata/App/IOException.php';
+ throw new Zend_Gdata_App_IOException("Error reading file - " .
+ $this->getFilename() . '. Read failed.');
+ }
+ fclose($fileHandle);
+ return $result;
+ } else {
+ require_once 'Zend/Gdata/App/IOException.php';
+ throw new Zend_Gdata_App_IOException("Error reading file - " .
+ $this->getFilename() . '. File is not readable.');
+ }
+ }
+
+ /**
+ * Get the filename associated with this reader.
+ *
+ * @return string
+ */
+ public function getFilename()
+ {
+ return $this->_filename;
+ }
+
+ /**
+ * Set the filename which is to be read.
+ *
+ * @param string $value The desired file handle.
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface.
+ */
+ public function setFilename($value)
+ {
+ $this->_filename = $value;
+ return $this;
+ }
+
+ /**
+ * The content type for the file attached (example image/png)
+ *
+ * @return string The content type
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Set the content type for the file attached (example image/png)
+ *
+ * @param string $value The content type
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface
+ */
+ public function setContentType($value)
+ {
+ $this->_contentType = $value;
+ return $this;
+ }
+
+ /**
+ * Alias for getFilename().
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getFilename();
+ }
+
+}
diff --git a/Zend/Gdata/App/MediaSource.php b/Zend/Gdata/App/MediaSource.php
new file mode 100644
index 00000000..d8d89238
--- /dev/null
+++ b/Zend/Gdata/App/MediaSource.php
@@ -0,0 +1,73 @@
+ 0) {
+ // timestamp is already properly formatted
+ return $timestamp;
+ } else {
+ $ts = strtotime($timestamp);
+ if ($ts === false) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException("Invalid timestamp: $timestamp.");
+ }
+ return date('Y-m-d\TH:i:s', $ts);
+ }
+ }
+
+ /** Find the greatest key that is less than or equal to a given upper
+ * bound, and return the value associated with that key.
+ *
+ * @param integer|null $maximumKey The upper bound for keys. If null, the
+ * maxiumum valued key will be found.
+ * @param array $collection An two-dimensional array of key/value pairs
+ * to search through.
+ * @returns mixed The value corresponding to the located key.
+ * @throws Zend_Gdata_App_Exception Thrown if $collection is empty.
+ */
+ public static function findGreatestBoundedValue($maximumKey, $collection)
+ {
+ $found = false;
+ $foundKey = $maximumKey;
+
+ // Sanity check: Make sure that the collection isn't empty
+ if (sizeof($collection) == 0) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("Empty namespace collection encountered.");
+ }
+
+ if ($maximumKey === null) {
+ // If the key is null, then we return the maximum available
+ $keys = array_keys($collection);
+ sort($keys);
+ $found = true;
+ $foundKey = end($keys);
+ } else {
+ // Otherwise, we optimistically guess that the current version
+ // will have a matching namespce. If that fails, we decrement the
+ // version until we find a match.
+ while (!$found && $foundKey >= 0) {
+ if (array_key_exists($foundKey, $collection))
+ $found = true;
+ else
+ $foundKey--;
+ }
+ }
+
+ // Guard: A namespace wasn't found. Either none were registered, or
+ // the current protcol version is lower than the maximum namespace.
+ if (!$found) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("Namespace compatible with current protocol not found.");
+ }
+
+ return $foundKey;
+ }
+
+}
diff --git a/Zend/Gdata/App/VersionException.php b/Zend/Gdata/App/VersionException.php
new file mode 100644
index 00000000..77c7366d
--- /dev/null
+++ b/Zend/Gdata/App/VersionException.php
@@ -0,0 +1,42 @@
+filterHttpRequest('GET', $request_uri);
+ $url = $filterResult['url'];
+ $headers = $filterResult['headers'];
+ $client->setHeaders($headers);
+ $client->setUri($url);
+ } else {
+ $client->setUri($request_uri);
+ }
+
+ try {
+ $response = $client->request('GET');
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+
+ // Parse Google's response
+ if ($response->isSuccessful()) {
+ $goog_resp = array();
+ foreach (explode("\n", $response->getBody()) as $l) {
+ $l = chop($l);
+ if ($l) {
+ list($key, $val) = explode('=', chop($l), 2);
+ $goog_resp[$key] = $val;
+ }
+ }
+ return $goog_resp['Token'];
+ } else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Token upgrade failed. Reason: ' . $response->getBody());
+ }
+ }
+
+ /**
+ * Revoke a token
+ *
+ * @param string $token The token to revoke
+ * @param Zend_Http_Client $client (optional) HTTP client to use to make the request
+ * @param string $request_uri (optional) URI to which to direct the revokation request
+ * @return boolean Whether the revokation was successful
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public static function AuthSubRevokeToken($token, $client = null,
+ $request_uri = self::AUTHSUB_REVOKE_TOKEN_URI)
+ {
+ $client = self::getHttpClient($token, $client);
+
+ if ($client instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $client->filterHttpRequest('GET', $request_uri);
+ $url = $filterResult['url'];
+ $headers = $filterResult['headers'];
+ $client->setHeaders($headers);
+ $client->setUri($url);
+ $client->resetParameters();
+ } else {
+ $client->setUri($request_uri);
+ }
+
+ ob_start();
+ try {
+ $response = $client->request('GET');
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ ob_end_clean();
+ // Parse Google's response
+ if ($response->isSuccessful()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
+ * get token information
+ *
+ * @param string $token The token to retrieve information about
+ * @param Zend_Http_Client $client (optional) HTTP client to use to
+ * make the request
+ * @param string $request_uri (optional) URI to which to direct
+ * the information request
+ */
+ public static function getAuthSubTokenInfo(
+ $token, $client = null, $request_uri = self::AUTHSUB_TOKEN_INFO_URI)
+ {
+ $client = self::getHttpClient($token, $client);
+
+ if ($client instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $client->filterHttpRequest('GET', $request_uri);
+ $url = $filterResult['url'];
+ $headers = $filterResult['headers'];
+ $client->setHeaders($headers);
+ $client->setUri($url);
+ } else {
+ $client->setUri($request_uri);
+ }
+
+ ob_start();
+ try {
+ $response = $client->request('GET');
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ ob_end_clean();
+ return $response->getBody();
+ }
+
+ /**
+ * Retrieve a HTTP client object with AuthSub credentials attached
+ * as the Authorization header
+ *
+ * @param string $token The token to retrieve information about
+ * @param Zend_Gdata_HttpClient $client (optional) HTTP client to use to make the request
+ */
+ public static function getHttpClient($token, $client = null)
+ {
+ if ($client == null) {
+ $client = new Zend_Gdata_HttpClient();
+ }
+ if (!$client instanceof Zend_Http_Client) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException('Client is not an instance of Zend_Http_Client.');
+ }
+ $useragent = 'Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setConfig(array(
+ 'strictredirects' => true,
+ 'useragent' => $useragent
+ )
+ );
+ $client->setAuthSubToken($token);
+ return $client;
+ }
+
+}
diff --git a/Zend/Gdata/Books.php b/Zend/Gdata/Books.php
new file mode 100644
index 00000000..db77c8eb
--- /dev/null
+++ b/Zend/Gdata/Books.php
@@ -0,0 +1,204 @@
+registerPackage('Zend_Gdata_Books');
+ $this->registerPackage('Zend_Gdata_Books_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retrieves a feed of volumes.
+ *
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query or a Zend_Gdata_Query object from which a URL can be
+ * determined.
+ * @return Zend_Gdata_Books_VolumeFeed The feed of volumes found at the
+ * specified URL.
+ */
+ public function getVolumeFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::VOLUME_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Books_VolumeFeed');
+ }
+
+ /**
+ * Retrieves a specific volume entry.
+ *
+ * @param string|null $volumeId The volumeId of interest.
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query or a Zend_Gdata_Query object from which a URL can be
+ * determined.
+ * @return Zend_Gdata_Books_VolumeEntry The feed of volumes found at the
+ * specified URL.
+ */
+ public function getVolumeEntry($volumeId = null, $location = null)
+ {
+ if ($volumeId !== null) {
+ $uri = self::VOLUME_FEED_URI . "/" . $volumeId;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Books_VolumeEntry');
+ }
+
+ /**
+ * Retrieves a feed of volumes, by default the User library feed.
+ *
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query.
+ * @return Zend_Gdata_Books_VolumeFeed The feed of volumes found at the
+ * specified URL.
+ */
+ public function getUserLibraryFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::MY_LIBRARY_FEED_URI;
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Books_VolumeFeed');
+ }
+
+ /**
+ * Retrieves a feed of volumes, by default the User annotation feed
+ *
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query.
+ * @return Zend_Gdata_Books_VolumeFeed The feed of volumes found at the
+ * specified URL.
+ */
+ public function getUserAnnotationFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::MY_ANNOTATION_FEED_URI;
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Books_VolumeFeed');
+ }
+
+ /**
+ * Insert a Volume / Annotation
+ *
+ * @param Zend_Gdata_Books_VolumeEntry $entry
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query
+ * @return Zend_Gdata_Books_VolumeEntry The inserted volume entry.
+ */
+ public function insertVolume($entry, $location = null)
+ {
+ if ($location == null) {
+ $uri = self::MY_LIBRARY_FEED_URI;
+ } else {
+ $uri = $location;
+ }
+ return parent::insertEntry(
+ $entry, $uri, 'Zend_Gdata_Books_VolumeEntry');
+ }
+
+ /**
+ * Delete a Volume
+ *
+ * @param Zend_Gdata_Books_VolumeEntry $entry
+ * @return void
+ */
+ public function deleteVolume($entry)
+ {
+ $entry->delete();
+ }
+
+}
diff --git a/Zend/Gdata/Books/CollectionEntry.php b/Zend/Gdata/Books/CollectionEntry.php
new file mode 100644
index 00000000..39625b6d
--- /dev/null
+++ b/Zend/Gdata/Books/CollectionEntry.php
@@ -0,0 +1,56 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+
+}
+
diff --git a/Zend/Gdata/Books/CollectionFeed.php b/Zend/Gdata/Books/CollectionFeed.php
new file mode 100644
index 00000000..04f7e0b7
--- /dev/null
+++ b/Zend/Gdata/Books/CollectionFeed.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Books_CollectionEntry';
+
+}
+
diff --git a/Zend/Gdata/Books/Extension/AnnotationLink.php b/Zend/Gdata/Books/Extension/AnnotationLink.php
new file mode 100644
index 00000000..590fbcd1
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/AnnotationLink.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
+
diff --git a/Zend/Gdata/Books/Extension/BooksCategory.php b/Zend/Gdata/Books/Extension/BooksCategory.php
new file mode 100644
index 00000000..52d8ea35
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/BooksCategory.php
@@ -0,0 +1,59 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($term, $scheme, $label);
+ }
+
+}
diff --git a/Zend/Gdata/Books/Extension/BooksLink.php b/Zend/Gdata/Books/Extension/BooksLink.php
new file mode 100644
index 00000000..1336cf6a
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/BooksLink.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+
+}
+
diff --git a/Zend/Gdata/Books/Extension/Embeddability.php b/Zend/Gdata/Books/Extension/Embeddability.php
new file mode 100644
index 00000000..af15b947
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/Embeddability.php
@@ -0,0 +1,122 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Extracts XML attributes from the DOM and converts them to the
+ * appropriate object members.
+ *
+ * @param DOMNode $attribute The DOMNode attribute to be handled.
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the programmatic value that describes the embeddability of a
+ * volume in Google Book Search
+ *
+ * @return string|null The value
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Sets the programmatic value that describes the embeddability of a
+ * volume in Google Book Search
+ *
+ * @param string|null $value Programmatic value that describes the
+ * embeddability of a volume in Google Book Search
+ * @return Zend_Gdata_Books_Extension_Embeddability Provides a fluent
+ * interface
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+}
+
diff --git a/Zend/Gdata/Books/Extension/InfoLink.php b/Zend/Gdata/Books/Extension/InfoLink.php
new file mode 100644
index 00000000..8fc9827d
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/InfoLink.php
@@ -0,0 +1,59 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
diff --git a/Zend/Gdata/Books/Extension/PreviewLink.php b/Zend/Gdata/Books/Extension/PreviewLink.php
new file mode 100644
index 00000000..5362b4c9
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/PreviewLink.php
@@ -0,0 +1,60 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
diff --git a/Zend/Gdata/Books/Extension/Review.php b/Zend/Gdata/Books/Extension/Review.php
new file mode 100644
index 00000000..ffa76eb2
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/Review.php
@@ -0,0 +1,152 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct();
+ $this->_lang = $lang;
+ $this->_type = $type;
+ $this->_text = $value;
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_lang !== null) {
+ $element->setAttribute('lang', $this->_lang);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Extracts XML attributes from the DOM and converts them to the
+ * appropriate object members.
+ *
+ * @param DOMNode $attribute The DOMNode attribute to be handled.
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'lang':
+ $this->_lang = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the language of link title
+ *
+ * @return string The lang
+ */
+ public function getLang()
+ {
+ return $this->_lang;
+ }
+
+ /**
+ * Returns the type of text construct (typically 'text', 'html' or 'xhtml')
+ *
+ * @return string The type
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Sets the language of link title
+ *
+ * @param string $lang language of link title
+ * @return Zend_Gdata_Books_Extension_Review Provides a fluent interface
+ */
+ public function setLang($lang)
+ {
+ $this->_lang = $lang;
+ return $this;
+ }
+
+ /**
+ * Sets the type of text construct (typically 'text', 'html' or 'xhtml')
+ *
+ * @param string $type type of text construct (typically 'text', 'html' or 'xhtml')
+ * @return Zend_Gdata_Books_Extension_Review Provides a fluent interface
+ */
+ public function setType($type)
+ {
+ $this->_type = $type;
+ return $this;
+ }
+
+
+}
+
diff --git a/Zend/Gdata/Books/Extension/ThumbnailLink.php b/Zend/Gdata/Books/Extension/ThumbnailLink.php
new file mode 100644
index 00000000..8aae3317
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/ThumbnailLink.php
@@ -0,0 +1,60 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
diff --git a/Zend/Gdata/Books/Extension/Viewability.php b/Zend/Gdata/Books/Extension/Viewability.php
new file mode 100644
index 00000000..bba7900a
--- /dev/null
+++ b/Zend/Gdata/Books/Extension/Viewability.php
@@ -0,0 +1,123 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Extracts XML attributes from the DOM and converts them to the
+ * appropriate object members.
+ *
+ * @param DOMNode $attribute The DOMNode attribute to be handled.
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the programmatic value that describes the viewability of a volume
+ * in Google Book Search
+ *
+ * @return string The value
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Sets the programmatic value that describes the viewability of a volume in
+ * Google Book Search
+ *
+ * @param string $value programmatic value that describes the viewability
+ * of a volume in Googl eBook Search
+ * @return Zend_Gdata_Books_Extension_Viewability Provides a fluent
+ * interface
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+
+}
+
diff --git a/Zend/Gdata/Books/VolumeEntry.php b/Zend/Gdata/Books/VolumeEntry.php
new file mode 100644
index 00000000..67481fea
--- /dev/null
+++ b/Zend/Gdata/Books/VolumeEntry.php
@@ -0,0 +1,687 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_creators !== null) {
+ foreach ($this->_creators as $creators) {
+ $element->appendChild($creators->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_dates !== null) {
+ foreach ($this->_dates as $dates) {
+ $element->appendChild($dates->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_descriptions !== null) {
+ foreach ($this->_descriptions as $descriptions) {
+ $element->appendChild($descriptions->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_formats !== null) {
+ foreach ($this->_formats as $formats) {
+ $element->appendChild($formats->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_identifiers !== null) {
+ foreach ($this->_identifiers as $identifiers) {
+ $element->appendChild($identifiers->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_languages !== null) {
+ foreach ($this->_languages as $languages) {
+ $element->appendChild($languages->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_publishers !== null) {
+ foreach ($this->_publishers as $publishers) {
+ $element->appendChild($publishers->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_subjects !== null) {
+ foreach ($this->_subjects as $subjects) {
+ $element->appendChild($subjects->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_titles !== null) {
+ foreach ($this->_titles as $titles) {
+ $element->appendChild($titles->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_comments !== null) {
+ $element->appendChild($this->_comments->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_embeddability !== null) {
+ $element->appendChild($this->_embeddability->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_rating !== null) {
+ $element->appendChild($this->_rating->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_review !== null) {
+ $element->appendChild($this->_review->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_viewability !== null) {
+ $element->appendChild($this->_viewability->getDOM(
+ $element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual objects of the appropriate type and stores
+ * them in this object based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process.
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('dc') . ':' . 'creator':
+ $creators = new Zend_Gdata_DublinCore_Extension_Creator();
+ $creators->transferFromDOM($child);
+ $this->_creators[] = $creators;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'date':
+ $dates = new Zend_Gdata_DublinCore_Extension_Date();
+ $dates->transferFromDOM($child);
+ $this->_dates[] = $dates;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'description':
+ $descriptions = new Zend_Gdata_DublinCore_Extension_Description();
+ $descriptions->transferFromDOM($child);
+ $this->_descriptions[] = $descriptions;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'format':
+ $formats = new Zend_Gdata_DublinCore_Extension_Format();
+ $formats->transferFromDOM($child);
+ $this->_formats[] = $formats;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'identifier':
+ $identifiers = new Zend_Gdata_DublinCore_Extension_Identifier();
+ $identifiers->transferFromDOM($child);
+ $this->_identifiers[] = $identifiers;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'language':
+ $languages = new Zend_Gdata_DublinCore_Extension_Language();
+ $languages->transferFromDOM($child);
+ $this->_languages[] = $languages;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'publisher':
+ $publishers = new Zend_Gdata_DublinCore_Extension_Publisher();
+ $publishers->transferFromDOM($child);
+ $this->_publishers[] = $publishers;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'subject':
+ $subjects = new Zend_Gdata_DublinCore_Extension_Subject();
+ $subjects->transferFromDOM($child);
+ $this->_subjects[] = $subjects;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'title':
+ $titles = new Zend_Gdata_DublinCore_Extension_Title();
+ $titles->transferFromDOM($child);
+ $this->_titles[] = $titles;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'comments':
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('gbs') . ':' . 'embeddability':
+ $embeddability = new Zend_Gdata_Books_Extension_Embeddability();
+ $embeddability->transferFromDOM($child);
+ $this->_embeddability = $embeddability;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ case $this->lookupNamespace('gbs') . ':' . 'review':
+ $review = new Zend_Gdata_Books_Extension_Review();
+ $review->transferFromDOM($child);
+ $this->_review = $review;
+ break;
+ case $this->lookupNamespace('gbs') . ':' . 'viewability':
+ $viewability = new Zend_Gdata_Books_Extension_Viewability();
+ $viewability->transferFromDOM($child);
+ $this->_viewability = $viewability;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the Comments class
+ *
+ * @return Zend_Gdata_Extension_Comments|null The comments
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * Returns the creators
+ *
+ * @return array The creators
+ */
+ public function getCreators()
+ {
+ return $this->_creators;
+ }
+
+ /**
+ * Returns the dates
+ *
+ * @return array The dates
+ */
+ public function getDates()
+ {
+ return $this->_dates;
+ }
+
+ /**
+ * Returns the descriptions
+ *
+ * @return array The descriptions
+ */
+ public function getDescriptions()
+ {
+ return $this->_descriptions;
+ }
+
+ /**
+ * Returns the embeddability
+ *
+ * @return Zend_Gdata_Books_Extension_Embeddability|null The embeddability
+ */
+ public function getEmbeddability()
+ {
+ return $this->_embeddability;
+ }
+
+ /**
+ * Returns the formats
+ *
+ * @return array The formats
+ */
+ public function getFormats()
+ {
+ return $this->_formats;
+ }
+
+ /**
+ * Returns the identifiers
+ *
+ * @return array The identifiers
+ */
+ public function getIdentifiers()
+ {
+ return $this->_identifiers;
+ }
+
+ /**
+ * Returns the languages
+ *
+ * @return array The languages
+ */
+ public function getLanguages()
+ {
+ return $this->_languages;
+ }
+
+ /**
+ * Returns the publishers
+ *
+ * @return array The publishers
+ */
+ public function getPublishers()
+ {
+ return $this->_publishers;
+ }
+
+ /**
+ * Returns the rating
+ *
+ * @return Zend_Gdata_Extension_Rating|null The rating
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Returns the review
+ *
+ * @return Zend_Gdata_Books_Extension_Review|null The review
+ */
+ public function getReview()
+ {
+ return $this->_review;
+ }
+
+ /**
+ * Returns the subjects
+ *
+ * @return array The subjects
+ */
+ public function getSubjects()
+ {
+ return $this->_subjects;
+ }
+
+ /**
+ * Returns the titles
+ *
+ * @return array The titles
+ */
+ public function getTitles()
+ {
+ return $this->_titles;
+ }
+
+ /**
+ * Returns the viewability
+ *
+ * @return Zend_Gdata_Books_Extension_Viewability|null The viewability
+ */
+ public function getViewability()
+ {
+ return $this->_viewability;
+ }
+
+ /**
+ * Sets the Comments class
+ *
+ * @param Zend_Gdata_Extension_Comments|null $comments Comments class
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setComments($comments)
+ {
+ $this->_comments = $comments;
+ return $this;
+ }
+
+ /**
+ * Sets the creators
+ *
+ * @param array $creators Creators|null
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setCreators($creators)
+ {
+ $this->_creators = $creators;
+ return $this;
+ }
+
+ /**
+ * Sets the dates
+ *
+ * @param array $dates dates
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setDates($dates)
+ {
+ $this->_dates = $dates;
+ return $this;
+ }
+
+ /**
+ * Sets the descriptions
+ *
+ * @param array $descriptions descriptions
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setDescriptions($descriptions)
+ {
+ $this->_descriptions = $descriptions;
+ return $this;
+ }
+
+ /**
+ * Sets the embeddability
+ *
+ * @param Zend_Gdata_Books_Extension_Embeddability|null $embeddability
+ * embeddability
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setEmbeddability($embeddability)
+ {
+ $this->_embeddability = $embeddability;
+ return $this;
+ }
+
+ /**
+ * Sets the formats
+ *
+ * @param array $formats formats
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setFormats($formats)
+ {
+ $this->_formats = $formats;
+ return $this;
+ }
+
+ /**
+ * Sets the identifiers
+ *
+ * @param array $identifiers identifiers
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setIdentifiers($identifiers)
+ {
+ $this->_identifiers = $identifiers;
+ return $this;
+ }
+
+ /**
+ * Sets the languages
+ *
+ * @param array $languages languages
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setLanguages($languages)
+ {
+ $this->_languages = $languages;
+ return $this;
+ }
+
+ /**
+ * Sets the publishers
+ *
+ * @param array $publishers publishers
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setPublishers($publishers)
+ {
+ $this->_publishers = $publishers;
+ return $this;
+ }
+
+ /**
+ * Sets the rating
+ *
+ * @param Zend_Gdata_Extension_Rating|null $rating rating
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setRating($rating)
+ {
+ $this->_rating = $rating;
+ return $this;
+ }
+
+ /**
+ * Sets the review
+ *
+ * @param Zend_Gdata_Books_Extension_Review|null $review review
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setReview($review)
+ {
+ $this->_review = $review;
+ return $this;
+ }
+
+ /**
+ * Sets the subjects
+ *
+ * @param array $subjects subjects
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setSubjects($subjects)
+ {
+ $this->_subjects = $subjects;
+ return $this;
+ }
+
+ /**
+ * Sets the titles
+ *
+ * @param array $titles titles
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setTitles($titles)
+ {
+ $this->_titles = $titles;
+ return $this;
+ }
+
+ /**
+ * Sets the viewability
+ *
+ * @param Zend_Gdata_Books_Extension_Viewability|null $viewability
+ * viewability
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setViewability($viewability)
+ {
+ $this->_viewability = $viewability;
+ return $this;
+ }
+
+
+ /**
+ * Gets the volume ID based upon the atom:id value
+ *
+ * @return string The volume ID
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function getVolumeId()
+ {
+ $fullId = $this->getId()->getText();
+ $position = strrpos($fullId, '/');
+ if ($position === false) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Slash not found in atom:id');
+ } else {
+ return substr($fullId, strrpos($fullId,'/') + 1);
+ }
+ }
+
+ /**
+ * Gets the thumbnail link
+ *
+ * @return Zend_Gdata_App_Extension_link|null The thumbnail link
+ */
+ public function getThumbnailLink()
+ {
+ return $this->getLink(self::THUMBNAIL_LINK_REL);
+ }
+
+ /**
+ * Gets the preview link
+ *
+ * @return Zend_Gdata_App_Extension_Link|null The preview link
+ */
+ public function getPreviewLink()
+ {
+ return $this->getLink(self::PREVIEW_LINK_REL);
+ }
+
+ /**
+ * Gets the info link
+ *
+ * @return Zend_Gdata_App_Extension_Link|null The info link
+ */
+ public function getInfoLink()
+ {
+ return $this->getLink(self::INFO_LINK_REL);
+ }
+
+ /**
+ * Gets the annotations link
+ *
+ * @return Zend_Gdata_App_Extension_Link|null The annotations link
+ */
+ public function getAnnotationLink()
+ {
+ return $this->getLink(self::ANNOTATION_LINK_REL);
+ }
+
+}
diff --git a/Zend/Gdata/Books/VolumeFeed.php b/Zend/Gdata/Books/VolumeFeed.php
new file mode 100644
index 00000000..130ed3a0
--- /dev/null
+++ b/Zend/Gdata/Books/VolumeFeed.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Books_VolumeEntry';
+
+}
+
diff --git a/Zend/Gdata/Books/VolumeQuery.php b/Zend/Gdata/Books/VolumeQuery.php
new file mode 100644
index 00000000..8d284747
--- /dev/null
+++ b/Zend/Gdata/Books/VolumeQuery.php
@@ -0,0 +1,112 @@
+_params['min-viewability'] = 'full';
+ break;
+ case 'partial_view':
+ $this->_params['min-viewability'] = 'partial';
+ break;
+ case null:
+ unset($this->_params['min-viewability']);
+ break;
+ }
+ return $this;
+ }
+
+ /**
+ * Minimum viewability of volumes to include in search results
+ *
+ * @return string|null min-viewability
+ */
+ public function getMinViewability()
+ {
+ if (array_key_exists('min-viewability', $this->_params)) {
+ return $this->_params['min-viewability'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the generated full query URL
+ *
+ * @return string The URL
+ */
+ public function getQueryUrl()
+ {
+ if (isset($this->_url)) {
+ $url = $this->_url;
+ } else {
+ $url = Zend_Gdata_Books::VOLUME_FEED_URI;
+ }
+ if ($this->getCategory() !== null) {
+ $url .= '/-/' . $this->getCategory();
+ }
+ $url = $url . $this->getQueryString();
+ return $url;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar.php b/Zend/Gdata/Calendar.php
new file mode 100644
index 00000000..2d368bb1
--- /dev/null
+++ b/Zend/Gdata/Calendar.php
@@ -0,0 +1,169 @@
+registerPackage('Zend_Gdata_Calendar');
+ $this->registerPackage('Zend_Gdata_Calendar_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retreive feed object
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Calendar_EventFeed
+ */
+ public function getCalendarEventFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::CALENDAR_EVENT_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Calendar_EventFeed');
+ }
+
+ /**
+ * Retreive entry object
+ *
+ * @return Zend_Gdata_Calendar_EventEntry
+ */
+ public function getCalendarEventEntry($location = null)
+ {
+ if ($location == null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Calendar_EventEntry');
+ }
+
+
+ /**
+ * Retrieve feed object
+ *
+ * @return Zend_Gdata_Calendar_ListFeed
+ */
+ public function getCalendarListFeed()
+ {
+ $uri = self::CALENDAR_FEED_URI . '/default';
+ return parent::getFeed($uri,'Zend_Gdata_Calendar_ListFeed');
+ }
+
+ /**
+ * Retreive entryobject
+ *
+ * @return Zend_Gdata_Calendar_ListEntry
+ */
+ public function getCalendarListEntry($location = null)
+ {
+ if ($location == null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri,'Zend_Gdata_Calendar_ListEntry');
+ }
+
+ public function insertEvent($event, $uri=null)
+ {
+ if ($uri == null) {
+ $uri = $this->_defaultPostUri;
+ }
+ $newEvent = $this->insertEntry($event, $uri, 'Zend_Gdata_Calendar_EventEntry');
+ return $newEvent;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/EventEntry.php b/Zend/Gdata/Calendar/EventEntry.php
new file mode 100644
index 00000000..7cc13845
--- /dev/null
+++ b/Zend/Gdata/Calendar/EventEntry.php
@@ -0,0 +1,164 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_sendEventNotifications != null) {
+ $element->appendChild($this->_sendEventNotifications->getDOM($element->ownerDocument));
+ }
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+ if ($this->_quickadd != null) {
+ $element->appendChild($this->_quickadd->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'sendEventNotifications';
+ $sendEventNotifications = new Zend_Gdata_Calendar_Extension_SendEventNotifications();
+ $sendEventNotifications->transferFromDOM($child);
+ $this->_sendEventNotifications = $sendEventNotifications;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'link';
+ $link = new Zend_Gdata_Calendar_Extension_Link();
+ $link->transferFromDOM($child);
+ $this->_link[] = $link;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'quickadd';
+ $quickadd = new Zend_Gdata_Calendar_Extension_QuickAdd();
+ $quickadd->transferFromDOM($child);
+ $this->_quickadd = $quickadd;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getSendEventNotifications()
+ {
+ return $this->_sendEventNotifications;
+ }
+
+ public function setSendEventNotifications($value)
+ {
+ $this->_sendEventNotifications = $value;
+ return $this;
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Timezone $value
+ * @return Zend_Gdata_Extension_EventEntry Provides a fluent interface
+ */
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+ public function getQuickAdd()
+ {
+ return $this->_quickadd;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_QuickAdd $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setQuickAdd($value)
+ {
+ $this->_quickadd = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/EventFeed.php b/Zend/Gdata/Calendar/EventFeed.php
new file mode 100644
index 00000000..f6618ea6
--- /dev/null
+++ b/Zend/Gdata/Calendar/EventFeed.php
@@ -0,0 +1,106 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/EventQuery.php b/Zend/Gdata/Calendar/EventQuery.php
new file mode 100644
index 00000000..95e89e62
--- /dev/null
+++ b/Zend/Gdata/Calendar/EventQuery.php
@@ -0,0 +1,491 @@
+_comments = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_event
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setEvent($value)
+ {
+ $this->_event = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_projection
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_user
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setUser($value)
+ {
+ $this->_user = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_visibility
+ * @param bool $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_comments;
+ * @return string comments
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * @see $_event;
+ * @return string event
+ */
+ public function getEvent()
+ {
+ return $this->_event;
+ }
+
+ /**
+ * @see $_projection
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * @see $_user
+ * @return string user
+ */
+ public function getUser()
+ {
+ return $this->_user;
+ }
+
+ /**
+ * @see $_visibility
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setStartMax($value)
+ {
+ if ($value != null) {
+ $this->_params['start-max'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['start-max']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setStartMin($value)
+ {
+ if ($value != null) {
+ $this->_params['start-min'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['start-min']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value != null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return int start-max
+ */
+ public function getStartMax()
+ {
+ if (array_key_exists('start-max', $this->_params)) {
+ return $this->_params['start-max'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return int start-min
+ */
+ public function getStartMin()
+ {
+ if (array_key_exists('start-min', $this->_params)) {
+ return $this->_params['start-min'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string orderby
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string sortorder
+ */
+ public function getSortOrder()
+ {
+ if (array_key_exists('sortorder', $this->_params)) {
+ return $this->_params['sortorder'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string sortorder
+ */
+ public function setSortOrder($value)
+ {
+ if ($value != null) {
+ $this->_params['sortorder'] = $value;
+ } else {
+ unset($this->_params['sortorder']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string recurrence-expansion-start
+ */
+ public function getRecurrenceExpansionStart()
+ {
+ if (array_key_exists('recurrence-expansion-start', $this->_params)) {
+ return $this->_params['recurrence-expansion-start'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string recurrence-expansion-start
+ */
+ public function setRecurrenceExpansionStart($value)
+ {
+ if ($value != null) {
+ $this->_params['recurrence-expansion-start'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['recurrence-expansion-start']);
+ }
+ return $this;
+ }
+
+
+ /**
+ * @return string recurrence-expansion-end
+ */
+ public function getRecurrenceExpansionEnd()
+ {
+ if (array_key_exists('recurrence-expansion-end', $this->_params)) {
+ return $this->_params['recurrence-expansion-end'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string recurrence-expansion-end
+ */
+ public function setRecurrenceExpansionEnd($value)
+ {
+ if ($value != null) {
+ $this->_params['recurrence-expansion-end'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['recurrence-expansion-end']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value Also accepts bools.
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function getSingleEvents()
+ {
+ if (array_key_exists('singleevents', $this->_params)) {
+ $value = $this->_params['singleevents'];
+ switch ($value) {
+ case 'true':
+ return true;
+ break;
+ case 'false':
+ return false;
+ break;
+ default:
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $value Also accepts bools. If using a string, must be either "true" or "false".
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setSingleEvents($value)
+ {
+ if ($value !== null) {
+ if (is_bool($value)) {
+ $this->_params['singleevents'] = ($value?'true':'false');
+ } elseif ($value == 'true' | $value == 'false') {
+ $this->_params['singleevents'] = $value;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ unset($this->_params['singleevents']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string futureevents
+ */
+ public function getFutureEvents()
+ {
+ if (array_key_exists('futureevents', $this->_params)) {
+ $value = $this->_params['futureevents'];
+ switch ($value) {
+ case 'true':
+ return true;
+ break;
+ case 'false':
+ return false;
+ break;
+ default:
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $value Also accepts bools. If using a string, must be either "true" or "false" or
+ * an exception will be thrown on retrieval.
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setFutureEvents($value)
+ {
+ if ($value !== null) {
+ if (is_bool($value)) {
+ $this->_params['futureevents'] = ($value?'true':'false');
+ } elseif ($value == 'true' | $value == 'false') {
+ $this->_params['futureevents'] = $value;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ unset($this->_params['futureevents']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ if (isset($this->_url)) {
+ $uri = $this->_url;
+ } else {
+ $uri = $this->_defaultFeedUri;
+ }
+ if ($this->getUser() != null) {
+ $uri .= '/' . $this->getUser();
+ }
+ if ($this->getVisibility() != null) {
+ $uri .= '/' . $this->getVisibility();
+ }
+ if ($this->getProjection() != null) {
+ $uri .= '/' . $this->getProjection();
+ }
+ if ($this->getEvent() != null) {
+ $uri .= '/' . $this->getEvent();
+ if ($this->getComments() != null) {
+ $uri .= '/comments/' . $this->getComments();
+ }
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/Extension/AccessLevel.php b/Zend/Gdata/Calendar/Extension/AccessLevel.php
new file mode 100644
index 00000000..40fbb4b5
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/AccessLevel.php
@@ -0,0 +1,125 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The attribute being modified.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Selected The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/Extension/Color.php b/Zend/Gdata/Calendar/Extension/Color.php
new file mode 100644
index 00000000..a209168b
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/Color.php
@@ -0,0 +1,125 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Color The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_value;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/Extension/Hidden.php b/Zend/Gdata/Calendar/Extension/Hidden.php
new file mode 100644
index 00000000..1d757f5b
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/Hidden.php
@@ -0,0 +1,134 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Hidden The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_value;
+ }
+
+}
+
diff --git a/Zend/Gdata/Calendar/Extension/Link.php b/Zend/Gdata/Calendar/Extension/Link.php
new file mode 100644
index 00000000..3c0cbdfa
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/Link.php
@@ -0,0 +1,125 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ $this->_webContent = $webContent;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_webContent != null) {
+ $element->appendChild($this->_webContent->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'webContent':
+ $webContent = new Zend_Gdata_Calendar_Extension_WebContent();
+ $webContent->transferFromDOM($child);
+ $this->_webContent = $webContent;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's WebContent attribute.
+ *
+ * @return Zend_Gdata_Calendar_Extension_Webcontent The WebContent value
+ */
+ public function getWebContent()
+ {
+ return $this->_webContent;
+ }
+
+ /**
+ * Set the value for this element's WebContent attribute.
+ *
+ * @param Zend_Gdata_Calendar_Extension_WebContent $value The desired value for this attribute.
+ * @return Zend_Calendar_Extension_Link The element being modified. Provides a fluent interface.
+ */
+ public function setWebContent($value)
+ {
+ $this->_webContent = $value;
+ return $this;
+ }
+
+
+}
+
diff --git a/Zend/Gdata/Calendar/Extension/QuickAdd.php b/Zend/Gdata/Calendar/Extension/QuickAdd.php
new file mode 100644
index 00000000..dbea50c8
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/QuickAdd.php
@@ -0,0 +1,132 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_QuickAdd The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/Extension/Selected.php b/Zend/Gdata/Calendar/Extension/Selected.php
new file mode 100644
index 00000000..b6447f0e
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/Selected.php
@@ -0,0 +1,133 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return bool The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Selected The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_value;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/Extension/SendEventNotifications.php b/Zend/Gdata/Calendar/Extension/SendEventNotifications.php
new file mode 100644
index 00000000..55bc36df
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/SendEventNotifications.php
@@ -0,0 +1,132 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_SendEventNotifications The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/Zend/Gdata/Calendar/Extension/Timezone.php b/Zend/Gdata/Calendar/Extension/Timezone.php
new file mode 100644
index 00000000..bbd0f148
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/Timezone.php
@@ -0,0 +1,124 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Timezone The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/Extension/WebContent.php b/Zend/Gdata/Calendar/Extension/WebContent.php
new file mode 100644
index 00000000..e0a04829
--- /dev/null
+++ b/Zend/Gdata/Calendar/Extension/WebContent.php
@@ -0,0 +1,177 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_height = $height;
+ $this->_width = $width;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->url != null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->height != null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ if ($this->width != null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's URL attribute.
+ *
+ * @return string The desired value for this attribute.
+ */
+ public function getURL()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Set the value for this element's URL attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_WebContent The element being modified.
+ */
+ public function setURL($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's height attribute.
+ *
+ * @return int The desired value for this attribute.
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * Set the value for this element's height attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_WebContent The element being modified.
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's height attribute.
+ *
+ * @return int The desired value for this attribute.
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * Set the value for this element's height attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_WebContent The element being modified.
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/ListEntry.php b/Zend/Gdata/Calendar/ListEntry.php
new file mode 100644
index 00000000..af7447bc
--- /dev/null
+++ b/Zend/Gdata/Calendar/ListEntry.php
@@ -0,0 +1,246 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_accessLevel != null) {
+ $element->appendChild($this->_accessLevel->getDOM($element->ownerDocument));
+ }
+ if ($this->_color != null) {
+ $element->appendChild($this->_color->getDOM($element->ownerDocument));
+ }
+ if ($this->_hidden != null) {
+ $element->appendChild($this->_hidden->getDOM($element->ownerDocument));
+ }
+ if ($this->_selected != null) {
+ $element->appendChild($this->_selected->getDOM($element->ownerDocument));
+ }
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+ if ($this->_where != null) {
+ foreach ($this->_where as $where) {
+ $element->appendChild($where->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'accesslevel';
+ $accessLevel = new Zend_Gdata_Calendar_Extension_AccessLevel();
+ $accessLevel->transferFromDOM($child);
+ $this->_accessLevel = $accessLevel;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'color';
+ $color = new Zend_Gdata_Calendar_Extension_Color();
+ $color->transferFromDOM($child);
+ $this->_color = $color;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'hidden';
+ $hidden = new Zend_Gdata_Calendar_Extension_Hidden();
+ $hidden->transferFromDOM($child);
+ $this->_hidden = $hidden;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'selected';
+ $selected = new Zend_Gdata_Calendar_Extension_Selected();
+ $selected->transferFromDOM($child);
+ $this->_selected = $selected;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'where';
+ $where = new Zend_Gdata_Extension_Where();
+ $where->transferFromDOM($child);
+ $this->_where[] = $where;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getAccessLevel()
+ {
+ return $this->_accessLevel;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_AccessLevel $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setAccessLevel($value)
+ {
+ $this->_accessLevel = $value;
+ return $this;
+ }
+ public function getColor()
+ {
+ return $this->_color;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Color $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setColor($value)
+ {
+ $this->_color = $value;
+ return $this;
+ }
+
+ public function getHidden()
+ {
+ return $this->_hidden;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Hidden $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setHidden($value)
+ {
+ $this->_hidden = $value;
+ return $this;
+ }
+
+ public function getSelected()
+ {
+ return $this->_selected;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Selected $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setSelected($value)
+ {
+ $this->_selected = $value;
+ return $this;
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Timezone $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ /**
+ * @param Zend_Gdata_Extension_Where $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Calendar/ListFeed.php b/Zend/Gdata/Calendar/ListFeed.php
new file mode 100644
index 00000000..5d44c394
--- /dev/null
+++ b/Zend/Gdata/Calendar/ListFeed.php
@@ -0,0 +1,106 @@
+registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Timezone $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/ClientLogin.php b/Zend/Gdata/ClientLogin.php
new file mode 100644
index 00000000..b38937fb
--- /dev/null
+++ b/Zend/Gdata/ClientLogin.php
@@ -0,0 +1,182 @@
+setUri($loginUri);
+ $useragent = $source . ' Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setConfig(array(
+ 'maxredirects' => 0,
+ 'strictredirects' => true,
+ 'useragent' => $useragent
+ )
+ );
+ $client->setParameterPost('accountType', $accountType);
+ $client->setParameterPost('Email', (string) $email);
+ $client->setParameterPost('Passwd', (string) $password);
+ $client->setParameterPost('service', (string) $service);
+ $client->setParameterPost('source', (string) $source);
+ if ($loginToken || $loginCaptcha) {
+ if($loginToken && $loginCaptcha) {
+ $client->setParameterPost('logintoken', (string) $loginToken);
+ $client->setParameterPost('logincaptcha',
+ (string) $loginCaptcha);
+ }
+ else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Please provide both a token ID and a user\'s response ' .
+ 'to the CAPTCHA challenge.');
+ }
+ }
+
+ // Send the authentication request
+ // For some reason Google's server causes an SSL error. We use the
+ // output buffer to supress an error from being shown. Ugly - but works!
+ ob_start();
+ try {
+ $response = $client->request('POST');
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ ob_end_clean();
+
+ // Parse Google's response
+ $goog_resp = array();
+ foreach (explode("\n", $response->getBody()) as $l) {
+ $l = chop($l);
+ if ($l) {
+ list($key, $val) = explode('=', chop($l), 2);
+ $goog_resp[$key] = $val;
+ }
+ }
+
+ if ($response->getStatus() == 200) {
+ $client->setClientLoginToken($goog_resp['Auth']);
+ $useragent = $source . ' Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setConfig(array(
+ 'strictredirects' => true,
+ 'useragent' => $useragent
+ )
+ );
+ return $client;
+
+ } elseif ($response->getStatus() == 403) {
+ // Check if the server asked for a CAPTCHA
+ if (array_key_exists('Error', $goog_resp) &&
+ $goog_resp['Error'] == 'CaptchaRequired') {
+ require_once 'Zend/Gdata/App/CaptchaRequiredException.php';
+ throw new Zend_Gdata_App_CaptchaRequiredException(
+ $goog_resp['CaptchaToken'], $goog_resp['CaptchaUrl']);
+ }
+ else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException('Authentication with Google failed. Reason: ' .
+ (isset($goog_resp['Error']) ? $goog_resp['Error'] : 'Unspecified.'));
+ }
+ }
+ }
+
+}
+
diff --git a/Zend/Gdata/Docs.php b/Zend/Gdata/Docs.php
new file mode 100644
index 00000000..98eae82f
--- /dev/null
+++ b/Zend/Gdata/Docs.php
@@ -0,0 +1,319 @@
+ 'text/csv',
+ 'DOC' => 'application/msword',
+ 'DOCX' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'HTML' =>'text/html',
+ 'HTM' => 'text/html',
+ 'JPG' => 'image/jpeg',
+ 'ODS' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'ODT' => 'application/vnd.oasis.opendocument.text',
+ 'PDF' => 'application/pdf',
+ 'PNG' => 'image/png',
+ 'PPT' => 'application/vnd.ms-powerpoint',
+ 'PPS' => 'application/vnd.ms-powerpoint',
+ 'RTF' => 'application/rtf',
+ 'SXW' => 'application/vnd.sun.xml.writer',
+ 'TAB' => 'text/tab-separated-values',
+ 'TXT' => 'text/plain',
+ 'TEXT' => 'text/plain',
+ 'TSV' => 'text/tab-separated-values',
+ 'XLS' => 'application/vnd.ms-excel',
+ 'XLSX' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+
+ /**
+ * Create Gdata_Docs object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationName)
+ {
+ $this->registerPackage('Zend_Gdata_Docs');
+ $this->registerPackage('Zend_Gdata_Docs_Extension_WritersCanInvite');
+ parent::__construct($client, $applicationName);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ $this->setMajorProtocolVersion(self::DEFAULT_MAJOR_PROTOCOL_VERSION);
+ }
+
+ /**
+ * Looks up the mime type based on the file name extension. For example,
+ * calling this method with 'csv' would return
+ * 'text/comma-separated-values'. The Mime type is sent as a header in
+ * the upload HTTP POST request.
+ *
+ * @param string $fileExtension
+ * @return string The mime type to be sent to the server to tell it how the
+ * multipart mime data should be interpreted.
+ */
+ public static function lookupMimeType($fileExtension) {
+ return self::$SUPPORTED_FILETYPES[strtoupper($fileExtension)];
+ }
+
+ /**
+ * Retrieve feed object containing entries for the user's documents.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Docs_DocumentListFeed
+ */
+ public function getDocumentListFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::DOCUMENTS_LIST_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Docs_DocumentListFeed');
+ }
+
+ /**
+ * Retrieve entry object representing a single document.
+ *
+ * @param mixed $location The location for the entry, as a URL or Query
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ */
+ public function getDocumentListEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Docs_DocumentListEntry');
+ }
+
+ /**
+ * Retrieve a document entry representing a single document.
+ *
+ * @param string $resourceId The document resource id. Examples:
+ * document:dcmg89gw_62hfjj8m, spreadsheet:pKq0CzjiF3YmGd0AIlHKqeg,
+ * pdf:asdf89hfjjddfg
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ */
+ public function getResource($resourceId) {
+ $uri = 'http://docs.google.com/feeds/documents/private/full/' . $resourceId;
+ return $this->getDocumentListEntry($uri);
+ }
+
+ /**
+ * Retrieve entry object representing a single document.
+ *
+ * This method builds the URL where this item is stored using the type
+ * and the id of the document.
+ * @param string $docId The URL key for the document. Examples:
+ * dcmg89gw_62hfjj8m, pKq0CzjiF3YmGd0AIlHKqeg
+ * @param string $docType The type of the document as used in the Google
+ * Document List URLs. Examples: document, spreadsheet, presentation
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ * @deprecated Use getResource($resourceId) instead.
+ */
+ public function getDoc($docId, $docType) {
+ $location = 'http://docs.google.com/feeds/documents/private/full/' .
+ $docType . '%3A' . $docId;
+ return $this->getDocumentListEntry($location);
+ }
+
+ /**
+ * Retrieve entry object for the desired word processing document.
+ *
+ * @param string $id The URL id for the document. Example:
+ * dcmg89gw_62hfjj8m
+ * @deprecated Use getResource($resourceId) instead.
+ */
+ public function getDocument($id) {
+ return $this->getDoc('document%3A' . $id);
+ }
+
+ /**
+ * Retrieve entry object for the desired spreadsheet.
+ *
+ * @param string $id The URL id for the spreadsheet. Example:
+ * pKq0CzjiF3YmGd0AIlHKqeg
+ * @deprecated Use getResource($resourceId) instead.
+ */
+ public function getSpreadsheet($id) {
+ return $this->getDoc('spreadsheet%3A' . $id);
+ }
+
+ /**
+ * Retrieve entry object for the desired presentation.
+ *
+ * @param string $id The URL id for the presentation. Example:
+ * dcmg89gw_21gtrjcn
+ * @deprecated Use getResource($resourceId) instead.
+ */
+ public function getPresentation($id) {
+ return $this->getDoc('presentation%3A' . $id);
+ }
+
+ /**
+ * Upload a local file to create a new Google Document entry.
+ *
+ * @param string $fileLocation The full or relative path of the file to
+ * be uploaded.
+ * @param string $title The name that this document should have on the
+ * server. If set, the title is used as the slug header in the
+ * POST request. If no title is provided, the location of the
+ * file will be used as the slug header in the request. If no
+ * mimeType is provided, this method attempts to determine the
+ * mime type based on the slugHeader by looking for .doc,
+ * .csv, .txt, etc. at the end of the file name.
+ * Example value: 'test.doc'.
+ * @param string $mimeType Describes the type of data which is being sent
+ * to the server. This must be one of the accepted mime types
+ * which are enumerated in SUPPORTED_FILETYPES.
+ * @param string $uri (optional) The URL to which the upload should be
+ * made.
+ * Example: 'http://docs.google.com/feeds/default/private/full'.
+ * @return Zend_Gdata_Docs_DocumentListEntry The entry for the newly
+ * created Google Document.
+ */
+ public function uploadFile($fileLocation, $title=null, $mimeType=null,
+ $uri=null)
+ {
+ // Set the URI to which the file will be uploaded.
+ if ($uri === null) {
+ $uri = $this->_defaultPostUri;
+ }
+
+ // Create the media source which describes the file.
+ $fs = $this->newMediaFileSource($fileLocation);
+ if ($title !== null) {
+ $slugHeader = $title;
+ } else {
+ $slugHeader = $fileLocation;
+ }
+
+ // Set the slug header to tell the Google Documents server what the
+ // title of the document should be and what the file extension was
+ // for the original file.
+ $fs->setSlug($slugHeader);
+
+ // Set the mime type of the data.
+ if ($mimeType === null) {
+ $slugHeader = $fs->getSlug();
+ $filenameParts = explode('.', $slugHeader);
+ $fileExtension = end($filenameParts);
+ $mimeType = self::lookupMimeType($fileExtension);
+ }
+
+ // Set the mime type for the upload request.
+ $fs->setContentType($mimeType);
+
+ // Send the data to the server.
+ return $this->insertDocument($fs, $uri);
+ }
+
+ /**
+ * Inserts an entry to a given URI and returns the response as an Entry.
+ *
+ * @param mixed $data The Zend_Gdata_Docs_DocumentListEntry or media
+ * source to post. If it is a DocumentListEntry, the mediaSource
+ * should already have been set. If $data is a mediaSource, it
+ * should have the correct slug header and mime type.
+ * @param string $uri POST URI
+ * @param string $className (optional) The class of entry to be returned.
+ * The default is a 'Zend_Gdata_Docs_DocumentListEntry'.
+ * @return Zend_Gdata_Docs_DocumentListEntry The entry returned by the
+ * service after insertion.
+ */
+ public function insertDocument($data, $uri,
+ $className='Zend_Gdata_Docs_DocumentListEntry')
+ {
+ return $this->insertEntry($data, $uri, $className);
+ }
+
+ /**
+ * Return the supported mime types and file extensions.
+ *
+ * @return array
+ * @author Andreas Sandberg
+ */
+ public static function getSupportedMimeTypes() {
+ return self::$SUPPORTED_FILETYPES;
+ }
+
+}
diff --git a/Zend/Gdata/Docs/DocumentListEntry.php b/Zend/Gdata/Docs/DocumentListEntry.php
new file mode 100644
index 00000000..3dc97d24
--- /dev/null
+++ b/Zend/Gdata/Docs/DocumentListEntry.php
@@ -0,0 +1,54 @@
+registerAllNamespaces(Zend_Gdata_Docs::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/Docs/DocumentListFeed.php b/Zend/Gdata/Docs/DocumentListFeed.php
new file mode 100644
index 00000000..b1dbbf2b
--- /dev/null
+++ b/Zend/Gdata/Docs/DocumentListFeed.php
@@ -0,0 +1,68 @@
+registerAllNamespaces(Zend_Gdata_Docs::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/Docs/Query.php b/Zend/Gdata/Docs/Query.php
new file mode 100644
index 00000000..fb80f0fb
--- /dev/null
+++ b/Zend/Gdata/Docs/Query.php
@@ -0,0 +1,228 @@
+_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query. Common values for visibility
+ * include 'private'.
+ *
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ *
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ *
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the title attribute for this query. The title parameter is used
+ * to restrict the results to documents whose titles either contain or
+ * completely match the title.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ if ($value !== null) {
+ $this->_params['title'] = $value;
+ } else {
+ unset($this->_params['title']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the title attribute for this query.
+ *
+ * @return string title
+ */
+ public function getTitle()
+ {
+ if (array_key_exists('title', $this->_params)) {
+ return $this->_params['title'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the title-exact attribute for this query.
+ * If title-exact is set to true, the title query parameter will be used
+ * in an exact match. Only documents with a title identical to the
+ * title parameter will be returned.
+ *
+ * @param boolean $value Use either true or false
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setTitleExact($value)
+ {
+ if ($value) {
+ $this->_params['title-exact'] = $value;
+ } else {
+ unset($this->_params['title-exact']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the title-exact attribute for this query.
+ *
+ * @return string title-exact
+ */
+ public function getTitleExact()
+ {
+ if (array_key_exists('title-exact', $this->_params)) {
+ return $this->_params['title-exact'];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Gets the full query URL for this query.
+ *
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_visibility !== null) {
+ $uri .= '/' . $this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'A visibility must be provided for cell queries.');
+ }
+
+ if ($this->_projection !== null) {
+ $uri .= '/' . $this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'A projection must be provided for cell queries.');
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore.php b/Zend/Gdata/DublinCore.php
new file mode 100644
index 00000000..032786fd
--- /dev/null
+++ b/Zend/Gdata/DublinCore.php
@@ -0,0 +1,65 @@
+registerPackage('Zend_Gdata_DublinCore');
+ $this->registerPackage('Zend_Gdata_DublinCore_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Creator.php b/Zend/Gdata/DublinCore/Extension/Creator.php
new file mode 100644
index 00000000..00492bcb
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Creator.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Date.php b/Zend/Gdata/DublinCore/Extension/Date.php
new file mode 100644
index 00000000..ca9ffae2
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Date.php
@@ -0,0 +1,60 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Description.php b/Zend/Gdata/DublinCore/Extension/Description.php
new file mode 100644
index 00000000..a538b2d0
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Description.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Format.php b/Zend/Gdata/DublinCore/Extension/Format.php
new file mode 100644
index 00000000..97aa51db
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Format.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Identifier.php b/Zend/Gdata/DublinCore/Extension/Identifier.php
new file mode 100644
index 00000000..c1f9a22e
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Identifier.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Language.php b/Zend/Gdata/DublinCore/Extension/Language.php
new file mode 100644
index 00000000..2f8e9b62
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Language.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Publisher.php b/Zend/Gdata/DublinCore/Extension/Publisher.php
new file mode 100644
index 00000000..d609ed0d
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Publisher.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Rights.php b/Zend/Gdata/DublinCore/Extension/Rights.php
new file mode 100644
index 00000000..e8365dfc
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Rights.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Subject.php b/Zend/Gdata/DublinCore/Extension/Subject.php
new file mode 100644
index 00000000..d7f63ece
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Subject.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/DublinCore/Extension/Title.php b/Zend/Gdata/DublinCore/Extension/Title.php
new file mode 100644
index 00000000..04f6833d
--- /dev/null
+++ b/Zend/Gdata/DublinCore/Extension/Title.php
@@ -0,0 +1,58 @@
+registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/Zend/Gdata/Entry.php b/Zend/Gdata/Entry.php
new file mode 100644
index 00000000..b29518b7
--- /dev/null
+++ b/Zend/Gdata/Entry.php
@@ -0,0 +1,132 @@
+registerAllNamespaces(Zend_Gdata::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ // ETags are special. We only support them in protocol >= 2.X.
+ // This will be duplicated by the HTTP ETag header.
+ if ($majorVersion >= 2) {
+ if ($this->_etag != null) {
+ $element->setAttributeNS($this->lookupNamespace('gd'),
+ 'gd:etag',
+ $this->_etag);
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'content':
+ $content = new Zend_Gdata_App_Extension_Content();
+ $content->transferFromDOM($child);
+ $this->_content = $content;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'published':
+ $published = new Zend_Gdata_App_Extension_Published();
+ $published->transferFromDOM($child);
+ $this->_published = $published;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'source':
+ $source = new Zend_Gdata_App_Extension_Source();
+ $source->transferFromDOM($child);
+ $this->_source = $source;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'summary':
+ $summary = new Zend_Gdata_App_Extension_Summary();
+ $summary->transferFromDOM($child);
+ $this->_summary = $summary;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'control':
+ $control = new Zend_Gdata_App_Extension_Control();
+ $control->transferFromDOM($child);
+ $this->_control = $control;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'etag':
+ // ETags are special, since they can be conveyed by either the
+ // HTTP ETag header or as an XML attribute.
+ $etag = $attribute->nodeValue;
+ if ($this->_etag === null) {
+ $this->_etag = $etag;
+ }
+ elseif ($this->_etag != $etag) {
+ require_once('Zend/Gdata/App/IOException.php');
+ throw new Zend_Gdata_App_IOException("ETag mismatch");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ break;
+ }
+ }
+
+}
diff --git a/Zend/Gdata/Exif.php b/Zend/Gdata/Exif.php
new file mode 100644
index 00000000..bea6250d
--- /dev/null
+++ b/Zend/Gdata/Exif.php
@@ -0,0 +1,65 @@
+registerPackage('Zend_Gdata_Exif');
+ $this->registerPackage('Zend_Gdata_Exif_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Entry.php b/Zend/Gdata/Exif/Entry.php
new file mode 100644
index 00000000..da33cbc4
--- /dev/null
+++ b/Zend/Gdata/Exif/Entry.php
@@ -0,0 +1,145 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_tags != null) {
+ $element->appendChild($this->_tags->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('exif') . ':' . 'tags':
+ $tags = new Zend_Gdata_Exif_Extension_Tags();
+ $tags->transferFromDOM($child);
+ $this->_tags = $tags;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Retrieve the tags for this entry.
+ *
+ * @see setTags
+ * @return Zend_Gdata_Exif_Extension_Tags The requested object
+ * or null if not set.
+ */
+ public function getTags()
+ {
+ return $this->_tags;
+ }
+
+ /**
+ * Set the tags property for this entry. This property contains
+ * various Exif data.
+ *
+ * This corresponds to the property in the Google Data
+ * protocol.
+ *
+ * @param Zend_Gdata_Exif_Extension_Tags $value The desired value
+ * this element, or null to unset.
+ * @return Zend_Gdata_Exif_Entry Provides a fluent interface
+ */
+ public function setTags($value)
+ {
+ $this->_tags = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Distance.php b/Zend/Gdata/Exif/Extension/Distance.php
new file mode 100644
index 00000000..44d08827
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Distance.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Exposure.php b/Zend/Gdata/Exif/Extension/Exposure.php
new file mode 100644
index 00000000..052d67ff
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Exposure.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/FStop.php b/Zend/Gdata/Exif/Extension/FStop.php
new file mode 100644
index 00000000..78bb3475
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/FStop.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Flash.php b/Zend/Gdata/Exif/Extension/Flash.php
new file mode 100644
index 00000000..c1473ddf
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Flash.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/FocalLength.php b/Zend/Gdata/Exif/Extension/FocalLength.php
new file mode 100644
index 00000000..6f6ab3e7
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/FocalLength.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/ImageUniqueId.php b/Zend/Gdata/Exif/Extension/ImageUniqueId.php
new file mode 100644
index 00000000..910d6ea3
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/ImageUniqueId.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Iso.php b/Zend/Gdata/Exif/Extension/Iso.php
new file mode 100644
index 00000000..fddf025e
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Iso.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Make.php b/Zend/Gdata/Exif/Extension/Make.php
new file mode 100644
index 00000000..b090f072
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Make.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Model.php b/Zend/Gdata/Exif/Extension/Model.php
new file mode 100644
index 00000000..230bb57a
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Model.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Tags.php b/Zend/Gdata/Exif/Extension/Tags.php
new file mode 100644
index 00000000..38c7cc57
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Tags.php
@@ -0,0 +1,549 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setDistance($distance);
+ $this->setExposure($exposure);
+ $this->setFlash($flash);
+ $this->setFocalLength($focalLength);
+ $this->setFStop($fStop);
+ $this->setImageUniqueId($imageUniqueId);
+ $this->setIso($iso);
+ $this->setMake($make);
+ $this->setModel($model);
+ $this->setTime($time);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_distance !== null) {
+ $element->appendChild($this->_distance->getDOM($element->ownerDocument));
+ }
+ if ($this->_exposure !== null) {
+ $element->appendChild($this->_exposure->getDOM($element->ownerDocument));
+ }
+ if ($this->_flash !== null) {
+ $element->appendChild($this->_flash->getDOM($element->ownerDocument));
+ }
+ if ($this->_focalLength !== null) {
+ $element->appendChild($this->_focalLength->getDOM($element->ownerDocument));
+ }
+ if ($this->_fStop !== null) {
+ $element->appendChild($this->_fStop->getDOM($element->ownerDocument));
+ }
+ if ($this->_imageUniqueId !== null) {
+ $element->appendChild($this->_imageUniqueId->getDOM($element->ownerDocument));
+ }
+ if ($this->_iso !== null) {
+ $element->appendChild($this->_iso->getDOM($element->ownerDocument));
+ }
+ if ($this->_make !== null) {
+ $element->appendChild($this->_make->getDOM($element->ownerDocument));
+ }
+ if ($this->_model !== null) {
+ $element->appendChild($this->_model->getDOM($element->ownerDocument));
+ }
+ if ($this->_time !== null) {
+ $element->appendChild($this->_time->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('exif') . ':' . 'distance';
+ $distance = new Zend_Gdata_Exif_Extension_Distance();
+ $distance->transferFromDOM($child);
+ $this->_distance = $distance;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'exposure';
+ $exposure = new Zend_Gdata_Exif_Extension_Exposure();
+ $exposure->transferFromDOM($child);
+ $this->_exposure = $exposure;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'flash';
+ $flash = new Zend_Gdata_Exif_Extension_Flash();
+ $flash->transferFromDOM($child);
+ $this->_flash = $flash;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'focallength';
+ $focalLength = new Zend_Gdata_Exif_Extension_FocalLength();
+ $focalLength->transferFromDOM($child);
+ $this->_focalLength = $focalLength;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'fstop';
+ $fStop = new Zend_Gdata_Exif_Extension_FStop();
+ $fStop->transferFromDOM($child);
+ $this->_fStop = $fStop;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'imageUniqueID';
+ $imageUniqueId = new Zend_Gdata_Exif_Extension_ImageUniqueId();
+ $imageUniqueId->transferFromDOM($child);
+ $this->_imageUniqueId = $imageUniqueId;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'iso';
+ $iso = new Zend_Gdata_Exif_Extension_Iso();
+ $iso->transferFromDOM($child);
+ $this->_iso = $iso;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'make';
+ $make = new Zend_Gdata_Exif_Extension_Make();
+ $make->transferFromDOM($child);
+ $this->_make = $make;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'model';
+ $model = new Zend_Gdata_Exif_Extension_Model();
+ $model->transferFromDOM($child);
+ $this->_model = $model;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'time';
+ $time = new Zend_Gdata_Exif_Extension_Time();
+ $time->transferFromDOM($child);
+ $this->_time = $time;
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's distance attribute.
+ *
+ * @see setDistance
+ * @return Zend_Gdata_Exif_Extension_Distance The requested attribute.
+ */
+ public function getDistance()
+ {
+ return $this->_distance;
+ }
+
+ /**
+ * Set the value for this element's distance attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Distance $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setDistance($value)
+ {
+ $this->_distance = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's exposure attribute.
+ *
+ * @see setExposure
+ * @return Zend_Gdata_Exif_Extension_Exposure The requested attribute.
+ */
+ public function getExposure()
+ {
+ return $this->_exposure;
+ }
+
+ /**
+ * Set the value for this element's exposure attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Exposure $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setExposure($value)
+ {
+ $this->_exposure = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's flash attribute.
+ *
+ * @see setFlash
+ * @return Zend_Gdata_Exif_Extension_Flash The requested attribute.
+ */
+ public function getFlash()
+ {
+ return $this->_flash;
+ }
+
+ /**
+ * Set the value for this element's flash attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Flash $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setFlash($value)
+ {
+ $this->_flash = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setFocalLength
+ * @return Zend_Gdata_Exif_Extension_FocalLength The requested attribute.
+ */
+ public function getFocalLength()
+ {
+ return $this->_focalLength;
+ }
+
+ /**
+ * Set the value for this element's focalLength attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_FocalLength $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setFocalLength($value)
+ {
+ $this->_focalLength = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's fStop attribute.
+ *
+ * @see setFStop
+ * @return Zend_Gdata_Exif_Extension_FStop The requested attribute.
+ */
+ public function getFStop()
+ {
+ return $this->_fStop;
+ }
+
+ /**
+ * Set the value for this element's fStop attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_FStop $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setFStop($value)
+ {
+ $this->_fStop = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's imageUniqueId attribute.
+ *
+ * @see setImageUniqueId
+ * @return Zend_Gdata_Exif_Extension_ImageUniqueId The requested attribute.
+ */
+ public function getImageUniqueId()
+ {
+ return $this->_imageUniqueId;
+ }
+
+ /**
+ * Set the value for this element's imageUniqueId attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_ImageUniqueId $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setImageUniqueId($value)
+ {
+ $this->_imageUniqueId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's iso attribute.
+ *
+ * @see setIso
+ * @return Zend_Gdata_Exif_Extension_Iso The requested attribute.
+ */
+ public function getIso()
+ {
+ return $this->_iso;
+ }
+
+ /**
+ * Set the value for this element's iso attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Iso $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setIso($value)
+ {
+ $this->_iso = $value;
+ return $this;
+ }
+ /**
+ * Get the value for this element's make attribute.
+ *
+ * @see setMake
+ * @return Zend_Gdata_Exif_Extension_Make The requested attribute.
+ */
+ public function getMake()
+ {
+ return $this->_make;
+ }
+
+ /**
+ * Set the value for this element's make attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Make $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setMake($value)
+ {
+ $this->_make = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's model attribute.
+ *
+ * @see setModel
+ * @return Zend_Gdata_Exif_Extension_Model The requested attribute.
+ */
+ public function getModel()
+ {
+ return $this->_model;
+ }
+
+ /**
+ * Set the value for this element's model attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Model $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setModel($value)
+ {
+ $this->_model = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's time attribute.
+ *
+ * @see setTime
+ * @return Zend_Gdata_Exif_Extension_Time The requested attribute.
+ */
+ public function getTime()
+ {
+ return $this->_time;
+ }
+
+ /**
+ * Set the value for this element's time attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Time $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setTime($value)
+ {
+ $this->_time = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Extension/Time.php b/Zend/Gdata/Exif/Extension/Time.php
new file mode 100644
index 00000000..5fe3ee85
--- /dev/null
+++ b/Zend/Gdata/Exif/Extension/Time.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Exif/Feed.php b/Zend/Gdata/Exif/Feed.php
new file mode 100644
index 00000000..b100ccee
--- /dev/null
+++ b/Zend/Gdata/Exif/Feed.php
@@ -0,0 +1,70 @@
+registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/Extension.php b/Zend/Gdata/Extension.php
new file mode 100644
index 00000000..233a084a
--- /dev/null
+++ b/Zend/Gdata/Extension.php
@@ -0,0 +1,58 @@
+registerNamespace('gd',
+ 'http://schemas.google.com/g/2005');
+ $this->registerNamespace('openSearch',
+ 'http://a9.com/-/spec/opensearchrss/1.0/', 1, 0);
+ $this->registerNamespace('openSearch',
+ 'http://a9.com/-/spec/opensearch/1.1/', 2, 0);
+ $this->registerNamespace('rss',
+ 'http://blogs.law.harvard.edu/tech/rss');
+
+ parent::__construct();
+ }
+
+}
diff --git a/Zend/Gdata/Extension/AttendeeStatus.php b/Zend/Gdata/Extension/AttendeeStatus.php
new file mode 100644
index 00000000..42866fab
--- /dev/null
+++ b/Zend/Gdata/Extension/AttendeeStatus.php
@@ -0,0 +1,123 @@
+_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/Zend/Gdata/Extension/AttendeeType.php b/Zend/Gdata/Extension/AttendeeType.php
new file mode 100644
index 00000000..1127f226
--- /dev/null
+++ b/Zend/Gdata/Extension/AttendeeType.php
@@ -0,0 +1,123 @@
+_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/Zend/Gdata/Extension/Comments.php b/Zend/Gdata/Extension/Comments.php
new file mode 100644
index 00000000..0397f525
--- /dev/null
+++ b/Zend/Gdata/Extension/Comments.php
@@ -0,0 +1,117 @@
+_rel = $rel;
+ $this->_feedLink = $feedLink;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_feedLink !== null) {
+ $element->appendChild($this->_feedLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'feedLink';
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getFeedLink()
+ {
+ return $this->_feedLink;
+ }
+
+ public function setFeedLink($value)
+ {
+ $this->_feedLink = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/EntryLink.php b/Zend/Gdata/Extension/EntryLink.php
new file mode 100644
index 00000000..5da4710b
--- /dev/null
+++ b/Zend/Gdata/Extension/EntryLink.php
@@ -0,0 +1,167 @@
+_href = $href;
+ $this->_readOnly = $readOnly;
+ $this->_rel = $rel;
+ $this->_entry = $entry;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_readOnly !== null) {
+ $element->setAttribute('readOnly', ($this->_readOnly ? "true" : "false"));
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_entry !== null) {
+ $element->appendChild($this->_entry->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'entry';
+ $entry = new Zend_Gdata_Entry();
+ $entry->transferFromDOM($child);
+ $this->_entry = $entry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ case 'readOnly':
+ if ($attribute->nodeValue == "true") {
+ $this->_readOnly = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_readOnly = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ public function getReadOnly()
+ {
+ return $this->_readOnly;
+ }
+
+ public function setReadOnly($value)
+ {
+ $this->_readOnly = $value;
+ return $this;
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ public function setEntry($value)
+ {
+ $this->_entry = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/EventStatus.php b/Zend/Gdata/Extension/EventStatus.php
new file mode 100644
index 00000000..6d8ee00d
--- /dev/null
+++ b/Zend/Gdata/Extension/EventStatus.php
@@ -0,0 +1,101 @@
+_value = $value;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/Zend/Gdata/Extension/ExtendedProperty.php b/Zend/Gdata/Extension/ExtendedProperty.php
new file mode 100644
index 00000000..d7a41b76
--- /dev/null
+++ b/Zend/Gdata/Extension/ExtendedProperty.php
@@ -0,0 +1,106 @@
+_name = $name;
+ $this->_value = $value;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function __toString()
+ {
+ return $this->getName() . '=' . $this->getValue();
+ }
+
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/FeedLink.php b/Zend/Gdata/Extension/FeedLink.php
new file mode 100644
index 00000000..1e3918b0
--- /dev/null
+++ b/Zend/Gdata/Extension/FeedLink.php
@@ -0,0 +1,175 @@
+_countHint = $countHint;
+ $this->_href = $href;
+ $this->_readOnly = $readOnly;
+ $this->_rel = $rel;
+ $this->_feed = $feed;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_countHint !== null) {
+ $element->setAttribute('countHint', $this->_countHint);
+ }
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_readOnly !== null) {
+ $element->setAttribute('readOnly', ($this->_readOnly ? "true" : "false"));
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_feed !== null) {
+ $element->appendChild($this->_feed->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'feed';
+ $feed = new Zend_Gdata_Feed();
+ $feed->transferFromDOM($child);
+ $this->_feed = $feed;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'countHint':
+ $this->_countHint = $attribute->nodeValue;
+ break;
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ case 'readOnly':
+ if ($attribute->nodeValue == "true") {
+ $this->_readOnly = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_readOnly = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ public function getReadOnly()
+ {
+ return $this->_readOnly;
+ }
+
+ public function setReadOnly($value)
+ {
+ $this->_readOnly = $value;
+ return $this;
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getFeed()
+ {
+ return $this->_feed;
+ }
+
+ public function setFeed($value)
+ {
+ $this->_feed = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/OpenSearchItemsPerPage.php b/Zend/Gdata/Extension/OpenSearchItemsPerPage.php
new file mode 100644
index 00000000..d97a414b
--- /dev/null
+++ b/Zend/Gdata/Extension/OpenSearchItemsPerPage.php
@@ -0,0 +1,50 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/OpenSearchStartIndex.php b/Zend/Gdata/Extension/OpenSearchStartIndex.php
new file mode 100644
index 00000000..c1a6cedb
--- /dev/null
+++ b/Zend/Gdata/Extension/OpenSearchStartIndex.php
@@ -0,0 +1,50 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/OpenSearchTotalResults.php b/Zend/Gdata/Extension/OpenSearchTotalResults.php
new file mode 100644
index 00000000..83e43bf4
--- /dev/null
+++ b/Zend/Gdata/Extension/OpenSearchTotalResults.php
@@ -0,0 +1,50 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/OriginalEvent.php b/Zend/Gdata/Extension/OriginalEvent.php
new file mode 100644
index 00000000..28254a11
--- /dev/null
+++ b/Zend/Gdata/Extension/OriginalEvent.php
@@ -0,0 +1,142 @@
+_id = $id;
+ $this->_href = $href;
+ $this->_when = $when;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_id !== null) {
+ $element->setAttribute('id', $this->_id);
+ }
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_when !== null) {
+ $element->appendChild($this->_when->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'id':
+ $this->_id = $attribute->nodeValue;
+ break;
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'when';
+ $when = new Zend_Gdata_Extension_When();
+ $when->transferFromDOM($child);
+ $this->_when = $when;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ public function setId($value)
+ {
+ $this->_id = $value;
+ return $this;
+ }
+
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ public function getWhen()
+ {
+ return $this->_when;
+ }
+
+ public function setWhen($value)
+ {
+ $this->_when = $value;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/Extension/Rating.php b/Zend/Gdata/Extension/Rating.php
new file mode 100644
index 00000000..942cabfb
--- /dev/null
+++ b/Zend/Gdata/Extension/Rating.php
@@ -0,0 +1,240 @@
+_average = $average;
+ $this->_min = $min;
+ $this->_max = $max;
+ $this->_numRaters = $numRaters;
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_min !== null) {
+ $element->setAttribute('min', $this->_min);
+ }
+ if ($this->_max !== null) {
+ $element->setAttribute('max', $this->_max);
+ }
+ if ($this->_numRaters !== null) {
+ $element->setAttribute('numRaters', $this->_numRaters);
+ }
+ if ($this->_average !== null) {
+ $element->setAttribute('average', $this->_average);
+ }
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'min':
+ $this->_min = $attribute->nodeValue;
+ break;
+ case 'max':
+ $this->_max = $attribute->nodeValue;
+ break;
+ case 'numRaters':
+ $this->_numRaters = $attribute->nodeValue;
+ break;
+ case 'average':
+ $this->_average = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's min attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getMin()
+ {
+ return $this->_min;
+ }
+
+ /**
+ * Set the value for this element's min attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setMin($value)
+ {
+ $this->_min = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's numRaters attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getNumRaters()
+ {
+ return $this->_numRaters;
+ }
+
+ /**
+ * Set the value for this element's numRaters attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setNumRaters($value)
+ {
+ $this->_numRaters = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's average attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getAverage()
+ {
+ return $this->_average;
+ }
+
+ /**
+ * Set the value for this element's average attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setAverage($value)
+ {
+ $this->_average = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's max attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getMax()
+ {
+ return $this->_max;
+ }
+
+ /**
+ * Set the value for this element's max attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setMax($value)
+ {
+ $this->_max = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/Recurrence.php b/Zend/Gdata/Extension/Recurrence.php
new file mode 100644
index 00000000..ce730385
--- /dev/null
+++ b/Zend/Gdata/Extension/Recurrence.php
@@ -0,0 +1,49 @@
+_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/RecurrenceException.php b/Zend/Gdata/Extension/RecurrenceException.php
new file mode 100644
index 00000000..456b4d15
--- /dev/null
+++ b/Zend/Gdata/Extension/RecurrenceException.php
@@ -0,0 +1,215 @@
+_specialized = $specialized;
+ $this->_entryLink = $entryLink;
+ $this->_originalEvent = $originalEvent;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_specialized !== null) {
+ $element->setAttribute('specialized', ($this->_specialized ? "true" : "false"));
+ }
+ if ($this->_entryLink !== null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+ if ($this->_originalEvent !== null) {
+ $element->appendChild($this->_originalEvent->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'specialized':
+ if ($attribute->nodeValue == "true") {
+ $this->_specialized = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_specialized = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'originalEvent':
+ $originalEvent = new Zend_Gdata_Extension_OriginalEvent();
+ $originalEvent->transferFromDOM($child);
+ $this->_originalEvent = $originalEvent;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's Specialized attribute.
+ *
+ * @return bool The requested attribute.
+ */
+ public function getSpecialized()
+ {
+ return $this->_specialized;
+ }
+
+ /**
+ * Set the value for this element's Specialized attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_RecurrenceException The element being modified.
+ */
+ public function setSpecialized($value)
+ {
+ $this->_specialized = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's EntryLink attribute.
+ *
+ * @return Zend_Gdata_Extension_EntryLink The requested attribute.
+ */
+ public function getEntryLink()
+ {
+ return $this->_entryLink;
+ }
+
+ /**
+ * Set the value for this element's EntryLink attribute.
+ *
+ * @param Zend_Gdata_Extension_EntryLink $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_RecurrenceException The element being modified.
+ */
+ public function setEntryLink($value)
+ {
+ $this->_entryLink = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's Specialized attribute.
+ *
+ * @return Zend_Gdata_Extension_OriginalEvent The requested attribute.
+ */
+ public function getOriginalEvent()
+ {
+ return $this->_originalEvent;
+ }
+
+ /**
+ * Set the value for this element's Specialized attribute.
+ *
+ * @param Zend_Gdata_Extension_OriginalEvent $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_RecurrenceException The element being modified.
+ */
+ public function setOriginalEvent($value)
+ {
+ $this->_originalEvent = $value;
+ return $this;
+ }
+
+}
+
diff --git a/Zend/Gdata/Extension/Reminder.php b/Zend/Gdata/Extension/Reminder.php
new file mode 100644
index 00000000..82b72826
--- /dev/null
+++ b/Zend/Gdata/Extension/Reminder.php
@@ -0,0 +1,171 @@
+_absoluteTime = $absoluteTime;
+ $this->_method = $method;
+ $this->_days = $days;
+ $this->_hours = $hours;
+ $this->_minutes = $minutes;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_absoluteTime !== null) {
+ $element->setAttribute('absoluteTime', $this->_absoluteTime);
+ }
+ if ($this->_method !== null) {
+ $element->setAttribute('method', $this->_method);
+ }
+ if ($this->_days !== null) {
+ $element->setAttribute('days', $this->_days);
+ }
+ if ($this->_hours !== null) {
+ $element->setAttribute('hours', $this->_hours);
+ }
+ if ($this->_minutes !== null) {
+ $element->setAttribute('minutes', $this->_minutes);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'absoluteTime':
+ $this->_absoluteTime = $attribute->nodeValue;
+ break;
+ case 'method':
+ $this->_method = $attribute->nodeValue;
+ break;
+ case 'days':
+ $this->_days = $attribute->nodeValue;
+ break;
+ case 'hours':
+ $this->_hours = $attribute->nodeValue;
+ break;
+ case 'minutes':
+ $this->_minutes = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function __toString()
+ {
+ $s = '';
+ if ($this->_absoluteTime)
+ $s = " at " . $this->_absoluteTime;
+ else if ($this->_days)
+ $s = " in " . $this->_days . " days";
+ else if ($this->_hours)
+ $s = " in " . $this->_hours . " hours";
+ else if ($this->_minutes)
+ $s = " in " . $this->_minutes . " minutes";
+ return $this->_method . $s;
+ }
+
+ public function getAbsoluteTime()
+ {
+ return $this->_absoluteTime;
+ }
+
+ public function setAbsoluteTime($value)
+ {
+ $this->_absoluteTime = $value;
+ return $this;
+ }
+
+ public function getDays()
+ {
+ return $this->_days;
+ }
+
+ public function setDays($value)
+ {
+ $this->_days = $value;
+ return $this;
+ }
+ public function getHours()
+ {
+ return $this->_hours;
+ }
+
+ public function setHours($value)
+ {
+ $this->_hours = $value;
+ return $this;
+ }
+
+ public function getMinutes()
+ {
+ return $this->_minutes;
+ }
+
+ public function setMinutes($value)
+ {
+ $this->_minutes = $value;
+ return $this;
+ }
+
+ public function getMethod()
+ {
+ return $this->_method;
+ }
+
+ public function setMethod($value)
+ {
+ $this->_method = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/Transparency.php b/Zend/Gdata/Extension/Transparency.php
new file mode 100644
index 00000000..d271740d
--- /dev/null
+++ b/Zend/Gdata/Extension/Transparency.php
@@ -0,0 +1,123 @@
+_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return bool The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Transparency The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/Zend/Gdata/Extension/Visibility.php b/Zend/Gdata/Extension/Visibility.php
new file mode 100644
index 00000000..bdd84daf
--- /dev/null
+++ b/Zend/Gdata/Extension/Visibility.php
@@ -0,0 +1,123 @@
+_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return bool The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/Zend/Gdata/Extension/When.php b/Zend/Gdata/Extension/When.php
new file mode 100644
index 00000000..5cdac8b0
--- /dev/null
+++ b/Zend/Gdata/Extension/When.php
@@ -0,0 +1,169 @@
+_startTime = $startTime;
+ $this->_endTime = $endTime;
+ $this->_valueString = $valueString;
+ $this->_reminders = $reminders;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_startTime !== null) {
+ $element->setAttribute('startTime', $this->_startTime);
+ }
+ if ($this->_endTime !== null) {
+ $element->setAttribute('endTime', $this->_endTime);
+ }
+ if ($this->_valueString !== null) {
+ $element->setAttribute('valueString', $this->_valueString);
+ }
+ if ($this->_reminders !== null) {
+ foreach ($this->_reminders as $reminder) {
+ $element->appendChild(
+ $reminder->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'reminder';
+ $reminder = new Zend_Gdata_Extension_Reminder();
+ $reminder->transferFromDOM($child);
+ $this->_reminders[] = $reminder;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'startTime':
+ $this->_startTime = $attribute->nodeValue;
+ break;
+ case 'endTime':
+ $this->_endTime = $attribute->nodeValue;
+ break;
+ case 'valueString':
+ $this->_valueString = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function __toString()
+ {
+ if ($this->_valueString)
+ return $this->_valueString;
+ else {
+ return 'Starts: ' . $this->getStartTime() . ' ' .
+ 'Ends: ' . $this->getEndTime();
+ }
+ }
+
+ public function getStartTime()
+ {
+ return $this->_startTime;
+ }
+
+ public function setStartTime($value)
+ {
+ $this->_startTime = $value;
+ return $this;
+ }
+
+ public function getEndTime()
+ {
+ return $this->_endTime;
+ }
+
+ public function setEndTime($value)
+ {
+ $this->_endTime = $value;
+ return $this;
+ }
+
+ public function getValueString()
+ {
+ return $this->_valueString;
+ }
+
+ public function setValueString($value)
+ {
+ $this->_valueString = $value;
+ return $this;
+ }
+
+ public function getReminders()
+ {
+ return $this->_reminders;
+ }
+
+ public function setReminders($value)
+ {
+ $this->_reminders = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/Where.php b/Zend/Gdata/Extension/Where.php
new file mode 100644
index 00000000..cd36bc21
--- /dev/null
+++ b/Zend/Gdata/Extension/Where.php
@@ -0,0 +1,171 @@
+_valueString = $valueString;
+ $this->_label = $label;
+ $this->_rel = $rel;
+ $this->_entryLink = $entryLink;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_label !== null) {
+ $element->setAttribute('label', $this->_label);
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_valueString !== null) {
+ $element->setAttribute('valueString', $this->_valueString);
+ }
+ if ($this->entryLink !== null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'label':
+ $this->_label = $attribute->nodeValue;
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ case 'valueString':
+ $this->_valueString = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function __toString()
+ {
+ if ($this->_valueString != null) {
+ return $this->_valueString;
+ }
+ else {
+ return parent::__toString();
+ }
+ }
+
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ public function setLabel($value)
+ {
+ $this->_label = $value;
+ return $this;
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getValueString()
+ {
+ return $this->_valueString;
+ }
+
+ public function setValueString($value)
+ {
+ $this->_valueString = $value;
+ return $this;
+ }
+
+ public function getEntryLink()
+ {
+ return $this->_entryLink;
+ }
+
+ public function setEntryLink($value)
+ {
+ $this->_entryLink = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Extension/Who.php b/Zend/Gdata/Extension/Who.php
new file mode 100644
index 00000000..d1477461
--- /dev/null
+++ b/Zend/Gdata/Extension/Who.php
@@ -0,0 +1,299 @@
+_email = $email;
+ $this->_rel = $rel;
+ $this->_valueString = $valueString;
+ $this->_attendeeStatus = $attendeeStatus;
+ $this->_attendeeType = $attendeeType;
+ $this->_entryLink = $entryLink;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_email !== null) {
+ $element->setAttribute('email', $this->_email);
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_valueString !== null) {
+ $element->setAttribute('valueString', $this->_valueString);
+ }
+ if ($this->_attendeeStatus !== null) {
+ $element->appendChild($this->_attendeeStatus->getDOM($element->ownerDocument));
+ }
+ if ($this->_attendeeType !== null) {
+ $element->appendChild($this->_attendeeType->getDOM($element->ownerDocument));
+ }
+ if ($this->_entryLink !== null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'email':
+ $this->_email = $attribute->nodeValue;
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ case 'valueString':
+ $this->_valueString = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'attendeeStatus':
+ $attendeeStatus = new Zend_Gdata_Extension_AttendeeStatus();
+ $attendeeStatus->transferFromDOM($child);
+ $this->_attendeeStatus = $attendeeStatus;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'attendeeType':
+ $attendeeType = new Zend_Gdata_Extension_AttendeeType();
+ $attendeeType->transferFromDOM($child);
+ $this->_attendeeType = $attendeeType;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Retrieves a human readable string describing this attribute's value.
+ *
+ * @return string The attribute value.
+ */
+ public function __toString()
+ {
+ if ($this->_valueString != null) {
+ return $this->_valueString;
+ }
+ else {
+ return parent::__toString();
+ }
+ }
+
+ /**
+ * Get the value for this element's ValueString attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValueString()
+ {
+ return $this->_valueString;
+ }
+
+ /**
+ * Set the value for this element's ValueString attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setValueString($value)
+ {
+ $this->_valueString = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's Email attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getEmail()
+ {
+ return $this->_email;
+ }
+
+ /**
+ * Set the value for this element's Email attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setEmail($value)
+ {
+ $this->_email = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's Rel attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ /**
+ * Set the value for this element's Rel attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ /**
+ * Get this entry's AttendeeStatus element.
+ *
+ * @return Zend_Gdata_Extension_AttendeeStatus The requested entry.
+ */
+ public function getAttendeeStatus()
+ {
+ return $this->_attendeeStatus;
+ }
+
+ /**
+ * Set the child's AttendeeStatus element.
+ *
+ * @param Zend_Gdata_Extension_AttendeeStatus $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setAttendeeStatus($value)
+ {
+ $this->_attendeeStatus = $value;
+ return $this;
+ }
+
+ /**
+ * Get this entry's AttendeeType element.
+ *
+ * @return Zend_Gdata_Extension_AttendeeType The requested entry.
+ */
+ public function getAttendeeType()
+ {
+ return $this->_attendeeType;
+ }
+
+ /**
+ * Set the child's AttendeeType element.
+ *
+ * @param Zend_Gdata_Extension_AttendeeType $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setAttendeeType($value)
+ {
+ $this->_attendeeType = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Feed.php b/Zend/Gdata/Feed.php
new file mode 100644
index 00000000..c3e89224
--- /dev/null
+++ b/Zend/Gdata/Feed.php
@@ -0,0 +1,251 @@
+registerAllNamespaces(Zend_Gdata::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_totalResults != null) {
+ $element->appendChild($this->_totalResults->getDOM($element->ownerDocument));
+ }
+ if ($this->_startIndex != null) {
+ $element->appendChild($this->_startIndex->getDOM($element->ownerDocument));
+ }
+ if ($this->_itemsPerPage != null) {
+ $element->appendChild($this->_itemsPerPage->getDOM($element->ownerDocument));
+ }
+
+ // ETags are special. We only support them in protocol >= 2.X.
+ // This will be duplicated by the HTTP ETag header.
+ if ($majorVersion >= 2) {
+ if ($this->_etag != null) {
+ $element->setAttributeNS($this->lookupNamespace('gd'),
+ 'gd:etag',
+ $this->_etag);
+ }
+ }
+
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('openSearch') . ':' . 'totalResults':
+ $totalResults = new Zend_Gdata_Extension_OpenSearchTotalResults();
+ $totalResults->transferFromDOM($child);
+ $this->_totalResults = $totalResults;
+ break;
+ case $this->lookupNamespace('openSearch') . ':' . 'startIndex':
+ $startIndex = new Zend_Gdata_Extension_OpenSearchStartIndex();
+ $startIndex->transferFromDOM($child);
+ $this->_startIndex = $startIndex;
+ break;
+ case $this->lookupNamespace('openSearch') . ':' . 'itemsPerPage':
+ $itemsPerPage = new Zend_Gdata_Extension_OpenSearchItemsPerPage();
+ $itemsPerPage->transferFromDOM($child);
+ $this->_itemsPerPage = $itemsPerPage;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'etag':
+ // ETags are special, since they can be conveyed by either the
+ // HTTP ETag header or as an XML attribute.
+ $etag = $attribute->nodeValue;
+ if ($this->_etag === null) {
+ $this->_etag = $etag;
+ }
+ elseif ($this->_etag != $etag) {
+ require_once('Zend/Gdata/App/IOException.php');
+ throw new Zend_Gdata_App_IOException("ETag mismatch");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ break;
+ }
+ }
+
+ /**
+ * Set the value of the totalResults property.
+ *
+ * @param Zend_Gdata_Extension_OpenSearchTotalResults|null $value The
+ * value of the totalResults property. Use null to unset.
+ * @return Zend_Gdata_Feed Provides a fluent interface.
+ */
+ function setTotalResults($value) {
+ $this->_totalResults = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the totalResults property.
+ *
+ * @return Zend_Gdata_Extension_OpenSearchTotalResults|null The value of
+ * the totalResults property, or null if unset.
+ */
+ function getTotalResults() {
+ return $this->_totalResults;
+ }
+
+ /**
+ * Set the start index property for feed paging.
+ *
+ * @param Zend_Gdata_Extension_OpenSearchStartIndex|null $value The value
+ * for the startIndex property. Use null to unset.
+ * @return Zend_Gdata_Feed Provides a fluent interface.
+ */
+ function setStartIndex($value) {
+ $this->_startIndex = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the startIndex property.
+ *
+ * @return Zend_Gdata_Extension_OpenSearchStartIndex|null The value of the
+ * startIndex property, or null if unset.
+ */
+ function getStartIndex() {
+ return $this->_startIndex;
+ }
+
+ /**
+ * Set the itemsPerPage property.
+ *
+ * @param Zend_Gdata_Extension_OpenSearchItemsPerPage|null $value The
+ * value for the itemsPerPage property. Use nul to unset.
+ * @return Zend_Gdata_Feed Provides a fluent interface.
+ */
+ function setItemsPerPage($value) {
+ $this->_itemsPerPage = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the itemsPerPage property.
+ *
+ * @return Zend_Gdata_Extension_OpenSearchItemsPerPage|null The value of
+ * the itemsPerPage property, or null if unset.
+ */
+ function getItemsPerPage() {
+ return $this->_itemsPerPage;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps.php b/Zend/Gdata/Gapps.php
new file mode 100644
index 00000000..410da5a1
--- /dev/null
+++ b/Zend/Gdata/Gapps.php
@@ -0,0 +1,1683 @@
+registerPackage('Zend_Gdata_Gapps');
+ $this->registerPackage('Zend_Gdata_Gapps_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ $this->_domain = $domain;
+ }
+
+ /**
+ * Convert an exception to an ServiceException if an AppsForYourDomain
+ * XML document is contained within the original exception's HTTP
+ * response. If conversion fails, throw the original error.
+ *
+ * @param Zend_Gdata_Exception $e The exception to convert.
+ * @throws Zend_Gdata_Gapps_ServiceException
+ * @throws mixed
+ */
+ public static function throwServiceExceptionIfDetected($e) {
+ // Check to make sure that there actually response!
+ // This can happen if the connection dies before the request
+ // completes. (See ZF-5949)
+ $response = $e->getResponse();
+ if (!$response) {
+ require_once('Zend/Gdata/App/IOException.php');
+ throw new Zend_Gdata_App_IOException('No HTTP response received (possible connection failure)');
+ }
+
+ try {
+ // Check to see if there is an AppsForYourDomainErrors
+ // datastructure in the response. If so, convert it to
+ // an exception and throw it.
+ require_once 'Zend/Gdata/Gapps/ServiceException.php';
+ $error = new Zend_Gdata_Gapps_ServiceException();
+ $error->importFromString($response->getBody());
+ throw $error;
+ } catch (Zend_Gdata_App_Exception $e2) {
+ // Unable to convert the response to a ServiceException,
+ // most likely because the server didn't return an
+ // AppsForYourDomainErrors document. Throw the original
+ // exception.
+ throw $e;
+ }
+ }
+
+ /**
+ * Imports a feed located at $uri.
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param string $uri
+ * @param Zend_Http_Client $client (optional) The client used for
+ * communication
+ * @param string $className (optional) The class which is used as the
+ * return type
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ * @return Zend_Gdata_App_Feed
+ */
+ public static function import($uri, $client = null, $className='Zend_Gdata_App_Feed')
+ {
+ try {
+ return parent::import($uri, $client, $className);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * GET a URI using client object.
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param string $uri GET URI
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ * @return Zend_Http_Response
+ */
+ public function get($uri, $extraHeaders = array())
+ {
+ try {
+ return parent::get($uri, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * POST data with client object.
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri (optional) POST URI
+ * @param integer $remainingRedirects (optional)
+ * @param string $contentType Content-type of the data
+ * @param array $extraHaders Extra headers to add tot he request
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function post($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ try {
+ return parent::post($data, $uri, $remainingRedirects, $contentType, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * PUT data with client object
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri (optional) PUT URI
+ * @param integer $remainingRedirects (optional)
+ * @param string $contentType Content-type of the data
+ * @param array $extraHaders Extra headers to add tot he request
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function put($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ try {
+ return parent::put($data, $uri, $remainingRedirects, $contentType, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * DELETE entry with client object
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or URL to delete
+ * @param integer $remainingRedirects (optional)
+ * @return void
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function delete($data, $remainingRedirects = null)
+ {
+ try {
+ return parent::delete($data, $remainingRedirects);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * Set domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'.
+ *
+ * This value is used when calculating URLs for retrieving and posting
+ * entries. If no value is specified, a URL will have to be manually
+ * constructed prior to using any methods which interact with the Google
+ * Apps provisioning service.
+ *
+ * @param string $value The domain to be used for this session.
+ */
+ public function setDomain($value)
+ {
+ $this->_domain = $value;
+ }
+
+ /**
+ * Get domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'. If no domain is set, null will be
+ * returned.
+ *
+ * @return string The domain to be used for this session, or null if not
+ * set.
+ */
+ public function getDomain()
+ {
+ return $this->_domain;
+ }
+
+ /**
+ * Returns the base URL used to access the Google Apps service, based
+ * on the current domain. The current domain can be temporarily
+ * overridden by providing a fully qualified domain as $domain.
+ *
+ * @param string $domain (optional) A fully-qualified domain to use
+ * instead of the default domain for this service instance.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getBaseUrl($domain = null)
+ {
+ if ($domain !== null) {
+ return self::APPS_BASE_FEED_URI . '/' . $domain;
+ } else if ($this->_domain !== null) {
+ return self::APPS_BASE_FEED_URI . '/' . $this->_domain;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Domain must be specified.');
+ }
+ }
+
+ /**
+ * Retrieve a UserFeed containing multiple UserEntry objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_UserFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getUserFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = $this->getBaseUrl() . self::APPS_USER_PATH;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_UserFeed');
+ }
+
+ /**
+ * Retreive NicknameFeed object containing multiple NicknameEntry objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_NicknameFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getNicknameFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = $this->getBaseUrl() . self::APPS_NICKNAME_PATH;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_NicknameFeed');
+ }
+
+ /**
+ * Retreive GroupFeed object containing multiple GroupEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_GroupFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getGroupFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_GroupFeed');
+ }
+
+ /**
+ * Retreive MemberFeed object containing multiple MemberEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_MemberFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getMemberFeed($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_MemberFeed');
+ }
+
+ /**
+ * Retreive OwnerFeed object containing multiple OwnerEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_OwnerFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getOwnerFeed($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_OwnerFeed');
+ }
+
+ /**
+ * Retreive EmailListFeed object containing multiple EmailListEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_EmailListFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = $this->getBaseUrl() . self::APPS_NICKNAME_PATH;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_EmailListFeed');
+ }
+
+ /**
+ * Retreive EmailListRecipientFeed object containing multiple
+ * EmailListRecipientEntry objects.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_EmailListRecipientFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListRecipientFeed($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_EmailListRecipientFeed');
+ }
+
+ /**
+ * Retreive a single UserEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_UserEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getUserEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_UserEntry');
+ }
+
+ /**
+ * Retreive a single NicknameEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_NicknameEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getNicknameEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_NicknameEntry');
+ }
+
+ /**
+ * Retreive a single GroupEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_GroupEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getGroupEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_GroupEntry');
+ }
+
+ /**
+ * Retreive a single MemberEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_MemberEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getMemberEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_MemberEntry');
+ }
+
+ /**
+ * Retreive a single OwnerEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_OwnerEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getOwnerEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_OwnerEntry');
+ }
+
+ /**
+ * Retreive a single EmailListEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_EmailListEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_EmailListEntry');
+ }
+
+ /**
+ * Retreive a single EmailListRecipientEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_EmailListRecipientEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListRecipientEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_EmailListRecipientEntry');
+ }
+
+ /**
+ * Create a new user from a UserEntry.
+ *
+ * @param Zend_Gdata_Gapps_UserEntry $user The user entry to insert.
+ * @param string $uri (optional) The URI where the user should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_UserEntry The inserted user entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertUser($user, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = $this->getBaseUrl() . self::APPS_USER_PATH;
+ }
+ $newEntry = $this->insertEntry($user, $uri, 'Zend_Gdata_Gapps_UserEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new nickname from a NicknameEntry.
+ *
+ * @param Zend_Gdata_Gapps_NicknameEntry $nickname The nickname entry to
+ * insert.
+ * @param string $uri (optional) The URI where the nickname should be
+ * uploaded to. If null, the default nickname creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_NicknameEntry The inserted nickname entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertNickname($nickname, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = $this->getBaseUrl() . self::APPS_NICKNAME_PATH;
+ }
+ $newEntry = $this->insertEntry($nickname, $uri, 'Zend_Gdata_Gapps_NicknameEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new group from a GroupEntry.
+ *
+ * @param Zend_Gdata_Gapps_GroupEntry $group The group entry to insert.
+ * @param string $uri (optional) The URI where the group should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_GroupEntry The inserted group entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertGroup($group, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain();
+ }
+ $newEntry = $this->insertEntry($group, $uri, 'Zend_Gdata_Gapps_GroupEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new member from a MemberEntry.
+ *
+ * @param Zend_Gdata_Gapps_MemberEntry $member The member entry to insert.
+ * @param string $uri (optional) The URI where the group should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_MemberEntry The inserted member entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertMember($member, $uri = null)
+ {
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($member, $uri, 'Zend_Gdata_Gapps_MemberEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new group from a OwnerEntry.
+ *
+ * @param Zend_Gdata_Gapps_OwnerEntry $owner The owner entry to insert.
+ * @param string $uri (optional) The URI where the owner should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_OwnerEntry The inserted owner entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertOwner($owner, $uri = null)
+ {
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($owner, $uri, 'Zend_Gdata_Gapps_OwnerEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new email list from an EmailListEntry.
+ *
+ * @param Zend_Gdata_Gapps_EmailListEntry $emailList The email list entry
+ * to insert.
+ * @param string $uri (optional) The URI where the email list should be
+ * uploaded to. If null, the default email list creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_EmailListEntry The inserted email list entry
+ * as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertEmailList($emailList, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = $this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH;
+ }
+ $newEntry = $this->insertEntry($emailList, $uri, 'Zend_Gdata_Gapps_EmailListEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new email list recipient from an EmailListRecipientEntry.
+ *
+ * @param Zend_Gdata_Gapps_EmailListRecipientEntry $recipient The recipient
+ * entry to insert.
+ * @param string $uri (optional) The URI where the recipient should be
+ * uploaded to. If null, the default recipient creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_EmailListRecipientEntry The inserted
+ * recipient entry as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertEmailListRecipient($recipient, $uri = null)
+ {
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ } elseif ($uri instanceof Zend_Gdata_Gapps_EmailListEntry) {
+ $uri = $uri->getLink('edit')->href;
+ }
+ $newEntry = $this->insertEntry($recipient, $uri, 'Zend_Gdata_Gapps_EmailListRecipientEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Provides a magic factory method to instantiate new objects with
+ * shorter syntax than would otherwise be required by the Zend Framework
+ * naming conventions. For more information, see Zend_Gdata_App::__call().
+ *
+ * This overrides the default behavior of __call() so that query classes
+ * do not need to have their domain manually set when created with
+ * a magic factory method.
+ *
+ * @see Zend_Gdata_App::__call()
+ * @param string $method The method name being called
+ * @param array $args The arguments passed to the call
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function __call($method, $args) {
+ if (preg_match('/^new(\w+Query)/', $method, $matches)) {
+ $class = $matches[1];
+ $foundClassName = null;
+ foreach ($this->_registeredPackages as $name) {
+ try {
+ // Autoloading disabled on next line for compatibility
+ // with magic factories. See ZF-6660.
+ if (!class_exists($name . '_' . $class, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($name . '_' . $class);
+ }
+ $foundClassName = $name . '_' . $class;
+ break;
+ } catch (Zend_Exception $e) {
+ // package wasn't here- continue searching
+ }
+ }
+ if ($foundClassName != null) {
+ $reflectionObj = new ReflectionClass($foundClassName);
+ // Prepend the domain to the query
+ $args = array_merge(array($this->getDomain()), $args);
+ return $reflectionObj->newInstanceArgs($args);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "Unable to find '${class}' in registered packages");
+ }
+ } else {
+ return parent::__call($method, $args);
+ }
+
+ }
+
+ // Convenience methods
+ // Specified at http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_e
+
+ /**
+ * Create a new user entry and send it to the Google Apps servers.
+ *
+ * @param string $username The username for the new user.
+ * @param string $givenName The given name for the new user.
+ * @param string $familyName The family name for the new user.
+ * @param string $password The password for the new user as a plaintext string
+ * (if $passwordHashFunction is null) or a SHA-1 hashed
+ * value (if $passwordHashFunction = 'SHA-1').
+ * @param string $quotaLimitInMB (optional) The quota limit for the new user in MB.
+ * @return Zend_Gdata_Gapps_UserEntry (optional) The new user entry as returned by
+ * server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function createUser ($username, $givenName, $familyName, $password,
+ $passwordHashFunction = null, $quotaLimitInMB = null) {
+ $user = $this->newUserEntry();
+ $user->login = $this->newLogin();
+ $user->login->username = $username;
+ $user->login->password = $password;
+ $user->login->hashFunctionName = $passwordHashFunction;
+ $user->name = $this->newName();
+ $user->name->givenName = $givenName;
+ $user->name->familyName = $familyName;
+ if ($quotaLimitInMB !== null) {
+ $user->quota = $this->newQuota();
+ $user->quota->limit = $quotaLimitInMB;
+ }
+ return $this->insertUser($user);
+ }
+
+ /**
+ * Retrieve a user based on their username.
+ *
+ * @param string $username The username to search for.
+ * @return Zend_Gdata_Gapps_UserEntry The username to search for, or null
+ * if no match found.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function retrieveUser ($username) {
+ $query = $this->newUserQuery($username);
+ try {
+ $user = $this->getUserEntry($query);
+ } catch (Zend_Gdata_Gapps_ServiceException $e) {
+ // Set the user to null if not found
+ if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
+ $user = null;
+ } else {
+ throw $e;
+ }
+ }
+ return $user;
+ }
+
+ /**
+ * Retrieve a page of users in alphabetical order, starting with the
+ * provided username.
+ *
+ * @param string $startUsername (optional) The first username to retrieve.
+ * If null or not declared, the page will begin with the first
+ * user in the domain.
+ * @return Zend_Gdata_Gapps_UserFeed Collection of Zend_Gdata_UserEntry
+ * objects representing all users in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfUsers ($startUsername = null) {
+ $query = $this->newUserQuery();
+ $query->setStartUsername($startUsername);
+ return $this->getUserFeed($query);
+ }
+
+ /**
+ * Retrieve all users in the current domain. Be aware that
+ * calling this function on a domain with many users will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_UserFeed Collection of Zend_Gdata_UserEntry
+ * objects representing all users in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllUsers () {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfUsers());
+ }
+
+ /**
+ * Overwrite a specified username with the provided UserEntry. The
+ * UserEntry does not need to contain an edit link.
+ *
+ * This method is provided for compliance with the Google Apps
+ * Provisioning API specification. Normally users will instead want to
+ * call UserEntry::save() instead.
+ *
+ * @see Zend_Gdata_App_Entry::save
+ * @param string $username The username whose data will be overwritten.
+ * @param Zend_Gdata_Gapps_UserEntry $userEntry The user entry which
+ * will be overwritten.
+ * @return Zend_Gdata_Gapps_UserEntry The UserEntry returned by the
+ * server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function updateUser($username, $userEntry) {
+ return $this->updateEntry($userEntry, $this->getBaseUrl() .
+ self::APPS_USER_PATH . '/' . $username);
+ }
+
+ /**
+ * Mark a given user as suspended.
+ *
+ * @param string $username The username associated with the user who
+ * should be suspended.
+ * @return Zend_Gdata_Gapps_UserEntry The UserEntry for the modified
+ * user.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function suspendUser($username) {
+ $user = $this->retrieveUser($username);
+ $user->login->suspended = true;
+ return $user->save();
+ }
+
+ /**
+ * Mark a given user as not suspended.
+ *
+ * @param string $username The username associated with the user who
+ * should be restored.
+ * @return Zend_Gdata_Gapps_UserEntry The UserEntry for the modified
+ * user.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function restoreUser($username) {
+ $user = $this->retrieveUser($username);
+ $user->login->suspended = false;
+ return $user->save();
+ }
+
+ /**
+ * Delete a user by username.
+ *
+ * @param string $username The username associated with the user who
+ * should be deleted.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function deleteUser($username) {
+ $this->delete($this->getBaseUrl() . self::APPS_USER_PATH . '/' .
+ $username);
+ }
+
+ /**
+ * Create a nickname for a given user.
+ *
+ * @param string $username The username to which the new nickname should
+ * be associated.
+ * @param string $nickname The new nickname to be created.
+ * @return Zend_Gdata_Gapps_NicknameEntry The nickname entry which was
+ * created by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function createNickname($username, $nickname) {
+ $entry = $this->newNicknameEntry();
+ $nickname = $this->newNickname($nickname);
+ $login = $this->newLogin($username);
+ $entry->nickname = $nickname;
+ $entry->login = $login;
+ return $this->insertNickname($entry);
+ }
+
+ /**
+ * Retrieve the entry for a specified nickname.
+ *
+ * @param string $nickname The nickname to be retrieved.
+ * @return Zend_Gdata_Gapps_NicknameEntry The requested nickname entry.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveNickname($nickname) {
+ $query = $this->newNicknameQuery();
+ $query->setNickname($nickname);
+ try {
+ $nickname = $this->getNicknameEntry($query);
+ } catch (Zend_Gdata_Gapps_ServiceException $e) {
+ // Set the nickname to null if not found
+ if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
+ $nickname = null;
+ } else {
+ throw $e;
+ }
+ }
+ return $nickname;
+ }
+
+ /**
+ * Retrieve all nicknames associated with a specific username.
+ *
+ * @param string $username The username whose nicknames should be
+ * returned.
+ * @return Zend_Gdata_Gapps_NicknameFeed A feed containing all nicknames
+ * for the given user, or null if
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveNicknames($username) {
+ $query = $this->newNicknameQuery();
+ $query->setUsername($username);
+ $nicknameFeed = $this->retrieveAllEntriesForFeed(
+ $this->getNicknameFeed($query));
+ return $nicknameFeed;
+ }
+
+ /**
+ * Retrieve a page of nicknames in alphabetical order, starting with the
+ * provided nickname.
+ *
+ * @param string $startNickname (optional) The first nickname to
+ * retrieve. If null or not declared, the page will begin with
+ * the first nickname in the domain.
+ * @return Zend_Gdata_Gapps_NicknameFeed Collection of Zend_Gdata_NicknameEntry
+ * objects representing all nicknames in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfNicknames ($startNickname = null) {
+ $query = $this->newNicknameQuery();
+ $query->setStartNickname($startNickname);
+ return $this->getNicknameFeed($query);
+ }
+
+ /**
+ * Retrieve all nicknames in the current domain. Be aware that
+ * calling this function on a domain with many nicknames will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_NicknameFeed Collection of Zend_Gdata_NicknameEntry
+ * objects representing all nicknames in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllNicknames () {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfNicknames());
+ }
+
+ /**
+ * Delete a specified nickname.
+ *
+ * @param string $nickname The name of the nickname to be deleted.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function deleteNickname($nickname) {
+ $this->delete($this->getBaseUrl() . self::APPS_NICKNAME_PATH . '/' . $nickname);
+ }
+
+ /**
+ * Create a new group.
+ *
+ * @param string $groupId A unique identifier for the group
+ * @param string $groupName The name of the group
+ * @param string $description A description of the group
+ * @param string $emailPermission The subscription permission of the group
+ * @return Zend_Gdata_Gapps_GroupEntry The group entry as created on the server.
+ */
+ public function createGroup($groupId, $groupName, $description = null, $emailPermission = null)
+ {
+ $i = 0;
+ $group = $this->newGroupEntry();
+
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupId';
+ $properties[$i]->value = $groupId;
+ $i++;
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupName';
+ $properties[$i]->value = $groupName;
+ $i++;
+
+ if($description != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'description';
+ $properties[$i]->value = $description;
+ $i++;
+ }
+
+ if($emailPermission != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'emailPermission';
+ $properties[$i]->value = $emailPermission;
+ $i++;
+ }
+
+ $group->property = $properties;
+
+ return $this->insertGroup($group);
+ }
+
+ /**
+ * Retrieves a group based on group id
+ *
+ * @param string $groupId The unique identifier for the group
+ * @return Zend_Gdata_Gapps_GroupEntry The group entry as returned by the server.
+ */
+ public function retrieveGroup($groupId)
+ {
+ $query = $this->newGroupQuery($groupId);
+ //$query->setGroupId($groupId);
+
+ try {
+ $group = $this->getGroupEntry($query);
+ } catch (Zend_Gdata_Gapps_ServiceException $e) {
+ // Set the group to null if not found
+ if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
+ $group = null;
+ } else {
+ throw $e;
+ }
+ }
+ return $group;
+ }
+
+ /**
+ * Retrieve all groups in the current domain. Be aware that
+ * calling this function on a domain with many groups will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_GroupFeed Collection of Zend_Gdata_GroupEntry objects
+ * representing all groups apart of the domain.
+ */
+ public function retrieveAllGroups()
+ {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfGroups());
+ }
+
+ /**
+ * Delete a group
+ *
+ * @param string $groupId The unique identifier for the group
+ */
+ public function deleteGroup($groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId;
+
+ $this->delete($uri);
+ }
+
+ /**
+ * Check to see if a member id or group id is a member of group
+ *
+ * @param string $memberId Member id or group group id
+ * @param string $groupId Group to be checked for
+ * @return bool True, if given entity is a member
+ */
+ public function isMember($memberId, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/member/' . $memberId;
+
+ //if the enitiy is not a member, an exception is thrown
+ try {
+ $results = $this->get($uri);
+ } catch (Exception $e) {
+ $results = false;
+ }
+
+ if($results) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+
+ /**
+ * Add an email address to a group as a member
+ *
+ * @param string $recipientAddress Email address, member id, or group id
+ * @param string $groupId The unique id of the group
+ * @return Zend_Gdata_Gapps_MemberEntry The member entry returned by the server
+ */
+ public function addMemberToGroup($recipientAddress, $groupId)
+ {
+ $member = $this->newMemberEntry();
+
+ $properties[] = $this->newProperty();
+ $properties[0]->name = 'memberId';
+ $properties[0]->value = $recipientAddress;
+
+ $member->property = $properties;
+
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/member';
+
+ return $this->insertMember($member, $uri);
+ }
+
+ /**
+ * Remove a member id from a group
+ *
+ * @param string $memberId Member id or group id
+ * @param string $groupId The unique id of the group
+ */
+ public function removeMemberFromGroup($memberId, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/member/' . $memberId;
+
+ return $this->delete($uri);
+ }
+
+ /**
+ * Retrieves all the members of a group
+ *
+ * @param string $groupId The unique id of the group
+ * @return Zend_Gdata_Gapps_MemberFeed Collection of MemberEntry objects
+ * representing all members apart of the group.
+ */
+ public function retrieveAllMembers($groupId)
+ {
+ return $this->retrieveAllEntriesForFeed(
+ $this->retrievePageOfMembers($groupId));
+ }
+
+ /**
+ * Add an email as an owner of a group
+ *
+ * @param string $email Owner's email
+ * @param string $groupId Group ownership to be checked for
+ * @return Zend_Gdata_Gapps_OwnerEntry The OwnerEntry returned by the server
+ */
+ public function addOwnerToGroup($email, $groupId)
+ {
+ $owner = $this->newOwnerEntry();
+
+ $properties[] = $this->newProperty();
+ $properties[0]->name = 'email';
+ $properties[0]->value = $email;
+
+ $owner->property = $properties;
+
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner';
+
+ return $this->insertOwner($owner, $uri);
+ }
+
+ /**
+ * Retrieves all the owners of a group
+ *
+ * @param string $groupId The unique identifier for the group
+ * @return Zend_Gdata_Gapps_OwnerFeed Collection of Zend_Gdata_OwnerEntry
+ * objects representing all owners apart of the group.
+ */
+ public function retrieveGroupOwners($groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner';
+
+ return $this->getOwnerFeed($uri);
+ }
+
+ /**
+ * Checks to see if an email is an owner of a group
+ *
+ * @param string $email Owner's email
+ * @param string $groupId Group ownership to be checked for
+ * @return bool True, if given entity is an owner
+ */
+ public function isOwner($email, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner/' . $email;
+
+ //if the enitiy is not an owner of the group, an exception is thrown
+ try {
+ $results = $this->get($uri);
+ } catch (Exception $e) {
+ $results = false;
+ }
+
+ if($results) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+
+ /**
+ * Remove email as an owner of a group
+ *
+ * @param string $email Owner's email
+ * @param string $groupId The unique identifier for the group
+ */
+ public function removeOwnerFromGroup($email, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner/' . $email;
+
+ return $this->delete($uri);
+ }
+
+ /**
+ * Update group properties with new values. any property not defined will not
+ * be updated
+ *
+ * @param string $groupId A unique identifier for the group
+ * @param string $groupName The name of the group
+ * @param string $description A description of the group
+ * @param string $emailPermission The subscription permission of the group
+ * @return Zend_Gdata_Gapps_GroupEntry The group entry as updated on the server.
+ */
+ public function updateGroup($groupId, $groupName = null, $description = null,
+ $emailPermission = null)
+ {
+ $i = 0;
+ $group = $this->newGroupEntry();
+
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupId';
+ $properties[$i]->value = $groupId;
+ $i++;
+
+ if($groupName != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupName';
+ $properties[$i]->value = $groupName;
+ $i++;
+ }
+
+ if($description != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'description';
+ $properties[$i]->value = $description;
+ $i++;
+ }
+
+ if($emailPermission != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'emailPermission';
+ $properties[$i]->value = $emailPermission;
+ $i++;
+ }
+
+ $group->property = $properties;
+
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId;
+
+ return $this->updateEntry($group, $uri, 'Zend_Gdata_Gapps_GroupEntry');
+ }
+
+ /**
+ * Retrieve all of the groups that a user is a member of
+ *
+ * @param string $memberId Member username
+ * @param bool $directOnly (Optional) If true, members with direct association
+ * only will be considered
+ * @return Zend_Gdata_Gapps_GroupFeed Collection of Zend_Gdata_GroupEntry
+ * objects representing all groups member is apart of in the domain.
+ */
+ public function retrieveGroups($memberId, $directOnly = null)
+ {
+ $query = $this->newGroupQuery();
+ $query->setMember($memberId);
+ if($directOnly != null) {
+ $query->setDirectOnly($directOnly);
+ }
+ return $this->getGroupFeed($query);
+ }
+
+ /**
+ * Retrieve a page of groups in alphabetical order, starting with the
+ * provided group.
+ *
+ * @param string $startGroup (optional) The first group to
+ * retrieve. If null or not defined, the page will begin
+ * with the first group in the domain.
+ * @return Zend_Gdata_Gapps_GroupFeed Collection of Zend_Gdata_GroupEntry
+ * objects representing the groups in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfGroups ($startGroup = null)
+ {
+ $query = $this->newGroupQuery();
+ $query->setStartGroupId($startGroup);
+ return $this->getGroupFeed($query);
+ }
+
+ /**
+ * Gets page of Members
+ *
+ * @param string $groupId The group id which should be searched.
+ * @param string $startMember (optinal) The address of the first member,
+ * or null to start with the first member in the list.
+ * @return Zend_Gdata_Gapps_MemberFeed Collection of Zend_Gdata_MemberEntry
+ * objects
+ */
+ public function retrievePageOfMembers($groupId, $startMember = null)
+ {
+ $query = $this->newMemberQuery($groupId);
+ $query->setStartMemberId($startMember);
+ return $this->getMemberFeed($query);
+ }
+
+ /**
+ * Create a new email list.
+ *
+ * @param string $emailList The name of the email list to be created.
+ * @return Zend_Gdata_Gapps_EmailListEntry The email list entry
+ * as created on the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function createEmailList($emailList) {
+ $entry = $this->newEmailListEntry();
+ $list = $this->newEmailList();
+ $list->name = $emailList;
+ $entry->emailList = $list;
+ return $this->insertEmailList($entry);
+ }
+
+ /**
+ * Retrieve all email lists associated with a recipient.
+ *
+ * @param string $username The recipient whose associated email lists
+ * should be returned.
+ * @return Zend_Gdata_Gapps_EmailListFeed The list of email lists found as
+ * Zend_Gdata_EmailListEntry objects.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveEmailLists($recipient) {
+ $query = $this->newEmailListQuery();
+ $query->recipient = $recipient;
+ return $this->getEmailListFeed($query);
+ }
+
+ /**
+ * Retrieve a page of email lists in alphabetical order, starting with the
+ * provided email list.
+ *
+ * @param string $startEmailListName (optional) The first list to
+ * retrieve. If null or not defined, the page will begin
+ * with the first email list in the domain.
+ * @return Zend_Gdata_Gapps_EmailListFeed Collection of Zend_Gdata_EmailListEntry
+ * objects representing all nicknames in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfEmailLists ($startNickname = null) {
+ $query = $this->newEmailListQuery();
+ $query->setStartEmailListName($startNickname);
+ return $this->getEmailListFeed($query);
+ }
+
+ /**
+ * Retrieve all email lists associated with the curent domain. Be aware that
+ * calling this function on a domain with many email lists will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_EmailListFeed The list of email lists found
+ * as Zend_Gdata_Gapps_EmailListEntry objects.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllEmailLists() {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfEmailLists());
+ }
+
+ /**
+ * Delete a specified email list.
+ *
+ * @param string $emailList The name of the emailList to be deleted.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function deleteEmailList($emailList) {
+ $this->delete($this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH . '/'
+ . $emailList);
+ }
+
+ /**
+ * Add a specified recipient to an existing emailList.
+ *
+ * @param string $recipientAddress The address of the recipient to be
+ * added to the email list.
+ * @param string $emailList The name of the email address to which the
+ * recipient should be added.
+ * @return Zend_Gdata_Gapps_EmailListRecipientEntry The recipient entry
+ * created by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function addRecipientToEmailList($recipientAddress, $emailList) {
+ $entry = $this->newEmailListRecipientEntry();
+ $who = $this->newWho();
+ $who->email = $recipientAddress;
+ $entry->who = $who;
+ $address = $this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH . '/' .
+ $emailList . self::APPS_EMAIL_LIST_RECIPIENT_POSTFIX . '/';
+ return $this->insertEmailListRecipient($entry, $address);
+ }
+
+ /**
+ * Retrieve a page of email list recipients in alphabetical order,
+ * starting with the provided email list recipient.
+ *
+ * @param string $emaiList The email list which should be searched.
+ * @param string $startRecipient (optinal) The address of the first
+ * recipient, or null to start with the first recipient in
+ * the list.
+ * @return Zend_Gdata_Gapps_EmailListRecipientFeed Collection of
+ * Zend_Gdata_EmailListRecipientEntry objects representing all
+ * recpients in the specified list.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfRecipients ($emailList,
+ $startRecipient = null) {
+ $query = $this->newEmailListRecipientQuery();
+ $query->setEmailListName($emailList);
+ $query->setStartRecipient($startRecipient);
+ return $this->getEmailListRecipientFeed($query);
+ }
+
+ /**
+ * Retrieve all recipients associated with an email list. Be aware that
+ * calling this function on a domain with many email lists will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @param string $emaiList The email list which should be searched.
+ * @return Zend_Gdata_Gapps_EmailListRecipientFeed The list of email lists
+ * found as Zend_Gdata_Gapps_EmailListRecipientEntry objects.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllRecipients($emailList) {
+ return $this->retrieveAllEntriesForFeed(
+ $this->retrievePageOfRecipients($emailList));
+ }
+
+ /**
+ * Remove a specified recipient from an email list.
+ *
+ * @param string $recipientAddress The recipient to be removed.
+ * @param string $emailList The list from which the recipient should
+ * be removed.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function removeRecipientFromEmailList($recipientAddress, $emailList) {
+ $this->delete($this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH . '/'
+ . $emailList . self::APPS_EMAIL_LIST_RECIPIENT_POSTFIX . '/'
+ . $recipientAddress);
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/EmailListEntry.php b/Zend/Gdata/Gapps/EmailListEntry.php
new file mode 100644
index 00000000..52bbab93
--- /dev/null
+++ b/Zend/Gdata/Gapps/EmailListEntry.php
@@ -0,0 +1,214 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_EmailListEntry';
+
+ /**
+ * child element containing general information about
+ * this email list.
+ *
+ * @var Zend_Gdata_Gapps_Extension_EmailList
+ */
+ protected $_emailList = null;
+
+ /**
+ * element containing information about other feeds
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Extension_FeedLink
+ */
+ protected $_feedLink = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_emailList !== null) {
+ $element->appendChild($this->_emailList->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('apps') . ':' . 'emailList';
+ $emailList = new Zend_Gdata_Gapps_Extension_EmailList();
+ $emailList->transferFromDOM($child);
+ $this->_emailList = $emailList;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink';
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Retrieve the email list property for this entry.
+ *
+ * @see setEmailList
+ * @return Zend_Gdata_Gapps_Extension_EmailList The requested object
+ * or null if not set.
+ */
+ public function getEmailList()
+ {
+ return $this->_emailList;
+ }
+
+ /**
+ * Set the email list property for this entry. This property contains
+ * information such as the name of this email list.
+ *
+ * This corresponds to the property in the Google Data
+ * protocol.
+ *
+ * @param Zend_Gdata_Gapps_Extension_EmailList $value The desired value
+ * this element, or null to unset.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface
+ */
+ public function setEmailList($value)
+ {
+ $this->_emailList = $value;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the feed link property for this entry. Feed links provide
+ * information about other feeds associated with this entry.
+ *
+ * This corresponds to the property in the Google Data
+ * protocol.
+ *
+ * @param array $value A collection of Zend_Gdata_Gapps_Extension_FeedLink
+ * instances representing all feed links for this entry, or
+ * null to unset.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface
+ */
+ public function setFeedLink($value)
+ {
+ $this->_feedLink = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/EmailListFeed.php b/Zend/Gdata/Gapps/EmailListFeed.php
new file mode 100644
index 00000000..4f730dc5
--- /dev/null
+++ b/Zend/Gdata/Gapps/EmailListFeed.php
@@ -0,0 +1,53 @@
+setEmailListName($emailListName);
+ $this->setRecipient($recipient);
+ $this->setStartEmailListName($startEmailListName);
+ }
+
+ /**
+ * Set the email list name to query for. When set, only lists with a name
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by list name.
+ *
+ * @param string $value The email list name to filter search results by,
+ * or null to disable.
+ */
+ public function setEmailListName($value)
+ {
+ $this->_emailListName = $value;
+ }
+
+ /**
+ * Get the email list name to query for. If no name is set, null will be
+ * returned.
+ *
+ * @see setEmailListName
+ * @return string The email list name to filter search results by, or null
+ * if disabled.
+ */
+ public function getEmailListName()
+ {
+ return $this->_emailListName;
+ }
+
+ /**
+ * Set the recipient to query for. When set, only subscribers with an
+ * email address matching this value will be returned in search results.
+ * Set to null to disable filtering by username.
+ *
+ * @param string $value The recipient email address to filter search
+ * results by, or null to disable.
+ */
+ public function setRecipient($value)
+ {
+ if ($value !== null) {
+ $this->_params['recipient'] = $value;
+ }
+ else {
+ unset($this->_params['recipient']);
+ }
+ }
+
+ /**
+ * Get the recipient email address to query for. If no recipient is set,
+ * null will be returned.
+ *
+ * @see setRecipient
+ * @return string The recipient email address to filter search results by,
+ * or null if disabled.
+ */
+ public function getRecipient()
+ {
+ if (array_key_exists('recipient', $this->_params)) {
+ return $this->_params['recipient'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the first email list which should be displayed when retrieving
+ * a list of email lists.
+ *
+ * @param string $value The first email list to be returned, or null to
+ * disable.
+ */
+ public function setStartEmailListName($value)
+ {
+ if ($value !== null) {
+ $this->_params['startEmailListName'] = $value;
+ } else {
+ unset($this->_params['startEmailListName']);
+ }
+ }
+
+ /**
+ * Get the first email list which should be displayed when retrieving
+ * a list of email lists.
+ *
+ * @return string The first email list to be returned, or null to
+ * disable.
+ */
+ public function getStartEmailListName()
+ {
+ if (array_key_exists('startEmailListName', $this->_params)) {
+ return $this->_params['startEmailListName'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_EMAIL_LIST_PATH;
+ if ($this->_emailListName !== null) {
+ $uri .= '/' . $this->_emailListName;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/EmailListRecipientEntry.php b/Zend/Gdata/Gapps/EmailListRecipientEntry.php
new file mode 100644
index 00000000..f3c4450a
--- /dev/null
+++ b/Zend/Gdata/Gapps/EmailListRecipientEntry.php
@@ -0,0 +1,146 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListRecipientEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_EmailListRecipientEntry';
+
+ /**
+ * element used to store the email address of the current
+ * recipient. Only the email property of this element should be
+ * populated.
+ *
+ * @var Zend_Gdata_Extension_Who
+ */
+ protected $_who = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_who !== null) {
+ $element->appendChild($this->_who->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'who';
+ $who = new Zend_Gdata_Extension_Who();
+ $who->transferFromDOM($child);
+ $this->_who = $who;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value of the who property for this object.
+ *
+ * @see setWho
+ * @return Zend_Gdata_Extension_Who The requested object.
+ */
+ public function getWho()
+ {
+ return $this->_who;
+ }
+
+ /**
+ * Set the value of the who property for this object. This property
+ * is used to store the email address of the current recipient.
+ *
+ * @param Zend_Gdata_Extension_Who $value The desired value for this
+ * instance's who property.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface.
+ */
+ public function setWho($value)
+ {
+ $this->_who = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/EmailListRecipientFeed.php b/Zend/Gdata/Gapps/EmailListRecipientFeed.php
new file mode 100644
index 00000000..72a6b3fa
--- /dev/null
+++ b/Zend/Gdata/Gapps/EmailListRecipientFeed.php
@@ -0,0 +1,53 @@
+setEmailListName($emailListName);
+ $this->setStartRecipient($startRecipient);
+ }
+
+ /**
+ * Set the email list name to query for. When set, only lists with a name
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by list name.
+ *
+ * @param string $value The email list name to filter search results by,
+ * or null to disable.
+ */
+ public function setEmailListName($value)
+ {
+ $this->_emailListName = $value;
+ }
+
+ /**
+ * Get the email list name to query for. If no name is set, null will be
+ * returned.
+ *
+ * @param string $value The email list name to filter search results by,
+ * or null if disabled.
+ */
+ public function getEmailListName()
+ {
+ return $this->_emailListName;
+ }
+
+ /**
+ * Set the first recipient which should be displayed when retrieving
+ * a list of email list recipients.
+ *
+ * @param string $value The first recipient to be returned, or null to
+ * disable.
+ */
+ public function setStartRecipient($value)
+ {
+ if ($value !== null) {
+ $this->_params['startRecipient'] = $value;
+ } else {
+ unset($this->_params['startRecipient']);
+ }
+ }
+
+ /**
+ * Get the first recipient which should be displayed when retrieving
+ * a list of email list recipients.
+ *
+ * @return string The first recipient to be returned, or null if
+ * disabled.
+ */
+ public function getStartRecipient()
+ {
+ if (array_key_exists('startRecipient', $this->_params)) {
+ return $this->_params['startRecipient'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_EMAIL_LIST_PATH;
+ if ($this->_emailListName !== null) {
+ $uri .= '/' . $this->_emailListName;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'EmailListName must not be null');
+ }
+ $uri .= Zend_Gdata_Gapps::APPS_EMAIL_LIST_RECIPIENT_POSTFIX . '/';
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/Error.php b/Zend/Gdata/Gapps/Error.php
new file mode 100644
index 00000000..937538df
--- /dev/null
+++ b/Zend/Gdata/Gapps/Error.php
@@ -0,0 +1,233 @@
+_errorCode = $errorCode;
+ $this->_reason = $reason;
+ $this->_invalidInput = $invalidInput;
+ }
+
+ /**
+ * Set the error code for this exception. For more information about
+ * error codes, see getErrorCode.
+ *
+ * @see getErrorCode
+ * @param integer $value The new value for the error code.
+ */
+ public function setErrorCode($value) {
+ $this->_errorCode = $value;
+ }
+
+ /**
+ * Get the error code for this exception. Currently valid values are
+ * available as constants within this class. These values are:
+ *
+ * UNKNOWN_ERROR (1000)
+ * USER_DELETED_RECENTLY (1100)
+ * USER_SUSPENDED (1101)
+ * DOMAIN_USER_LIMIT_EXCEEDED (1200)
+ * DOMAIN_ALIAS_LIMIT_EXCEEDED (1201)
+ * DOMAIN_SUSPENDED (1202)
+ * DOMAIN_FEATURE_UNAVAILABLE (1203)
+ * ENTITY_EXISTS (1300)
+ * ENTITY_DOES_NOT_EXIST (1301)
+ * ENTITY_NAME_IS_RESERVED (1302)
+ * ENTITY_NAME_NOT_VALID (1303)
+ * INVALID_GIVEN_NAME (1400)
+ * INVALID_FAMILY_NAME (1401)
+ * INVALID_PASSWORD (1402)
+ * INVALID_USERNAME (1403)
+ * INVALID_HASH_FUNCTION_NAME (1404)
+ * INVALID_HASH_DIGEST_LENGTH (1405)
+ * INVALID_EMAIL_ADDRESS (1406)
+ * INVALID_QUERY_PARAMETER_VALUE (1407)
+ * TOO_MANY_RECIPIENTS_ON_EMAIL_LIST (1500)
+ *
+ * Numbers in parenthesis indicate the actual integer value of the
+ * constant. This list should not be treated as exhaustive, as additional
+ * error codes may be added at any time.
+ *
+ * For more information about these codes and their meaning, please
+ * see Appendix D of the Google Apps Provisioning API Reference.
+ *
+ * @link http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_d Google Apps Provisioning API Reference: Appendix D - Gdata Error Codes
+ * @see setErrorCode
+ * @return integer The error code returned by the Google Apps server.
+ */
+ public function getErrorCode() {
+ return $this->_errorCode;
+ }
+
+ /**
+ * Set human-readable text describing the reason this exception occurred.
+ *
+ * @see getReason
+ * @param string $value The reason this exception occurred.
+ */
+ public function setReason($value) {
+ $this->_reason = $value;
+ }
+
+ /**
+ * Get human-readable text describing the reason this exception occurred.
+ *
+ * @see setReason
+ * @return string The reason this exception occurred.
+ */
+ public function getReason() {
+ return $this->_reason;
+ }
+
+ /**
+ * Set the invalid input which caused this exception.
+ *
+ * @see getInvalidInput
+ * @param string $value The invalid input that triggered this exception.
+ */
+ public function setInvalidInput($value) {
+ $this->_invalidInput = $value;
+ }
+
+ /**
+ * Set the invalid input which caused this exception.
+ *
+ * @see setInvalidInput
+ * @return string The reason this exception occurred.
+ */
+ public function getInvalidInput() {
+ return $this->_invalidInput;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_errorCode !== null) {
+ $element->setAttribute('errorCode', $this->_errorCode);
+ }
+ if ($this->_reason !== null) {
+ $element->setAttribute('reason', $this->_reason);
+ }
+ if ($this->_invalidInput !== null) {
+ $element->setAttribute('invalidInput', $this->_invalidInput);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'errorCode':
+ $this->_errorCode = $attribute->nodeValue;
+ break;
+ case 'reason':
+ $this->_reason = $attribute->nodeValue;
+ break;
+ case 'invalidInput':
+ $this->_invalidInput = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get a human readable version of this exception.
+ *
+ * @return string
+ */
+ public function __toString() {
+ return "Error " . $this->getErrorCode() . ": " . $this->getReason() .
+ "\n\tInvalid Input: \"" . $this->getInvalidInput() . "\"";
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/Extension/EmailList.php b/Zend/Gdata/Gapps/Extension/EmailList.php
new file mode 100644
index 00000000..dd21d0fa
--- /dev/null
+++ b/Zend/Gdata/Gapps/Extension/EmailList.php
@@ -0,0 +1,144 @@
+registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_name = $name;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute. This is the unique
+ * name which will be used to identify this email list within this
+ * domain, and will be used to form this email list's email address.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_EmailList The element being modified.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getName();
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/Extension/Login.php b/Zend/Gdata/Gapps/Extension/Login.php
new file mode 100644
index 00000000..9fddb222
--- /dev/null
+++ b/Zend/Gdata/Gapps/Extension/Login.php
@@ -0,0 +1,485 @@
+registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_username = $username;
+ $this->_password = $password;
+ $this->_hashFunctionName = $hashFunctionName;
+ $this->_admin = $admin;
+ $this->_agreedToTerms = $agreedToTerms;
+ $this->_suspended = $suspended;
+ $this->_changePasswordAtNextLogin = $changePasswordAtNextLogin;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_username !== null) {
+ $element->setAttribute('userName', $this->_username);
+ }
+ if ($this->_password !== null) {
+ $element->setAttribute('password', $this->_password);
+ }
+ if ($this->_hashFunctionName !== null) {
+ $element->setAttribute('hashFunctionName', $this->_hashFunctionName);
+ }
+ if ($this->_admin !== null) {
+ $element->setAttribute('admin', ($this->_admin ? "true" : "false"));
+ }
+ if ($this->_agreedToTerms !== null) {
+ $element->setAttribute('agreedToTerms', ($this->_agreedToTerms ? "true" : "false"));
+ }
+ if ($this->_suspended !== null) {
+ $element->setAttribute('suspended', ($this->_suspended ? "true" : "false"));
+ }
+ if ($this->_changePasswordAtNextLogin !== null) {
+ $element->setAttribute('changePasswordAtNextLogin', ($this->_changePasswordAtNextLogin ? "true" : "false"));
+ }
+
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'userName':
+ $this->_username = $attribute->nodeValue;
+ break;
+ case 'password':
+ $this->_password = $attribute->nodeValue;
+ break;
+ case 'hashFunctionName':
+ $this->_hashFunctionName = $attribute->nodeValue;
+ break;
+ case 'admin':
+ if ($attribute->nodeValue == "true") {
+ $this->_admin = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_admin = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#admin.");
+ }
+ break;
+ case 'agreedToTerms':
+ if ($attribute->nodeValue == "true") {
+ $this->_agreedToTerms = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_agreedToTerms = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#agreedToTerms.");
+ }
+ break;
+ case 'suspended':
+ if ($attribute->nodeValue == "true") {
+ $this->_suspended = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_suspended = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#suspended.");
+ }
+ break;
+ case 'changePasswordAtNextLogin':
+ if ($attribute->nodeValue == "true") {
+ $this->_changePasswordAtNextLogin = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_changePasswordAtNextLogin = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#changePasswordAtNextLogin.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's username attribute.
+ *
+ * @see setUsername
+ * @return string The attribute being modified.
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Set the value for this element's username attribute. This string
+ * is used to uniquely identify the user in this domian and is used
+ * to form this user's email address.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ */
+ public function setUsername($value)
+ {
+ $this->_username = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's password attribute.
+ *
+ * @see setPassword
+ * @return string The requested attribute.
+ */
+ public function getPassword()
+ {
+ return $this->_password;
+ }
+
+ /**
+ * Set the value for this element's password attribute. As of this
+ * writing, this can be either be provided as plaintext or hashed using
+ * the SHA-1 algorithm for protection. If using a hash function,
+ * this must be indicated by calling setHashFunctionName().
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ */
+ public function setPassword($value)
+ {
+ $this->_password = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's hashFunctionName attribute.
+ *
+ * @see setHashFunctionName
+ * @return string The requested attribute.
+ */
+ public function getHashFunctionName()
+ {
+ return $this->_hashFunctionName;
+ }
+
+ /**
+ * Set the value for this element's hashFunctionName attribute. This
+ * indicates whether the password supplied with setPassword() is in
+ * plaintext or has had a hash function applied to it. If null,
+ * plaintext is assumed. As of this writing, the only valid hash
+ * function is 'SHA-1'.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ */
+ public function setHashFunctionName($value)
+ {
+ $this->_hashFunctionName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's admin attribute.
+ *
+ * @see setAdmin
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getAdmin()
+ {
+ if (!(is_bool($this->_admin))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for admin.');
+ }
+ return $this->_admin;
+ }
+
+ /**
+ * Set the value for this element's admin attribute. This indicates
+ * whether this user is an administrator for this domain.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setAdmin($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_admin = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's agreedToTerms attribute.
+ *
+ * @see setAgreedToTerms
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getAgreedToTerms()
+ {
+ if (!(is_bool($this->_agreedToTerms))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for agreedToTerms.');
+ }
+ return $this->_agreedToTerms;
+ }
+
+ /**
+ * Set the value for this element's agreedToTerms attribute. This
+ * indicates whether this user has agreed to the terms of service.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setAgreedToTerms($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_agreedToTerms = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's suspended attribute.
+ *
+ * @see setSuspended
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getSuspended()
+ {
+ if (!(is_bool($this->_suspended))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for suspended.');
+ }
+ return $this->_suspended;
+ }
+
+ /**
+ * Set the value for this element's suspended attribute. If true, the
+ * user will not be able to login to this domain until unsuspended.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setSuspended($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_suspended = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's changePasswordAtNextLogin attribute.
+ *
+ * @see setChangePasswordAtNextLogin
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getChangePasswordAtNextLogin()
+ {
+ if (!(is_bool($this->_changePasswordAtNextLogin))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for changePasswordAtNextLogin.');
+ }
+ return $this->_changePasswordAtNextLogin;
+ }
+
+ /**
+ * Set the value for this element's changePasswordAtNextLogin attribute.
+ * If true, the user will be forced to set a new password the next
+ * time they login.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setChangePasswordAtNextLogin($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_changePasswordAtNextLogin = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return "Username: " . $this->getUsername() .
+ "\nPassword: " . (($this->getPassword() === null) ? "NOT SET" : "SET") .
+ "\nPassword Hash Function: " . $this->getHashFunctionName() .
+ "\nAdministrator: " . ($this->getAdmin() ? "Yes" : "No") .
+ "\nAgreed To Terms: " . ($this->getAgreedToTerms() ? "Yes" : "No") .
+ "\nSuspended: " . ($this->getSuspended() ? "Yes" : "No");
+ }
+}
diff --git a/Zend/Gdata/Gapps/Extension/Name.php b/Zend/Gdata/Gapps/Extension/Name.php
new file mode 100644
index 00000000..1eabb55d
--- /dev/null
+++ b/Zend/Gdata/Gapps/Extension/Name.php
@@ -0,0 +1,181 @@
+registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_familyName = $familyName;
+ $this->_givenName = $givenName;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_familyName !== null) {
+ $element->setAttribute('familyName', $this->_familyName);
+ }
+ if ($this->_givenName !== null) {
+ $element->setAttribute('givenName', $this->_givenName);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'familyName':
+ $this->_familyName = $attribute->nodeValue;
+ break;
+ case 'givenName':
+ $this->_givenName = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's familyName attribute.
+ *
+ * @see setFamilyName
+ * @return string The requested attribute.
+ */
+ public function getFamilyName()
+ {
+ return $this->_familyName;
+ }
+
+ /**
+ * Set the value for this element's familyName attribute. This
+ * represents a user's family name.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Name Provides a fluent interface..
+ */
+ public function setFamilyName($value)
+ {
+ $this->_familyName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's givenName attribute.
+ *
+ * @see setGivenName
+ * @return string The requested attribute.
+ */
+ public function getGivenName()
+ {
+ return $this->_givenName;
+ }
+
+ /**
+ * Set the value for this element's givenName attribute. This
+ * represents a user's given name.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Name Provides a fluent interface.
+ */
+ public function setGivenName($value)
+ {
+ $this->_givenName = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getGivenName() . ' ' . $this->getFamilyName();
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/Extension/Nickname.php b/Zend/Gdata/Gapps/Extension/Nickname.php
new file mode 100644
index 00000000..25c1397b
--- /dev/null
+++ b/Zend/Gdata/Gapps/Extension/Nickname.php
@@ -0,0 +1,142 @@
+registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_name = $name;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute. This name uniquely
+ * describes this nickname within the domain. Emails addressed to this
+ * name will be delivered to the user who owns this nickname.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Nickname Provides a fluent
+ * interface.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getName();
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/Extension/Property.php b/Zend/Gdata/Gapps/Extension/Property.php
new file mode 100644
index 00000000..f2c16cfb
--- /dev/null
+++ b/Zend/Gdata/Gapps/Extension/Property.php
@@ -0,0 +1,180 @@
+registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_name = $name;
+ $this->_value = $value;
+
+ }
+
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+
+ return $element;
+
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute.
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Property The element being modified.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Property The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return "Property Name: " . $this->getName() .
+ "\nProperty Value: " . $this->getValue();
+ }
+}
+?>
\ No newline at end of file
diff --git a/Zend/Gdata/Gapps/Extension/Quota.php b/Zend/Gdata/Gapps/Extension/Quota.php
new file mode 100644
index 00000000..2dbc7fc9
--- /dev/null
+++ b/Zend/Gdata/Gapps/Extension/Quota.php
@@ -0,0 +1,142 @@
+registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_limit = $limit;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_limit !== null) {
+ $element->setAttribute('limit', $this->_limit);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'limit':
+ $this->_limit = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's limit attribute.
+ *
+ * @see setLimit
+ * @return string The requested attribute.
+ */
+ public function getLimit()
+ {
+ return $this->_limit;
+ }
+
+ /**
+ * Set the value for this element's limit attribute. This is the amount
+ * of storage space, in bytes, that should be made available to
+ * the associated user.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Quota Provides a fluent interface.
+ */
+ public function setLimit($value)
+ {
+ $this->_limit = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getLimit();
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/GroupEntry.php b/Zend/Gdata/Gapps/GroupEntry.php
new file mode 100644
index 00000000..d345969c
--- /dev/null
+++ b/Zend/Gdata/Gapps/GroupEntry.php
@@ -0,0 +1,158 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_GroupEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_GroupEntry';
+
+ /**
+ * element containing information about other items
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Property
+ */
+ protected $_property = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+
+ foreach ($this->_property as $p) {
+ $element->appendChild($p->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+
+ case $this->lookupNamespace('apps') . ':' . 'property';
+ $property = new Zend_Gdata_Gapps_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->_property[] = $property;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns all property tags for this entry
+ *
+ * @param string $rel The rel value of the property to be found. If null,
+ * the array of properties is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Gapps_Extension_Property
+ * objects if $rel is null, a single
+ * Zend_Gdata_Gapps_Extension_Property object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching property is found.
+ */
+ public function getProperty($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_property;
+ } else {
+ foreach ($this->_property as $p) {
+ if ($p->rel == $rel) {
+ return $p;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the property property for this object.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_Property objects.
+ * @return Zend_Gdata_Gapps_GroupEntry Provides a fluent interface.
+ */
+ public function setProperty($value)
+ {
+ $this->_property = $value;
+ return $this;
+ }
+
+}
+
diff --git a/Zend/Gdata/Gapps/GroupFeed.php b/Zend/Gdata/Gapps/GroupFeed.php
new file mode 100644
index 00000000..250984f1
--- /dev/null
+++ b/Zend/Gdata/Gapps/GroupFeed.php
@@ -0,0 +1,53 @@
+setGroupId($groupId);
+ $this->setStartGroupId($startGroupId);
+ }
+
+ /**
+ * Set the group id to query for. When set, only groups with a group id
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by group id.
+ *
+ * @see getGroupId
+ * @param string $value The group id to filter search results by, or null to
+ * disable.
+ */
+ public function setGroupId($value)
+ {
+ $this->_groupId = $value;
+ }
+
+ /**
+ * Get the group id to query for. If no group id is set, null will be
+ * returned.
+ *
+ * @param string $value The group id to filter search results by, or
+ * null if disabled.
+ */
+ public function getGroupId()
+ {
+ return $this->_groupId;
+ }
+
+ /**
+ * Set the member to query for. When set, only subscribers with an
+ * email address matching this value will be returned in search results.
+ * Set to null to disable filtering by username.
+ *
+ * @param string $value The member email address to filter search
+ * results by, or null to disable.
+ */
+ public function setMember($value)
+ {
+ if ($value !== null) {
+ $this->_params['member'] = $value;
+ }
+ else {
+ unset($this->_params['member']);
+ }
+ }
+
+ /**
+ * Get the member email address to query for. If no member is set,
+ * null will be returned.
+ *
+ * @see setMember
+ * @return string The member email address to filter search
+ * results by, or null if disabled.
+ */
+ public function getMember()
+ {
+ if (array_key_exists('member', $this->_params)) {
+ return $this->_params['member'];
+ } else {
+ return null;
+ }
+ }
+
+
+ /**
+ * Sets the query parameter directOnly
+ * @param bool $value
+ */
+ public function setDirectOnly($value)
+ {
+ if ($value !== null) {
+ if($value == true) {
+ $this->_params['directOnly'] = 'true';
+ } else {
+ $this->_params['directOnly'] = 'false';
+ }
+ } else {
+ unset($this->_params['directOnly']);
+ }
+ }
+
+ /**
+ *
+ * @see setDirectOnly
+ * @return bool
+ */
+ public function getDirectOnly()
+ {
+ if (array_key_exists('directOnly', $this->_params)) {
+
+ if($this->_params['directOnly'] == 'true') {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the first group id which should be displayed when retrieving
+ * a list of groups.
+ *
+ * @param string $value The first group id to be returned, or null to
+ * disable.
+ */
+ public function setStartGroupId($value)
+ {
+ if ($value !== null) {
+ $this->_params['start'] = $value;
+ } else {
+ unset($this->_params['start']);
+ }
+ }
+
+ /**
+ * Get the first group id which should be displayed when retrieving
+ * a list of groups.
+ *
+ * @see setStartGroupId
+ * @return string The first group id to be returned, or null if
+ * disabled.
+ */
+ public function getStartGroupId()
+ {
+ if (array_key_exists('start', $this->_params)) {
+ return $this->_params['start'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = Zend_Gdata_Gapps::APPS_BASE_FEED_URI;
+ $uri .= Zend_Gdata_Gapps::APPS_GROUP_PATH;
+ $uri .= '/' . $this->_domain;
+
+ if ($this->_groupId !== null) {
+ $uri .= '/' . $this->_groupId;
+ }
+
+ if(array_key_exists('member', $this->_params)) {
+ $uri .= '/';
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/MemberEntry.php b/Zend/Gdata/Gapps/MemberEntry.php
new file mode 100644
index 00000000..5bf08f28
--- /dev/null
+++ b/Zend/Gdata/Gapps/MemberEntry.php
@@ -0,0 +1,159 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_MemberEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_MemberEntry';
+
+ /**
+ * element containing information about other items
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Property
+ */
+ protected $_property = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+
+ foreach ($this->_property as $p) {
+ $element->appendChild($p->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+
+ case $this->lookupNamespace('apps') . ':' . 'property';
+ $property = new Zend_Gdata_Gapps_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->_property[] = $property;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns all property tags for this entry
+ *
+ * @param string $rel The rel value of the property to be found. If null,
+ * the array of properties is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Gapps_Extension_Property
+ * objects if $rel is null, a single
+ * Zend_Gdata_Gapps_Extension_Property object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching property is found.
+ */
+ public function getProperty($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_property;
+ } else {
+ foreach ($this->_property as $p) {
+ if ($p->rel == $rel) {
+ return $p;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the property property for this object.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_Property objects.
+ * @return Zend_Gdata_Gapps_MemberEntry Provides a fluent interface.
+ */
+ public function setProperty($value)
+ {
+ $this->_property = $value;
+ return $this;
+ }
+
+}
+
+
diff --git a/Zend/Gdata/Gapps/MemberFeed.php b/Zend/Gdata/Gapps/MemberFeed.php
new file mode 100644
index 00000000..688ed298
--- /dev/null
+++ b/Zend/Gdata/Gapps/MemberFeed.php
@@ -0,0 +1,53 @@
+setGroupId($groupId);
+ $this->setMemberId($memberId);
+ $this->setStartMemberId($startMemberId);
+ }
+
+ /**
+ * Set the group id to query for.
+ *
+ * @see getGroupId
+ * @param string $value The group id to filter search results by, or null to
+ * disable.
+ */
+ public function setGroupId($value)
+ {
+ $this->_groupId = $value;
+ }
+
+ /**
+ * Get the group id to query for. If no group id is set, null will be
+ * returned.
+ *
+ * @param string $value The group id to filter search results by, or
+ * null if disabled.
+ * @return string The group id
+ */
+ public function getGroupId()
+ {
+ return $this->_groupId;
+ }
+
+
+ /**
+ * Set the member id to query for. When set, only users with a member id
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by member id.
+ *
+ * @see getMemberId
+ * @param string $value The member id to filter search results by, or null to
+ * disable.
+ */
+ public function setMemberId($value)
+ {
+ $this->_memberId = $value;
+ }
+
+ /**
+ * Get the member id to query for. If no member id is set, null will be
+ * returned.
+ *
+ * @param string $value The member id to filter search results by, or
+ * null if disabled.
+ * @return The member id
+ */
+ public function getMemberId()
+ {
+ return $this->_memberId;
+ }
+
+ /**
+ * Set the first member id which should be displayed when retrieving
+ * a list of members.
+ *
+ * @param string $value The first member id to be returned, or null to
+ * disable.
+ */
+ public function setStartMemberId($value)
+ {
+ if ($value !== null) {
+ $this->_params['start'] = $value;
+ } else {
+ unset($this->_params['start']);
+ }
+ }
+
+ /**
+ * Get the first username which should be displayed when retrieving
+ * a list of users.
+ *
+ * @see setStartUsername
+ * @return string The first username to be returned, or null if
+ * disabled.
+ */
+ public function getStartMemberId()
+ {
+ if (array_key_exists('start', $this->_params)) {
+ return $this->_params['start'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = Zend_Gdata_Gapps::APPS_BASE_FEED_URI;
+ $uri .= Zend_Gdata_Gapps::APPS_GROUP_PATH;
+ $uri .= '/' . $this->_domain;
+ if ($this->_groupId !== null) {
+ $uri .= '/' . $this->_groupId;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'groupId must not be null');
+ }
+
+ $uri .= '/member';
+
+ if ($this->_memberId !== null) {
+ $uri .= '/' . $this->_memberId;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/NicknameEntry.php b/Zend/Gdata/Gapps/NicknameEntry.php
new file mode 100644
index 00000000..fb12ea46
--- /dev/null
+++ b/Zend/Gdata/Gapps/NicknameEntry.php
@@ -0,0 +1,189 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_NicknameEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_NicknameEntry';
+
+ /**
+ * element used to hold information about the owner
+ * of this nickname, including their username.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Login
+ */
+ protected $_login = null;
+
+ /**
+ * element used to hold the name of this nickname.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Nickname
+ */
+ protected $_nickname = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_login !== null) {
+ $element->appendChild($this->_login->getDOM($element->ownerDocument));
+ }
+ if ($this->_nickname !== null) {
+ $element->appendChild($this->_nickname->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('apps') . ':' . 'login';
+ $login = new Zend_Gdata_Gapps_Extension_Login();
+ $login->transferFromDOM($child);
+ $this->_login = $login;
+ break;
+ case $this->lookupNamespace('apps') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Gapps_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_nickname = $nickname;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value of the login property for this object.
+ *
+ * @see setLogin
+ * @return Zend_Gdata_Gapps_Extension_Login The requested object.
+ */
+ public function getLogin()
+ {
+ return $this->_login;
+ }
+
+ /**
+ * Set the value of the login property for this object. This property
+ * is used to store the username address of the current user.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Login $value The desired value for
+ * this instance's login property.
+ * @return Zend_Gdata_Gapps_NicknameEntry Provides a fluent interface.
+ */
+ public function setLogin($value)
+ {
+ $this->_login = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the nickname property for this object.
+ *
+ * @see setNickname
+ * @return Zend_Gdata_Gapps_Extension_Nickname The requested object.
+ */
+ public function getNickname()
+ {
+ return $this->_nickname;
+ }
+
+ /**
+ * Set the value of the nickname property for this object. This property
+ * is used to store the the name of the current nickname.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Nickname $value The desired value for
+ * this instance's nickname property.
+ * @return Zend_Gdata_Gapps_NicknameEntry Provides a fluent interface.
+ */
+ public function setNickname($value)
+ {
+ $this->_nickname = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/NicknameFeed.php b/Zend/Gdata/Gapps/NicknameFeed.php
new file mode 100644
index 00000000..afa9f996
--- /dev/null
+++ b/Zend/Gdata/Gapps/NicknameFeed.php
@@ -0,0 +1,53 @@
+setNickname($nickname);
+ $this->setUsername($username);
+ $this->setStartNickname($startNickname);
+ }
+
+ /**
+ * Set the nickname to query for. When set, only users with a nickname
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by username.
+ *
+ * @param string $value The nickname to filter search results by, or null
+ * to disable.
+ */
+ public function setNickname($value)
+ {
+ $this->_nickname = $value;
+ }
+
+ /**
+ * Get the nickname to query for. If no nickname is set, null will be
+ * returned.
+ *
+ * @see setNickname
+ * @return string The nickname to filter search results by, or null if
+ * disabled.
+ */
+ public function getNickname()
+ {
+ return $this->_nickname;
+ }
+
+ /**
+ * Set the username to query for. When set, only users with a username
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by username.
+ *
+ * @param string $value The username to filter search results by, or null
+ * to disable.
+ */
+ public function setUsername($value)
+ {
+ if ($value !== null) {
+ $this->_params['username'] = $value;
+ }
+ else {
+ unset($this->_params['username']);
+ }
+ }
+
+ /**
+ * Get the username to query for. If no username is set, null will be
+ * returned.
+ *
+ * @see setUsername
+ * @return string The username to filter search results by, or null if
+ * disabled.
+ */
+ public function getUsername()
+ {
+ if (array_key_exists('username', $this->_params)) {
+ return $this->_params['username'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the first nickname which should be displayed when retrieving
+ * a list of nicknames.
+ *
+ * @param string $value The first nickname to be returned, or null to
+ * disable.
+ */
+ public function setStartNickname($value)
+ {
+ if ($value !== null) {
+ $this->_params['startNickname'] = $value;
+ } else {
+ unset($this->_params['startNickname']);
+ }
+ }
+
+ /**
+ * Get the first nickname which should be displayed when retrieving
+ * a list of nicknames.
+ *
+ * @return string The first nickname to be returned, or null to
+ * disable.
+ */
+ public function getStartNickname()
+ {
+ if (array_key_exists('startNickname', $this->_params)) {
+ return $this->_params['startNickname'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_NICKNAME_PATH;
+ if ($this->_nickname !== null) {
+ $uri .= '/' . $this->_nickname;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/OwnerEntry.php b/Zend/Gdata/Gapps/OwnerEntry.php
new file mode 100644
index 00000000..4ba12240
--- /dev/null
+++ b/Zend/Gdata/Gapps/OwnerEntry.php
@@ -0,0 +1,158 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_OwnerEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_OwnerEntry';
+
+ /**
+ * element containing information about other items
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Property
+ */
+ protected $_property = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+
+ foreach ($this->_property as $p) {
+ $element->appendChild($p->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as owners of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+
+ case $this->lookupNamespace('apps') . ':' . 'property';
+ $property = new Zend_Gdata_Gapps_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->_property[] = $property;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns all property tags for this entry
+ *
+ * @param string $rel The rel value of the property to be found. If null,
+ * the array of properties is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Gapps_Extension_Property
+ * objects if $rel is null, a single
+ * Zend_Gdata_Gapps_Extension_Property object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching property is found.
+ */
+ public function getProperty($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_property;
+ } else {
+ foreach ($this->_property as $p) {
+ if ($p->rel == $rel) {
+ return $p;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the property property for this object.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_Property objects.
+ * @return Zend_Gdata_Gapps_OwnerEntry Provides a fluent interface.
+ */
+ public function setProperty($value)
+ {
+ $this->_property = $value;
+ return $this;
+ }
+
+}
+
diff --git a/Zend/Gdata/Gapps/OwnerFeed.php b/Zend/Gdata/Gapps/OwnerFeed.php
new file mode 100644
index 00000000..7d627965
--- /dev/null
+++ b/Zend/Gdata/Gapps/OwnerFeed.php
@@ -0,0 +1,53 @@
+setGroupId($groupId);
+ $this->setOwnerEmail($ownerEmail);
+ }
+
+ /**
+ * Set the group id to query for.
+ *
+ * @see getGroupId
+ * @param string $value
+ */
+ public function setGroupId($value)
+ {
+ $this->_groupId = $value;
+ }
+
+ /**
+ * Get the group id to query for.
+ *
+ * @return string
+ *
+ */
+ public function getGroupId()
+ {
+ return $this->_groupId;
+ }
+
+ /**
+ * Set the owner email to query for.
+ *
+ * @see getOwnerEmail
+ * @param string $value
+ */
+ public function setOwnerEmail($value)
+ {
+ $this->_ownerEmail = $value;
+ }
+
+ /**
+ * Get the owner email to query for.
+ *
+ * @return string
+ *
+ */
+ public function getOwnerEmail()
+ {
+ return $this->_ownerEmail;
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+ $uri = Zend_Gdata_Gapps::APPS_BASE_FEED_URI;
+ $uri .= Zend_Gdata_Gapps::APPS_GROUP_PATH;
+ $uri .= '/' . $this->_domain;
+ if ($this->_groupId !== null) {
+ $uri .= '/' . $this->_groupId;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'groupId must not be null');
+ }
+
+ $uri .= '/owner';
+
+ if ($this->_ownerEmail !== null) {
+ $uri .= '/' . $this->_ownerEmail;
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/Query.php b/Zend/Gdata/Gapps/Query.php
new file mode 100644
index 00000000..96a0831b
--- /dev/null
+++ b/Zend/Gdata/Gapps/Query.php
@@ -0,0 +1,123 @@
+_domain = $domain;
+ }
+
+ /**
+ * Set domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'.
+ *
+ * This value is used when calculating URLs for retrieving and posting
+ * entries. If no value is specified, a URL will have to be manually
+ * constructed prior to using any methods which interact with the Google
+ * Apps provisioning service.
+ *
+ * @param string $value The domain to be used for this session.
+ */
+ public function setDomain($value)
+ {
+ $this->_domain = $value;
+ }
+
+ /**
+ * Get domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'. If no domain is set, null will be
+ * returned.
+ *
+ * @see setDomain
+ * @return string The domain to be used for this session, or null if not
+ * set.
+ */
+ public function getDomain()
+ {
+ return $this->_domain;
+ }
+
+ /**
+ * Returns the base URL used to access the Google Apps service, based
+ * on the current domain. The current domain can be temporarily
+ * overridden by providing a fully qualified domain as $domain.
+ *
+ * @see setDomain
+ * @param string $domain (optional) A fully-qualified domain to use
+ * instead of the default domain for this service instance.
+ */
+ public function getBaseUrl($domain = null)
+ {
+ if ($domain !== null) {
+ return Zend_Gdata_Gapps::APPS_BASE_FEED_URI . '/' . $domain;
+ }
+ else if ($this->_domain !== null) {
+ return Zend_Gdata_Gapps::APPS_BASE_FEED_URI . '/' . $this->_domain;
+ }
+ else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Domain must be specified.');
+ }
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/ServiceException.php b/Zend/Gdata/Gapps/ServiceException.php
new file mode 100644
index 00000000..63e68df7
--- /dev/null
+++ b/Zend/Gdata/Gapps/ServiceException.php
@@ -0,0 +1,208 @@
+setErrors($errors);
+ }
+ }
+
+ /**
+ * Add a single Error object to the list of errors received by the
+ * server.
+ *
+ * @param Zend_Gdata_Gapps_Error $error An instance of an error returned
+ * by the server. The error's errorCode must be set.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function addError($error) {
+ // Make sure that we don't try to index an error that doesn't
+ // contain an index value.
+ if ($error->getErrorCode() == null) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("Error encountered without corresponding error code.");
+ }
+
+ $this->_errors[$error->getErrorCode()] = $error;
+ }
+
+ /**
+ * Set the list of errors as sent by the server inside of an
+ * AppsForYourDomainErrors tag.
+ *
+ * @param array $array An associative array containing a collection of
+ * Zend_Gdata_Gapps_Error objects. All errors must have their
+ * errorCode value set.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function setErrors($array) {
+ $this->_errors = array();
+ foreach ($array as $error) {
+ $this->addError($error);
+ }
+ }
+
+ /**
+ * Get the list of errors as sent by the server inside of an
+ * AppsForYourDomainErrors tag.
+ *
+ * @return array An associative array containing a collection of
+ * Zend_Gdata_Gapps_Error objects, indexed by error code.
+ */
+ public function getErrors() {
+ return $this->_errors;
+ }
+
+ /**
+ * Return the Error object associated with a specific error code.
+ *
+ * @return Zend_Gdata_Gapps_Error The Error object requested, or null
+ * if not found.
+ */
+ public function getError($errorCode) {
+ if (array_key_exists($errorCode, $this->_errors)) {
+ $result = $this->_errors[$errorCode];
+ return $result;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Check whether or not a particular error code was returned by the
+ * server.
+ *
+ * @param integer $errorCode The error code to check against.
+ * @return boolean Whether or not the supplied error code was returned
+ * by the server.
+ */
+ public function hasError($errorCode) {
+ return array_key_exists($errorCode, $this->_errors);
+ }
+
+ /**
+ * Import an AppsForYourDomain error from XML.
+ *
+ * @param string $string The XML data to be imported
+ * @return Zend_Gdata_Gapps_ServiceException Provides a fluent interface.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function importFromString($string) {
+ if ($string) {
+ // Check to see if an AppsForYourDomainError exists
+ //
+ // track_errors is temporarily enabled so that if an error
+ // occurs while parsing the XML we can append it to an
+ // exception by referencing $php_errormsg
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($string);
+ @ini_restore('track_errors');
+
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ // $php_errormsg is automatically generated by PHP if
+ // an error occurs while calling loadXML(), above.
+ throw new Zend_Gdata_App_Exception("DOMDocument cannot parse XML: $php_errormsg");
+ }
+
+ // Ensure that the outermost node is an AppsForYourDomain error.
+ // If it isn't, something has gone horribly wrong.
+ $rootElement = $doc->getElementsByTagName($this->_rootElement)->item(0);
+ if (!$rootElement) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('No root <' . $this->_rootElement . '> element found, cannot parse feed.');
+ }
+
+ foreach ($rootElement->childNodes as $errorNode) {
+ if (!($errorNode instanceof DOMText)) {
+ $error = new Zend_Gdata_Gapps_Error();
+ $error->transferFromDom($errorNode);
+ $this->addError($error);
+ }
+ }
+ return $this;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('XML passed to transferFromXML cannot be null');
+ }
+
+ }
+
+ /**
+ * Get a human readable version of this exception.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $result = "The server encountered the following errors processing the request:";
+ foreach ($this->_errors as $error) {
+ $result .= "\n" . $error->__toString();
+ }
+ return $result;
+ }
+}
diff --git a/Zend/Gdata/Gapps/UserEntry.php b/Zend/Gdata/Gapps/UserEntry.php
new file mode 100644
index 00000000..7b652839
--- /dev/null
+++ b/Zend/Gdata/Gapps/UserEntry.php
@@ -0,0 +1,295 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_UserEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_UserEntry';
+
+ /**
+ * element containing information about this user's
+ * account, including their username and permissions.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Login
+ */
+ protected $_login = null;
+
+ /**
+ * element containing the user's actual name.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Name
+ */
+ protected $_name = null;
+
+ /**
+ * element describing any storage quotas in place for
+ * this user.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Quota
+ */
+ protected $_quota = null;
+
+ /**
+ * element containing information about other feeds
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Extension_FeedLink
+ */
+ protected $_feedLink = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_login !== null) {
+ $element->appendChild($this->_login->getDOM($element->ownerDocument));
+ }
+ if ($this->_name !== null) {
+ $element->appendChild($this->_name->getDOM($element->ownerDocument));
+ }
+ if ($this->_quota !== null) {
+ $element->appendChild($this->_quota->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('apps') . ':' . 'login';
+ $login = new Zend_Gdata_Gapps_Extension_Login();
+ $login->transferFromDOM($child);
+ $this->_login = $login;
+ break;
+ case $this->lookupNamespace('apps') . ':' . 'name';
+ $name = new Zend_Gdata_Gapps_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_name = $name;
+ break;
+ case $this->lookupNamespace('apps') . ':' . 'quota';
+ $quota = new Zend_Gdata_Gapps_Extension_Quota();
+ $quota->transferFromDOM($child);
+ $this->_quota = $quota;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink';
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value of the login property for this object.
+ *
+ * @see setLogin
+ * @return Zend_Gdata_Gapps_Extension_Login The requested object.
+ */
+ public function getLogin()
+ {
+ return $this->_login;
+ }
+
+ /**
+ * Set the value of the login property for this object. This property
+ * is used to store the username address of the current user.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Login $value The desired value for
+ * this instance's login property.
+ * @return Zend_Gdata_Gapps_UserEntry Provides a fluent interface.
+ */
+ public function setLogin($value)
+ {
+ $this->_login = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the name property for this object.
+ *
+ * @see setName
+ * @return Zend_Gdata_Gapps_Extension_Name The requested object.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value of the name property for this object. This property
+ * is used to store the full name of the current user.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Name $value The desired value for
+ * this instance's name property.
+ * @return Zend_Gdata_Gapps_UserEntry Provides a fluent interface.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the quota property for this object.
+ *
+ * @see setQuota
+ * @return Zend_Gdata_Gapps_Extension_Quota The requested object.
+ */
+ public function getQuota()
+ {
+ return $this->_quota;
+ }
+
+ /**
+ * Set the value of the quota property for this object. This property
+ * is used to store the amount of storage available for the current
+ * user. Quotas may not be modifiable depending on the domain used.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Quota $value The desired value for
+ * this instance's quota property.
+ * @return Zend_Gdata_Gapps_UserEntry Provides a fluent interface.
+ */
+ public function setQuota($value)
+ {
+ $this->_quota = $value;
+ return $this;
+ }
+
+ /**
+ * Returns all feed links for this entry, or if a rel value is
+ * specified, the feed link associated with that value is returned.
+ *
+ * @param string $rel The rel value of the link to be found. If null,
+ * the array of links is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Extension_FeedLink
+ * objects if $rel is null, a single
+ * Zend_Gdata_Extension_FeedLink object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching feed link is found.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the feed link property for this object. This property
+ * is used to provide links to alternative feeds relevant to this entry.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_FeedLink objects.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface.
+ */
+ public function setFeedLink($value)
+ {
+ $this->_feedLink = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Gapps/UserFeed.php b/Zend/Gdata/Gapps/UserFeed.php
new file mode 100644
index 00000000..f186d053
--- /dev/null
+++ b/Zend/Gdata/Gapps/UserFeed.php
@@ -0,0 +1,53 @@
+setUsername($username);
+ $this->setStartUsername($startUsername);
+ }
+
+ /**
+ * Set the username to query for. When set, only users with a username
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by username.
+ *
+ * @see getUsername
+ * @param string $value The username to filter search results by, or null to
+ * disable.
+ */
+ public function setUsername($value)
+ {
+ $this->_username = $value;
+ }
+
+ /**
+ * Get the username to query for. If no username is set, null will be
+ * returned.
+ *
+ * @param string $value The username to filter search results by, or
+ * null if disabled.
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Set the first username which should be displayed when retrieving
+ * a list of users.
+ *
+ * @param string $value The first username to be returned, or null to
+ * disable.
+ */
+ public function setStartUsername($value)
+ {
+ if ($value !== null) {
+ $this->_params['startUsername'] = $value;
+ } else {
+ unset($this->_params['startUsername']);
+ }
+ }
+
+ /**
+ * Get the first username which should be displayed when retrieving
+ * a list of users.
+ *
+ * @see setStartUsername
+ * @return string The first username to be returned, or null if
+ * disabled.
+ */
+ public function getStartUsername()
+ {
+ if (array_key_exists('startUsername', $this->_params)) {
+ return $this->_params['startUsername'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_USER_PATH;
+ if ($this->_username !== null) {
+ $uri .= '/' . $this->_username;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gbase.php b/Zend/Gdata/Gbase.php
new file mode 100644
index 00000000..160b74d0
--- /dev/null
+++ b/Zend/Gdata/Gbase.php
@@ -0,0 +1,209 @@
+registerPackage('Zend_Gdata_Gbase');
+ $this->registerPackage('Zend_Gdata_Gbase_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retreive feed object
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Gbase_ItemFeed
+ */
+ public function getGbaseItemFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::GBASE_ITEM_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gbase_ItemFeed');
+ }
+
+ /**
+ * Retreive entry object
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Gbase_ItemEntry
+ */
+ public function getGbaseItemEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gbase_ItemEntry');
+ }
+
+ /**
+ * Insert an entry
+ *
+ * @param Zend_Gdata_Gbase_ItemEntry $entry The Base entry to upload
+ * @param boolean $dryRun Flag for the 'dry-run' parameter
+ * @return Zend_Gdata_Gbase_ItemFeed
+ */
+ public function insertGbaseItem($entry, $dryRun = false)
+ {
+ if ($dryRun == false) {
+ $uri = $this->_defaultPostUri;
+ } else {
+ $uri = $this->_defaultPostUri . '?dry-run=true';
+ }
+ $newitem = $this->insertEntry($entry, $uri, 'Zend_Gdata_Gbase_ItemEntry');
+ return $newitem;
+ }
+
+ /**
+ * Update an entry
+ *
+ * @param Zend_Gdata_Gbase_ItemEntry $entry The Base entry to be updated
+ * @param boolean $dryRun Flag for the 'dry-run' parameter
+ * @return Zend_Gdata_Gbase_ItemEntry
+ */
+ public function updateGbaseItem($entry, $dryRun = false)
+ {
+ $returnedEntry = $entry->save($dryRun);
+ return $returnedEntry;
+ }
+
+ /**
+ * Delete an entry
+ *
+ * @param Zend_Gdata_Gbase_ItemEntry $entry The Base entry to remove
+ * @param boolean $dryRun Flag for the 'dry-run' parameter
+ * @return Zend_Gdata_Gbase_ItemFeed
+ */
+ public function deleteGbaseItem($entry, $dryRun = false)
+ {
+ $entry->delete($dryRun);
+ return $this;
+ }
+
+ /**
+ * Retrieve feed object
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Gbase_SnippetFeed
+ */
+ public function getGbaseSnippetFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::GBASE_SNIPPET_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gbase_SnippetFeed');
+ }
+}
diff --git a/Zend/Gdata/Gbase/Entry.php b/Zend/Gdata/Gbase/Entry.php
new file mode 100644
index 00000000..23a244a6
--- /dev/null
+++ b/Zend/Gdata/Gbase/Entry.php
@@ -0,0 +1,151 @@
+registerAllNamespaces(Zend_Gdata_Gbase::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_baseAttributes as $baseAttribute) {
+ $element->appendChild($baseAttribute->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ if (strstr($absoluteNodeName, $this->lookupNamespace('g') . ':')) {
+ $baseAttribute = new Zend_Gdata_Gbase_Extension_BaseAttribute();
+ $baseAttribute->transferFromDOM($child);
+ $this->_baseAttributes[] = $baseAttribute;
+ } else {
+ parent::takeChildFromDOM($child);
+ }
+ }
+
+ /**
+ * Get the value of the itme_type
+ *
+ * @return Zend_Gdata_Gbase_Extension_ItemType The requested object.
+ */
+ public function getItemType()
+ {
+ $itemType = $this->getGbaseAttribute('item_type');
+ if (is_object($itemType[0])) {
+ return $itemType[0];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return all the Base attributes
+ * @return Zend_Gdata_Gbase_Extension_BaseAttribute
+ */
+ public function getGbaseAttributes() {
+ return $this->_baseAttributes;
+ }
+
+ /**
+ * Return an array of Base attributes that match the given attribute name
+ *
+ * @param string $name The name of the Base attribute to look for
+ * @return array $matches Array that contains the matching list of Base attributes
+ */
+ public function getGbaseAttribute($name)
+ {
+ $matches = array();
+ for ($i = 0; $i < count($this->_baseAttributes); $i++) {
+ $baseAttribute = $this->_baseAttributes[$i];
+ if ($baseAttribute->rootElement == $name &&
+ $baseAttribute->rootNamespaceURI == $this->lookupNamespace('g')) {
+ $matches[] = &$this->_baseAttributes[$i];
+ }
+ }
+ return $matches;
+ }
+
+}
diff --git a/Zend/Gdata/Gbase/Extension/BaseAttribute.php b/Zend/Gdata/Gbase/Extension/BaseAttribute.php
new file mode 100644
index 00000000..ddb63065
--- /dev/null
+++ b/Zend/Gdata/Gbase/Extension/BaseAttribute.php
@@ -0,0 +1,115 @@
+registerAllNamespaces(Zend_Gdata_Gbase::$namespaces);
+ if ($type !== null) {
+ $attr = array('name' => 'type', 'value' => $type);
+ $typeAttr = array('type' => $attr);
+ $this->setExtensionAttributes($typeAttr);
+ }
+ parent::__construct($name,
+ $this->_rootNamespace,
+ $this->lookupNamespace($this->_rootNamespace),
+ $text);
+ }
+
+ /**
+ * Get the name of the attribute
+ *
+ * @return attribute name The requested object.
+ */
+ public function getName() {
+ return $this->_rootElement;
+ }
+
+ /**
+ * Get the type of the attribute
+ *
+ * @return attribute type The requested object.
+ */
+ public function getType() {
+ $typeAttr = $this->getExtensionAttributes();
+ return $typeAttr['type']['value'];
+ }
+
+ /**
+ * Set the 'name' of the Base attribute object:
+ * <g:[$name] type='[$type]'>[$value]</g:[$name]>
+ *
+ * @param Zend_Gdata_App_Extension_Element $attribute The attribute object
+ * @param string $name The name of the Base attribute
+ * @return Zend_Gdata_Extension_ItemEntry Provides a fluent interface
+ */
+ public function setName($name) {
+ $this->_rootElement = $name;
+ return $this;
+ }
+
+ /**
+ * Set the 'type' of the Base attribute object:
+ * <g:[$name] type='[$type]'>[$value]</g:[$name]>
+ *
+ * @param Zend_Gdata_App_Extension_Element $attribute The attribute object
+ * @param string $type The type of the Base attribute
+ * @return Zend_Gdata_Extension_ItemEntry Provides a fluent interface
+ */
+ public function setType($type) {
+ $attr = array('name' => 'type', 'value' => $type);
+ $typeAttr = array('type' => $attr);
+ $this->setExtensionAttributes($typeAttr);
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Gbase/Feed.php b/Zend/Gdata/Gbase/Feed.php
new file mode 100644
index 00000000..8706d045
--- /dev/null
+++ b/Zend/Gdata/Gbase/Feed.php
@@ -0,0 +1,60 @@
+registerAllNamespaces(Zend_Gdata_Gbase::$namespaces);
+ parent::__construct($element);
+ }
+}
diff --git a/Zend/Gdata/Gbase/ItemEntry.php b/Zend/Gdata/Gbase/ItemEntry.php
new file mode 100644
index 00000000..f8bcbb10
--- /dev/null
+++ b/Zend/Gdata/Gbase/ItemEntry.php
@@ -0,0 +1,161 @@
+addGbaseAttribute('item_type', $value, 'text');
+ return $this;
+ }
+
+ /**
+ * Adds a custom attribute to the entry in the following format:
+ * <g:[$name] type='[$type]'>[$value]</g:[$name]>
+ *
+ * @param string $name The name of the attribute
+ * @param string $value The text value of the attribute
+ * @param string $type (optional) The type of the attribute.
+ * e.g.: 'text', 'number', 'floatUnit'
+ * @return Zend_Gdata_Gbase_ItemEntry Provides a fluent interface
+ */
+ public function addGbaseAttribute($name, $text, $type = null) {
+ $newBaseAttribute = new Zend_Gdata_Gbase_Extension_BaseAttribute($name, $text, $type);
+ $this->_baseAttributes[] = $newBaseAttribute;
+ return $this;
+ }
+
+ /**
+ * Removes a Base attribute from the current list of Base attributes
+ *
+ * @param Zend_Gdata_Gbase_Extension_BaseAttribute $baseAttribute The attribute to be removed
+ * @return Zend_Gdata_Gbase_ItemEntry Provides a fluent interface
+ */
+ public function removeGbaseAttribute($baseAttribute) {
+ $baseAttributes = $this->_baseAttributes;
+ for ($i = 0; $i < count($this->_baseAttributes); $i++) {
+ if ($this->_baseAttributes[$i] == $baseAttribute) {
+ array_splice($baseAttributes, $i, 1);
+ break;
+ }
+ }
+ $this->_baseAttributes = $baseAttributes;
+ return $this;
+ }
+
+ /**
+ * Uploads changes in this entry to the server using Zend_Gdata_App
+ *
+ * @param boolean $dryRun Whether the transaction is dry run or not.
+ * @param string|null $uri The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null $className The name of the class that should we
+ * deserializing the server response. If null, then
+ * 'Zend_Gdata_App_Entry' will be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The updated entry
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function save($dryRun = false,
+ $uri = null,
+ $className = null,
+ $extraHeaders = array())
+ {
+ if ($dryRun == true) {
+ $editLink = $this->getEditLink();
+ if ($uri == null && $editLink !== null) {
+ $uri = $editLink->getHref() . '?dry-run=true';
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException('You must specify an URI which needs deleted.');
+ }
+ $service = new Zend_Gdata_App($this->getHttpClient());
+ return $service->updateEntry($this,
+ $uri,
+ $className,
+ $extraHeaders);
+ } else {
+ parent::save($uri, $className, $extraHeaders);
+ }
+ }
+
+ /**
+ * Deletes this entry to the server using the referenced
+ * Zend_Http_Client to do a HTTP DELETE to the edit link stored in this
+ * entry's link collection.
+ *
+ * @param boolean $dyrRun Whether the transaction is dry run or not
+ * @return void
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function delete($dryRun = false)
+ {
+ $uri = null;
+
+ if ($dryRun == true) {
+ $editLink = $this->getEditLink();
+ if ($editLink !== null) {
+ $uri = $editLink->getHref() . '?dry-run=true';
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException('You must specify an URI which needs deleted.');
+ }
+ parent::delete($uri);
+ } else {
+ parent::delete();
+ }
+ }
+
+}
diff --git a/Zend/Gdata/Gbase/ItemFeed.php b/Zend/Gdata/Gbase/ItemFeed.php
new file mode 100644
index 00000000..e71cc1cf
--- /dev/null
+++ b/Zend/Gdata/Gbase/ItemFeed.php
@@ -0,0 +1,48 @@
+_id = $value;
+ return $this;
+ }
+
+ /*
+ * @return string id
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->_defaultFeedUri;
+ if ($this->getId() !== null) {
+ $uri .= '/' . $this->getId();
+ } else {
+ $uri .= $this->getQueryString();
+ }
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Gbase/Query.php b/Zend/Gdata/Gbase/Query.php
new file mode 100644
index 00000000..e8064de6
--- /dev/null
+++ b/Zend/Gdata/Gbase/Query.php
@@ -0,0 +1,268 @@
+_params['key'] = $value;
+ } else {
+ unset($this->_params['key']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setBq($value)
+ {
+ if ($value !== null) {
+ $this->_params['bq'] = $value;
+ } else {
+ unset($this->_params['bq']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setRefine($value)
+ {
+ if ($value !== null) {
+ $this->_params['refine'] = $value;
+ } else {
+ unset($this->_params['refine']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setContent($value)
+ {
+ if ($value !== null) {
+ $this->_params['content'] = $value;
+ } else {
+ unset($this->_params['content']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value !== null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setSortOrder($value)
+ {
+ if ($value !== null) {
+ $this->_params['sortorder'] = $value;
+ } else {
+ unset($this->_params['sortorder']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setCrowdBy($value)
+ {
+ if ($value !== null) {
+ $this->_params['crowdby'] = $value;
+ } else {
+ unset($this->_params['crowdby']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Gbase_ItemQuery Provides a fluent interface
+ */
+ public function setAdjust($value)
+ {
+ if ($value !== null) {
+ $this->_params['adjust'] = $value;
+ } else {
+ unset($this->_params['adjust']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string key
+ */
+ public function getKey()
+ {
+ if (array_key_exists('key', $this->_params)) {
+ return $this->_params['key'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string bq
+ */
+ public function getBq()
+ {
+ if (array_key_exists('bq', $this->_params)) {
+ return $this->_params['bq'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string refine
+ */
+ public function getRefine()
+ {
+ if (array_key_exists('refine', $this->_params)) {
+ return $this->_params['refine'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string content
+ */
+ public function getContent()
+ {
+ if (array_key_exists('content', $this->_params)) {
+ return $this->_params['content'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string orderby
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string sortorder
+ */
+ public function getSortOrder()
+ {
+ if (array_key_exists('sortorder', $this->_params)) {
+ return $this->_params['sortorder'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string crowdby
+ */
+ public function getCrowdBy()
+ {
+ if (array_key_exists('crowdby', $this->_params)) {
+ return $this->_params['crowdby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string adjust
+ */
+ public function getAdjust()
+ {
+ if (array_key_exists('adjust', $this->_params)) {
+ return $this->_params['adjust'];
+ } else {
+ return null;
+ }
+ }
+
+}
diff --git a/Zend/Gdata/Gbase/SnippetEntry.php b/Zend/Gdata/Gbase/SnippetEntry.php
new file mode 100644
index 00000000..0a443cc4
--- /dev/null
+++ b/Zend/Gdata/Gbase/SnippetEntry.php
@@ -0,0 +1,48 @@
+_defaultFeedUri;
+ if ($this->getCategory() !== null) {
+ $uri .= '/-/' . $this->getCategory();
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Geo.php b/Zend/Gdata/Geo.php
new file mode 100644
index 00000000..31634efc
--- /dev/null
+++ b/Zend/Gdata/Geo.php
@@ -0,0 +1,70 @@
+registerPackage('Zend_Gdata_Geo');
+ $this->registerPackage('Zend_Gdata_Geo_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/Zend/Gdata/Geo/Entry.php b/Zend/Gdata/Geo/Entry.php
new file mode 100644
index 00000000..c9255e26
--- /dev/null
+++ b/Zend/Gdata/Geo/Entry.php
@@ -0,0 +1,97 @@
+registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_where != null) {
+ $element->appendChild($this->_where->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('georss') . ':' . 'where':
+ $where = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $where->transferFromDOM($child);
+ $this->_where = $where;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/Geo/Extension/GeoRssWhere.php b/Zend/Gdata/Geo/Extension/GeoRssWhere.php
new file mode 100644
index 00000000..89eb2d8b
--- /dev/null
+++ b/Zend/Gdata/Geo/Extension/GeoRssWhere.php
@@ -0,0 +1,135 @@
+registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct();
+ $this->setPoint($point);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_point !== null) {
+ $element->appendChild($this->_point->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gml') . ':' . 'Point';
+ $point = new Zend_Gdata_Geo_Extension_GmlPoint();
+ $point->transferFromDOM($child);
+ $this->_point = $point;
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's point attribute.
+ *
+ * @see setPoint
+ * @return Zend_Gdata_Geo_Extension_GmlPoint The requested attribute.
+ */
+ public function getPoint()
+ {
+ return $this->_point;
+ }
+
+ /**
+ * Set the value for this element's point attribute.
+ *
+ * @param Zend_Gdata_Geo_Extension_GmlPoint $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere Provides a fluent interface
+ */
+ public function setPoint($value)
+ {
+ $this->_point = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Geo/Extension/GmlPoint.php b/Zend/Gdata/Geo/Extension/GmlPoint.php
new file mode 100644
index 00000000..7fec2c88
--- /dev/null
+++ b/Zend/Gdata/Geo/Extension/GmlPoint.php
@@ -0,0 +1,136 @@
+registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct();
+ $this->setPos($pos);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_pos !== null) {
+ $element->appendChild($this->_pos->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gml') . ':' . 'pos';
+ $pos = new Zend_Gdata_Geo_Extension_GmlPos();
+ $pos->transferFromDOM($child);
+ $this->_pos = $pos;
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's pos attribute.
+ *
+ * @see setPos
+ * @return Zend_Gdata_Geo_Extension_GmlPos The requested attribute.
+ */
+ public function getPos()
+ {
+ return $this->_pos;
+ }
+
+ /**
+ * Set the value for this element's distance attribute.
+ *
+ * @param Zend_Gdata_Geo_Extension_GmlPos $value The desired value for this attribute
+ * @return Zend_Gdata_Geo_Extension_GmlPoint Provides a fluent interface
+ */
+ public function setPos($value)
+ {
+ $this->_pos = $value;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/Geo/Extension/GmlPos.php b/Zend/Gdata/Geo/Extension/GmlPos.php
new file mode 100644
index 00000000..16a5fad7
--- /dev/null
+++ b/Zend/Gdata/Geo/Extension/GmlPos.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Geo/Feed.php b/Zend/Gdata/Geo/Feed.php
new file mode 100644
index 00000000..bf9a0c26
--- /dev/null
+++ b/Zend/Gdata/Geo/Feed.php
@@ -0,0 +1,64 @@
+registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/Health.php b/Zend/Gdata/Health.php
new file mode 100644
index 00000000..ee428b71
--- /dev/null
+++ b/Zend/Gdata/Health.php
@@ -0,0 +1,274 @@
+ 'urn:astm-org:CCR',
+ 'batch' => 'http://schemas.google.com/gdata/batch',
+ 'h9m' => 'http://schemas.google.com/health/metadata',
+ 'gAcl' => 'http://schemas.google.com/acl/2007',
+ 'gd' => 'http://schemas.google.com/g/2005');
+
+ /**
+ * Create Zend_Gdata_Health object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google Health servers.
+ * @param string $applicationId The identity of the application in the form
+ * of Company-AppName-Version
+ * @param bool $useH9Sandbox True if the H9 Developer's Sandbox should be
+ * used instead of production Google Health.
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0', $useH9Sandbox = false)
+ {
+ $this->registerPackage('Zend_Gdata_Health');
+ $this->registerPackage('Zend_Gdata_Health_Extension_Ccr');
+ parent::__construct($client, $applicationId);
+ $this->_useH9Sandbox = $useH9Sandbox;
+ }
+
+ /**
+ * Gets the id of the user's profile
+ *
+ * @return string The profile id
+ */
+ public function getProfileID()
+ {
+ return $this->_profileID;
+ }
+
+ /**
+ * Sets which of the user's profiles will be used
+ *
+ * @param string $id The profile ID
+ * @return Zend_Gdata_Health Provides a fluent interface
+ */
+ public function setProfileID($id) {
+ $this->_profileID = $id;
+ return $this;
+ }
+
+ /**
+ * Retrieves the list of profiles associated with the user's ClientLogin
+ * credentials.
+ *
+ * @param string $query The query of the feed as a URL or Query object
+ * @return Zend_Gdata_Feed
+ */
+ public function getHealthProfileListFeed($query = null)
+ {
+ if ($this->_httpClient->getClientLoginToken() === null) {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Profiles list feed is only available when using ClientLogin');
+ }
+
+ if($query === null) {
+ $uri = self::CLIENTLOGIN_PROFILELIST_FEED_URI;
+ } else if ($query instanceof Zend_Gdata_Query) {
+ $uri = $query->getQueryUrl();
+ } else {
+ $uri = $query;
+ }
+
+ // use correct feed for /h9 or /health
+ if ($this->_useH9Sandbox) {
+ $uri = preg_replace('/\/health\//', '/h9/', $uri);
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Health_ProfileListFeed');
+ }
+
+ /**
+ * Retrieve a user's profile as a feed object. If ClientLogin is used, the
+ * profile associated with $this->_profileID is returned, otherwise
+ * the profile associated with the AuthSub token is read.
+ *
+ * @param mixed $query The query for the feed, as a URL or Query
+ * @return Zend_Gdata_Health_ProfileFeed
+ */
+ public function getHealthProfileFeed($query = null)
+ {
+ if ($this->_httpClient->getClientLoginToken() !== null &&
+ $this->getProfileID() == null) {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Profile ID must not be null. Did you call setProfileID()?');
+ }
+
+ if ($query instanceof Zend_Gdata_Query) {
+ $uri = $query->getQueryUrl();
+ } else if ($this->_httpClient->getClientLoginToken() !== null &&
+ $query == null) {
+ $uri = self::CLIENTLOGIN_PROFILE_FEED_URI . '/' . $this->getProfileID();
+ } else if ($query === null) {
+ $uri = self::AUTHSUB_PROFILE_FEED_URI;
+ } else {
+ $uri = $query;
+ }
+
+ // use correct feed for /h9 or /health
+ if ($this->_useH9Sandbox) {
+ $uri = preg_replace('/\/health\//', '/h9/', $uri);
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Health_ProfileFeed');
+ }
+
+ /**
+ * Retrieve a profile entry object
+ *
+ * @param mixed $query The query for the feed, as a URL or Query
+ * @return Zend_Gdata_Health_ProfileEntry
+ */
+ public function getHealthProfileEntry($query = null)
+ {
+ if ($query === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Query must not be null');
+ } else if ($query instanceof Zend_Gdata_Query) {
+ $uri = $query->getQueryUrl();
+ } else {
+ $uri = $query;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Health_ProfileEntry');
+ }
+
+ /**
+ * Posts a new notice using the register feed. This function constructs
+ * the atom profile entry.
+ *
+ * @param string $subject The subject line of the notice
+ * @param string $body The message body of the notice
+ * @param string $bodyType The (optional) type of message body
+ * (text, xhtml, html, etc.)
+ * @param string $ccrXML The (optional) CCR to add to the user's profile
+ * @return Zend_Gdata_Health_ProfileEntry
+ */
+ public function sendHealthNotice($subject, $body, $bodyType = null, $ccrXML = null)
+ {
+ if ($this->_httpClient->getClientLoginToken()) {
+ $profileID = $this->getProfileID();
+ if ($profileID !== null) {
+ $uri = self::CLIENTLOGIN_REGISTER_FEED_URI . '/' . $profileID;
+ } else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Profile ID must not be null. Did you call setProfileID()?');
+ }
+ } else {
+ $uri = self::AUTHSUB_REGISTER_FEED_URI;
+ }
+
+ $entry = new Zend_Gdata_Health_ProfileEntry();
+ $entry->title = $this->newTitle($subject);
+ $entry->content = $this->newContent($body);
+ $entry->content->type = $bodyType ? $bodyType : 'text';
+ $entry->setCcr($ccrXML);
+
+ // use correct feed for /h9 or /health
+ if ($this->_useH9Sandbox) {
+ $uri = preg_replace('/\/health\//', '/h9/', $uri);
+ }
+
+ return $this->insertEntry($entry, $uri, 'Zend_Gdata_Health_ProfileEntry');
+ }
+}
diff --git a/Zend/Gdata/Health/Extension/Ccr.php b/Zend/Gdata/Health/Extension/Ccr.php
new file mode 100644
index 00000000..05bd8ca6
--- /dev/null
+++ b/Zend/Gdata/Health/Extension/Ccr.php
@@ -0,0 +1,124 @@
+ $nsUri) {
+ $this->registerNamespace($nsPrefix, $nsUri);
+ }
+ }
+
+ /**
+ * Transfers each child and attribute into member variables.
+ * This is called when XML is received over the wire and the data
+ * model needs to be built to represent this XML.
+ *
+ * @param DOMNode $node The DOMNode that represents this object's data
+ */
+ public function transferFromDOM($node)
+ {
+ $this->_ccrDom = $node;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ if ($doc === null) {
+ $doc = new DOMDocument('1.0', 'utf-8');
+ }
+ $domElement = $doc->importNode($this->_ccrDom, true);
+ return $domElement;
+ }
+
+ /**
+ * Magic helper that allows drilling down and returning specific elements
+ * in the CCR. For example, to retrieve the users medications
+ * (/ContinuityOfCareRecord/Body/Medications) from the entry's CCR, call
+ * $entry->getCcr()->getMedications(). Similarly, getConditions() would
+ * return extract the user's conditions.
+ *
+ * @param string $name Name of the function to call
+ * @param unknown $args
+ * @return array. A list of the appropriate CCR data
+ */
+ public function __call($name, $args)
+ {
+ if (substr($name, 0, 3) === 'get') {
+ $category = substr($name, 3);
+
+ switch ($category) {
+ case 'Conditions':
+ $category = 'Problems';
+ break;
+ case 'Allergies':
+ $category = 'Alerts';
+ break;
+ case 'TestResults':
+ // TestResults is an alias for LabResults
+ case 'LabResults':
+ $category = 'Results';
+ break;
+ default:
+ // $category is already well formatted
+ }
+
+ return $this->_ccrDom->getElementsByTagNameNS($this->lookupNamespace('ccr'), $category);
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/Zend/Gdata/Health/ProfileEntry.php b/Zend/Gdata/Health/ProfileEntry.php
new file mode 100644
index 00000000..8a00bf8a
--- /dev/null
+++ b/Zend/Gdata/Health/ProfileEntry.php
@@ -0,0 +1,135 @@
+ $nsUri) {
+ $this->registerNamespace($nsPrefix, $nsUri);
+ }
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_ccrData !== null) {
+ $element->appendChild($this->_ccrData->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ if (strstr($absoluteNodeName, $this->lookupNamespace('ccr') . ':')) {
+ $ccrElement = new Zend_Gdata_Health_Extension_Ccr();
+ $ccrElement->transferFromDOM($child);
+ $this->_ccrData = $ccrElement;
+ } else {
+ parent::takeChildFromDOM($child);
+
+ }
+ }
+
+ /**
+ * Sets the profile entry's CCR data
+ * @param string $ccrXMLStr The CCR as an xml string
+ * @return Zend_Gdata_Health_Extension_Ccr
+ */
+ public function setCcr($ccrXMLStr) {
+ $ccrElement = null;
+ if ($ccrXMLStr != null) {
+ $ccrElement = new Zend_Gdata_Health_Extension_Ccr();
+ $ccrElement->transferFromXML($ccrXMLStr);
+ $this->_ccrData = $ccrElement;
+ }
+ return $ccrElement;
+ }
+
+
+ /**
+ * Returns all the CCR data in a profile entry
+ * @return Zend_Gdata_Health_Extension_Ccr
+ */
+ public function getCcr() {
+ return $this->_ccrData;
+ }
+}
diff --git a/Zend/Gdata/Health/ProfileFeed.php b/Zend/Gdata/Health/ProfileFeed.php
new file mode 100644
index 00000000..769d96f8
--- /dev/null
+++ b/Zend/Gdata/Health/ProfileFeed.php
@@ -0,0 +1,67 @@
+ $nsUri) {
+ $this->registerNamespace($nsPrefix, $nsUri);
+ }
+ parent::__construct($element);
+ }
+
+ public function getEntries()
+ {
+ return $this->entry;
+ }
+}
diff --git a/Zend/Gdata/Health/ProfileListEntry.php b/Zend/Gdata/Health/ProfileListEntry.php
new file mode 100644
index 00000000..ce84601e
--- /dev/null
+++ b/Zend/Gdata/Health/ProfileListEntry.php
@@ -0,0 +1,100 @@
+
+ * @return string The profile id
+ */
+ public function getProfileID() {
+ return $this->getContent()->text;
+ }
+
+ /**
+ * Retrieves the profile's title, which is contained in
+ * @return string The profile name
+ */
+ public function getProfileName() {
+ return $this->getTitle()->text;
+ }
+
+}
diff --git a/Zend/Gdata/Health/ProfileListFeed.php b/Zend/Gdata/Health/ProfileListFeed.php
new file mode 100644
index 00000000..055b8f73
--- /dev/null
+++ b/Zend/Gdata/Health/ProfileListFeed.php
@@ -0,0 +1,53 @@
+entry;
+ }
+}
diff --git a/Zend/Gdata/Health/Query.php b/Zend/Gdata/Health/Query.php
new file mode 100644
index 00000000..f7fbda70
--- /dev/null
+++ b/Zend/Gdata/Health/Query.php
@@ -0,0 +1,285 @@
+_params['digest'] = $value;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the digest parameter's value.
+ *
+ * @return string The value set for the digest parameter.
+ */
+ public function getDigest()
+ {
+ if (array_key_exists('digest', $this->_params)) {
+ return $this->_params['digest'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Setter for category queries.
+ *
+ * @param string $item A category to query.
+ * @param string $name (optional) A specific item to search a category for.
+ * An example would be 'Lipitor' if $item is set to 'medication'.
+ * @return Zend_Gdata_Health_Query Provides a fluent interface
+ */
+ public function setCategory($item, $name = null)
+ {
+ $this->_category = $item .
+ ($name ? '/' . urlencode('{' . self::ITEM_CATEGORY_NS . '}' . $name) : null);
+ return $this;
+ }
+
+ /**
+ * Returns the query object's category.
+ *
+ * @return string id
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+ /**
+ * Setter for the grouped parameter.
+ *
+ * @param string $value setting a count of results per group.
+ * @return Zend_Gdata_Health_Query Provides a fluent interface
+ */
+ public function setGrouped($value)
+ {
+ if ($value !== null) {
+ $this->_params['grouped'] = $value;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the value set for the grouped parameter.
+ *
+ * @return string grouped parameter.
+ */
+ public function getGrouped()
+ {
+ if (array_key_exists('grouped', $this->_params)) {
+ return $this->_params['grouped'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Setter for the max-results-group parameter.
+ *
+ * @param int $value Specifies the maximum number of groups to be
+ * retrieved. Must be an integer value greater than zero. This parameter
+ * is only valid if grouped=true.
+ * @return Zend_Gdata_Health_Query Provides a fluent interface
+ */
+ public function setMaxResultsGroup($value)
+ {
+ if ($value !== null) {
+ if ($value <= 0 || $this->getGrouped() !== 'true') {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'The max-results-group parameter must be set to a value
+ greater than 0 and can only be used if grouped=true');
+ } else {
+ $this->_params['max-results-group'] = $value;
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the value set for max-results-group.
+ *
+ * @return int Returns max-results-group parameter.
+ */
+ public function getMaxResultsGroup()
+ {
+ if (array_key_exists('max-results-group', $this->_params)) {
+ return $this->_params['max-results-group'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Setter for the max-results-group parameter.
+ *
+ * @param int $value Specifies the maximum number of records to be
+ * retrieved from each group. The limits that you specify with this
+ * parameter apply to all groups. Must be an integer value greater than
+ * zero. This parameter is only valid if grouped=true.
+ * @return Zend_Gdata_Health_Query Provides a fluent interface
+ */
+ public function setMaxResultsInGroup($value)
+ {
+ if ($value !== null) {
+ if ($value <= 0 || $this->getGrouped() !== 'true') {
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'The max-results-in-group parameter must be set to a value
+ greater than 0 and can only be used if grouped=true');
+ } else {
+ $this->_params['max-results-in-group'] = $value;
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the value set for max-results-in-group.
+ *
+ * @return int Returns max-results-in-group parameter.
+ */
+ public function getMaxResultsInGroup()
+ {
+ if (array_key_exists('max-results-in-group', $this->_params)) {
+ return $this->_params['max-results-in-group'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Setter for the start-index-group parameter.
+ *
+ * @param int $value Retrieves only items whose group ranking is at
+ * least start-index-group. This should be set to a 1-based index of the
+ * first group to be retrieved. The range is applied per category.
+ * This parameter is only valid if grouped=true.
+ * @return Zend_Gdata_Health_Query Provides a fluent interface
+ */
+ public function setStartIndexGroup($value)
+ {
+ if ($value !== null && $this->getGrouped() !== 'true') {
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'The start-index-group can only be used if grouped=true');
+ } else {
+ $this->_params['start-index-group'] = $value;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the value set for start-index-group.
+ *
+ * @return int Returns start-index-group parameter.
+ */
+ public function getStartIndexGroup()
+ {
+ if (array_key_exists('start-index-group', $this->_params)) {
+ return $this->_params['start-index-group'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Setter for the start-index-in-group parameter.
+ *
+ * @param int $value A 1-based index of the records to be retrieved from
+ * each group. This parameter is only valid if grouped=true.
+ * @return Zend_Gdata_Health_Query Provides a fluent interface
+ */
+ public function setStartIndexInGroup($value)
+ {
+ if ($value !== null && $this->getGrouped() !== 'true') {
+ throw new Zend_Gdata_App_InvalidArgumentException('start-index-in-group');
+ } else {
+ $this->_params['start-index-in-group'] = $value;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the value set for start-index-in-group.
+ *
+ * @return int Returns start-index-in-group parameter.
+ */
+ public function getStartIndexInGroup()
+ {
+ if (array_key_exists('start-index-in-group', $this->_params)) {
+ return $this->_params['start-index-in-group'];
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/Zend/Gdata/HttpAdapterStreamingProxy.php b/Zend/Gdata/HttpAdapterStreamingProxy.php
new file mode 100644
index 00000000..1c48b849
--- /dev/null
+++ b/Zend/Gdata/HttpAdapterStreamingProxy.php
@@ -0,0 +1,127 @@
+config['proxy_host']) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('No proxy host set!');
+ }
+
+ // Make sure we're properly connected
+ if (! $this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are not connected');
+ }
+
+ $host = $this->config['proxy_host'];
+ $port = $this->config['proxy_port'];
+
+ if ($this->connected_to[0] != $host || $this->connected_to[1] != $port) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are connected to the wrong proxy ' .
+ 'server');
+ }
+
+ // Add Proxy-Authorization header
+ if ($this->config['proxy_user'] && ! isset($headers['proxy-authorization'])) {
+ $headers['proxy-authorization'] = Zend_Http_Client::encodeAuthHeader(
+ $this->config['proxy_user'], $this->config['proxy_pass'], $this->config['proxy_auth']
+ );
+ }
+
+ // if we are proxying HTTPS, preform CONNECT handshake with the proxy
+ if ($uri->getScheme() == 'https' && (! $this->negotiated)) {
+ $this->connectHandshake($uri->getHost(), $uri->getPort(), $http_ver, $headers);
+ $this->negotiated = true;
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ $request = "{$method} {$uri->__toString()} HTTP/{$http_ver}\r\n";
+
+ // Add all headers to the request string
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = "$k: $v";
+ $request .= "$v\r\n";
+ }
+
+ $request .= "\r\n";
+
+ // Send the request headers
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to proxy server');
+ }
+
+ //read from $body, write to socket
+ while ($body->hasData()) {
+ if (! @fwrite($this->socket, $body->read(self::CHUNK_SIZE))) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server');
+ }
+ }
+ return 'Large upload, request is not cached.';
+ }
+}
diff --git a/Zend/Gdata/HttpAdapterStreamingSocket.php b/Zend/Gdata/HttpAdapterStreamingSocket.php
new file mode 100644
index 00000000..e1d5d2cc
--- /dev/null
+++ b/Zend/Gdata/HttpAdapterStreamingSocket.php
@@ -0,0 +1,111 @@
+socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are not connected');
+ }
+
+ $host = $uri->getHost();
+ $host = (strtolower($uri->getScheme()) == 'https' ? $this->config['ssltransport'] : 'tcp') . '://' . $host;
+ if ($this->connected_to[0] != $host || $this->connected_to[1] != $uri->getPort()) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are connected to the wrong host');
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ $path = $uri->getPath();
+ if ($uri->getQuery()) $path .= '?' . $uri->getQuery();
+ $request = "{$method} {$path} HTTP/{$http_ver}\r\n";
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = ucfirst($k) . ": $v";
+ $request .= "$v\r\n";
+ }
+
+ // Send the headers over
+ $request .= "\r\n";
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server');
+ }
+
+
+ //read from $body, write to socket
+ $chunk = $body->read(self::CHUNK_SIZE);
+ while ($chunk !== FALSE) {
+ if (! @fwrite($this->socket, $chunk)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server');
+ }
+ $chunk = $body->read(self::CHUNK_SIZE);
+ }
+ $body->closeFileHandle();
+ return 'Large upload, request is not cached.';
+ }
+}
diff --git a/Zend/Gdata/HttpClient.php b/Zend/Gdata/HttpClient.php
new file mode 100644
index 00000000..23022a94
--- /dev/null
+++ b/Zend/Gdata/HttpClient.php
@@ -0,0 +1,352 @@
+setAuthSubPrivateKey($key, $passphrase);
+ fclose($fp);
+ }
+
+ /**
+ * Sets the PEM formatted private key to be used for secure AuthSub auth.
+ *
+ * In order to call this method, openssl must be enabled in your PHP
+ * installation. Otherwise, a Zend_Gdata_App_InvalidArgumentException
+ * will be thrown.
+ *
+ * @param string $key The private key
+ * @param string $passphrase The optional private key passphrase
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_HttpClient Provides a fluent interface
+ */
+ public function setAuthSubPrivateKey($key, $passphrase = null) {
+ if ($key != null && !function_exists('openssl_pkey_get_private')) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You cannot enable secure AuthSub if the openssl module ' .
+ 'is not enabled in your PHP installation.');
+ }
+ $this->_authSubPrivateKeyId = openssl_pkey_get_private(
+ $key, $passphrase);
+ return $this;
+ }
+
+ /**
+ * Gets the openssl private key id
+ *
+ * @return string The private key
+ */
+ public function getAuthSubPrivateKeyId() {
+ return $this->_authSubPrivateKeyId;
+ }
+
+ /**
+ * Gets the AuthSub token used for authentication
+ *
+ * @return string The token
+ */
+ public function getAuthSubToken() {
+ return $this->_authSubToken;
+ }
+
+ /**
+ * Sets the AuthSub token used for authentication
+ *
+ * @param string $token The token
+ * @return Zend_Gdata_HttpClient Provides a fluent interface
+ */
+ public function setAuthSubToken($token) {
+ $this->_authSubToken = $token;
+ return $this;
+ }
+
+ /**
+ * Gets the ClientLogin token used for authentication
+ *
+ * @return string The token
+ */
+ public function getClientLoginToken() {
+ return $this->_clientLoginToken;
+ }
+
+ /**
+ * Sets the ClientLogin token used for authentication
+ *
+ * @param string $token The token
+ * @return Zend_Gdata_HttpClient Provides a fluent interface
+ */
+ public function setClientLoginToken($token) {
+ $this->_clientLoginToken = $token;
+ return $this;
+ }
+
+ /**
+ * Filters the HTTP requests being sent to add the Authorization header.
+ *
+ * If both AuthSub and ClientLogin tokens are set,
+ * AuthSub takes precedence. If an AuthSub key is set, then
+ * secure AuthSub authentication is used, and the request is signed.
+ * Requests must be signed only with the private key corresponding to the
+ * public key registered with Google. If an AuthSub key is set, but
+ * openssl support is not enabled in the PHP installation, an exception is
+ * thrown.
+ *
+ * @param string $method The HTTP method
+ * @param string $url The URL
+ * @param array $headers An associate array of headers to be
+ * sent with the request or null
+ * @param string $body The body of the request or null
+ * @param string $contentType The MIME content type of the body or null
+ * @throws Zend_Gdata_App_Exception if there was a signing failure
+ * @return array The processed values in an associative array,
+ * using the same names as the params
+ */
+ public function filterHttpRequest($method, $url, $headers = array(), $body = null, $contentType = null) {
+ if ($this->getAuthSubToken() != null) {
+ // AuthSub authentication
+ if ($this->getAuthSubPrivateKeyId() != null) {
+ // secure AuthSub
+ $time = time();
+ $nonce = mt_rand(0, 999999999);
+ $dataToSign = $method . ' ' . $url . ' ' . $time . ' ' . $nonce;
+
+ // compute signature
+ $pKeyId = $this->getAuthSubPrivateKeyId();
+ $signSuccess = openssl_sign($dataToSign, $signature, $pKeyId,
+ OPENSSL_ALGO_SHA1);
+ if (!$signSuccess) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'openssl_signing failure - returned false');
+ }
+ // encode signature
+ $encodedSignature = base64_encode($signature);
+
+ // final header
+ $headers['authorization'] = 'AuthSub token="' . $this->getAuthSubToken() . '" ' .
+ 'data="' . $dataToSign . '" ' .
+ 'sig="' . $encodedSignature . '" ' .
+ 'sigalg="rsa-sha1"';
+ } else {
+ // AuthSub without secure tokens
+ $headers['authorization'] = 'AuthSub token="' . $this->getAuthSubToken() . '"';
+ }
+ } elseif ($this->getClientLoginToken() != null) {
+ $headers['authorization'] = 'GoogleLogin auth=' . $this->getClientLoginToken();
+ }
+ return array('method' => $method, 'url' => $url, 'body' => $body, 'headers' => $headers, 'contentType' => $contentType);
+ }
+
+ /**
+ * Method for filtering the HTTP response, though no filtering is
+ * currently done.
+ *
+ * @param Zend_Http_Response $response The response object to filter
+ * @return Zend_Http_Response The filterd response object
+ */
+ public function filterHttpResponse($response) {
+ return $response;
+ }
+
+ /**
+ * Return the current connection adapter
+ *
+ * @return Zend_Http_Client_Adapter_Interface|string $adapter
+ */
+ public function getAdapter()
+ {
+ return $this->adapter;
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * @param Zend_Http_Client_Adapter_Interface $adapter
+ * @return void
+ */
+ public function setAdapter($adapter)
+ {
+ if ($adapter == null) {
+ $this->adapter = $adapter;
+ } else {
+ parent::setAdapter($adapter);
+ }
+ }
+
+ /**
+ * Set the streamingRequest variable which controls whether we are
+ * sending the raw (already encoded) POST data from a stream source.
+ *
+ * @param boolean $value The value to set.
+ * @return void
+ */
+ public function setStreamingRequest($value)
+ {
+ $this->_streamingRequest = $value;
+ }
+
+ /**
+ * Check whether the client is set to perform streaming requests.
+ *
+ * @return boolean True if yes, false otherwise.
+ */
+ public function getStreamingRequest()
+ {
+ if ($this->_streamingRequest()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Prepare the request body (for POST and PUT requests)
+ *
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ protected function _prepareBody()
+ {
+ if($this->_streamingRequest) {
+ $this->setHeaders(self::CONTENT_LENGTH,
+ $this->raw_post_data->getTotalSize());
+ return $this->raw_post_data;
+ }
+ else {
+ return parent::_prepareBody();
+ }
+ }
+
+ /**
+ * Clear all custom parameters we set.
+ *
+ * @return Zend_Http_Client
+ */
+ public function resetParameters($clearAll = false)
+ {
+ $this->_streamingRequest = false;
+
+ return parent::resetParameters($clearAll);
+ }
+
+ /**
+ * Set the raw (already encoded) POST data from a stream source.
+ *
+ * This is used to support POSTing from open file handles without
+ * caching the entire body into memory. It is a wrapper around
+ * Zend_Http_Client::setRawData().
+ *
+ * @param string $data The request data
+ * @param string $enctype The encoding type
+ * @return Zend_Http_Client
+ */
+ public function setRawDataStream($data, $enctype = null)
+ {
+ $this->_streamingRequest = true;
+ return $this->setRawData($data, $enctype);
+ }
+
+}
diff --git a/Zend/Gdata/Kind/EventEntry.php b/Zend/Gdata/Kind/EventEntry.php
new file mode 100644
index 00000000..bc55de65
--- /dev/null
+++ b/Zend/Gdata/Kind/EventEntry.php
@@ -0,0 +1,428 @@
+_who != null) {
+ foreach ($this->_who as $who) {
+ $element->appendChild($who->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_when != null) {
+ foreach ($this->_when as $when) {
+ $element->appendChild($when->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_where != null) {
+ foreach ($this->_where as $where) {
+ $element->appendChild($where->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_recurrenceException != null) {
+ foreach ($this->_recurrenceException as $recurrenceException) {
+ $element->appendChild($recurrenceException->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_extendedProperty != null) {
+ foreach ($this->_extendedProperty as $extProp) {
+ $element->appendChild($extProp->getDOM($element->ownerDocument));
+ }
+ }
+
+ if ($this->_recurrence != null) {
+ $element->appendChild($this->_recurrence->getDOM($element->ownerDocument));
+ }
+ if ($this->_eventStatus != null) {
+ $element->appendChild($this->_eventStatus->getDOM($element->ownerDocument));
+ }
+ if ($this->_comments != null) {
+ $element->appendChild($this->_comments->getDOM($element->ownerDocument));
+ }
+ if ($this->_transparency != null) {
+ $element->appendChild($this->_transparency->getDOM($element->ownerDocument));
+ }
+ if ($this->_visibility != null) {
+ $element->appendChild($this->_visibility->getDOM($element->ownerDocument));
+ }
+ if ($this->_originalEvent != null) {
+ $element->appendChild($this->_originalEvent->getDOM($element->ownerDocument));
+ }
+ if ($this->_entryLink != null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'where';
+ $where = new Zend_Gdata_Extension_Where();
+ $where->transferFromDOM($child);
+ $this->_where[] = $where;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'when';
+ $when = new Zend_Gdata_Extension_When();
+ $when->transferFromDOM($child);
+ $this->_when[] = $when;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'who';
+ $who = new Zend_Gdata_Extension_Who();
+ $who ->transferFromDOM($child);
+ $this->_who[] = $who;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'recurrence';
+ $recurrence = new Zend_Gdata_Extension_Recurrence();
+ $recurrence->transferFromDOM($child);
+ $this->_recurrence = $recurrence;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'eventStatus';
+ $eventStatus = new Zend_Gdata_Extension_EventStatus();
+ $eventStatus->transferFromDOM($child);
+ $this->_eventStatus = $eventStatus;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'comments';
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'transparency';
+ $transparency = new Zend_Gdata_Extension_Transparency();
+ $transparency ->transferFromDOM($child);
+ $this->_transparency = $transparency;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'visibility';
+ $visiblity = new Zend_Gdata_Extension_Visibility();
+ $visiblity ->transferFromDOM($child);
+ $this->_visibility = $visiblity;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'recurrenceException';
+ require_once 'Zend/Gdata/Extension/RecurrenceException.php';
+ $recurrenceException = new Zend_Gdata_Extension_RecurrenceException();
+ $recurrenceException ->transferFromDOM($child);
+ $this->_recurrenceException[] = $recurrenceException;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'originalEvent';
+ $originalEvent = new Zend_Gdata_Extension_OriginalEvent();
+ $originalEvent ->transferFromDOM($child);
+ $this->_originalEvent = $originalEvent;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'extendedProperty';
+ $extProp = new Zend_Gdata_Extension_ExtendedProperty();
+ $extProp->transferFromDOM($child);
+ $this->_extendedProperty[] = $extProp;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getWhen()
+ {
+ return $this->_when;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setWhen($value)
+ {
+ $this->_when = $value;
+ return $this;
+ }
+
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+ public function getWho()
+ {
+ return $this->_who;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setWho($value)
+ {
+ $this->_who = $value;
+ return $this;
+ }
+
+ public function getRecurrence()
+ {
+ return $this->_recurrence;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setRecurrence($value)
+ {
+ $this->_recurrence = $value;
+ return $this;
+ }
+
+ public function getEventStatus()
+ {
+ return $this->_eventStatus;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setEventStatus($value)
+ {
+ $this->_eventStatus = $value;
+ return $this;
+ }
+
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setComments($value)
+ {
+ $this->_comments = $value;
+ return $this;
+ }
+
+ public function getTransparency()
+ {
+ return $this->_transparency;
+ }
+
+ /**
+ * @param Zend_Gdata_Transparency $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setTransparency($value)
+ {
+ $this->_transparency = $value;
+ return $this;
+ }
+
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * @param Zend_Gdata_Visibility $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ public function getRecurrenceExcption()
+ {
+ return $this->_recurrenceException;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setRecurrenceException($value)
+ {
+ $this->_recurrenceException = $value;
+ return $this;
+ }
+
+ public function getExtendedProperty()
+ {
+ return $this->_extendedProperty;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setExtendedProperty($value)
+ {
+ $this->_extendedProperty = $value;
+ return $this;
+ }
+
+ public function getOriginalEvent()
+ {
+ return $this->_originalEvent;
+ }
+
+ /**
+ * @param Zend_Gdata_Extension_OriginalEvent $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setOriginalEvent($value)
+ {
+ $this->_originalEvent = $value;
+ return $this;
+ }
+
+ /**
+ * Get this entry's EntryLink element.
+ *
+ * @return Zend_Gdata_Extension_EntryLink The requested entry.
+ */
+ public function getEntryLink()
+ {
+ return $this->_entryLink;
+ }
+
+ /**
+ * Set the child's EntryLink element.
+ *
+ * @param Zend_Gdata_Extension_EntryLink $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setEntryLink($value)
+ {
+ $this->_entryLink = $value;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/Media.php b/Zend/Gdata/Media.php
new file mode 100644
index 00000000..b8b4aee7
--- /dev/null
+++ b/Zend/Gdata/Media.php
@@ -0,0 +1,65 @@
+registerPackage('Zend_Gdata_Media');
+ $this->registerPackage('Zend_Gdata_Media_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/Zend/Gdata/Media/Entry.php b/Zend/Gdata/Media/Entry.php
new file mode 100644
index 00000000..1315f9a9
--- /dev/null
+++ b/Zend/Gdata/Media/Entry.php
@@ -0,0 +1,134 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_mediaGroup != null) {
+ $element->appendChild($this->_mediaGroup->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'group':
+ $mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the entry's mediaGroup object.
+ *
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Sets the entry's mediaGroup object.
+ *
+ * @param Zend_Gdata_Media_Extension_MediaGroup $mediaGroup
+ * @return Zend_Gdata_Media_Entry Provides a fluent interface
+ */
+ public function setMediaGroup($mediaGroup)
+ {
+ $this->_mediaGroup = $mediaGroup;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaCategory.php b/Zend/Gdata/Media/Extension/MediaCategory.php
new file mode 100644
index 00000000..1852f584
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaCategory.php
@@ -0,0 +1,148 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_scheme = $scheme;
+ $this->_label = $label;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_label !== null) {
+ $element->setAttribute('label', $this->_label);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'label':
+ $this->_label = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the URI that identifies the categorization scheme
+ * Optional.
+ *
+ * @return string URI that identifies the categorization scheme
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value URI that identifies the categorization scheme
+ * @return Zend_Gdata_Media_Extension_MediaCategory Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string Human-readable label to be displayed in applications
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * @param string $value Human-readable label to be displayed in applications
+ * @return Zend_Gdata_Media_Extension_MediaCategory Provides a fluent interface
+ */
+ public function setLabel($value)
+ {
+ $this->_label = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaContent.php b/Zend/Gdata/Media/Extension/MediaContent.php
new file mode 100644
index 00000000..88d7cc94
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaContent.php
@@ -0,0 +1,522 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_fileSize = $fileSize;
+ $this->_type = $type;
+ $this->_medium = $medium;
+ $this->_isDefault = $isDefault;
+ $this->_expression = $expression;
+ $this->_bitrate = $bitrate;
+ $this->_framerate = $framerate;
+ $this->_samplingrate = $samplingrate;
+ $this->_channels = $channels;
+ $this->_duration = $duration;
+ $this->_height = $height;
+ $this->_width = $width;
+ $this->_lang = $lang;
+ }
+
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->_fileSize !== null) {
+ $element->setAttribute('fileSize', $this->_fileSize);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ if ($this->_medium !== null) {
+ $element->setAttribute('medium', $this->_medium);
+ }
+ if ($this->_isDefault !== null) {
+ $element->setAttribute('isDefault', $this->_isDefault);
+ }
+ if ($this->_expression !== null) {
+ $element->setAttribute('expression', $this->_expression);
+ }
+ if ($this->_bitrate !== null) {
+ $element->setAttribute('bitrate', $this->_bitrate);
+ }
+ if ($this->_framerate !== null) {
+ $element->setAttribute('framerate', $this->_framerate);
+ }
+ if ($this->_samplingrate !== null) {
+ $element->setAttribute('samplingrate', $this->_samplingrate);
+ }
+ if ($this->_channels !== null) {
+ $element->setAttribute('channels', $this->_channels);
+ }
+ if ($this->_duration !== null) {
+ $element->setAttribute('duration', $this->_duration);
+ }
+ if ($this->_height !== null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ if ($this->_width !== null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ if ($this->_lang !== null) {
+ $element->setAttribute('lang', $this->_lang);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'fileSize':
+ $this->_fileSize = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ case 'medium':
+ $this->_medium = $attribute->nodeValue;
+ break;
+ case 'isDefault':
+ $this->_isDefault = $attribute->nodeValue;
+ break;
+ case 'expression':
+ $this->_expression = $attribute->nodeValue;
+ break;
+ case 'bitrate':
+ $this->_bitrate = $attribute->nodeValue;
+ break;
+ case 'framerate':
+ $this->_framerate = $attribute->nodeValue;
+ break;
+ case 'samplingrate':
+ $this->_samplingrate = $attribute->nodeValue;
+ break;
+ case 'channels':
+ $this->_channels = $attribute->nodeValue;
+ break;
+ case 'duration':
+ $this->_duration = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ case 'lang':
+ $this->_lang = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the URL representing this MediaContent object
+ *
+ * @return string The URL representing this MediaContent object.
+ */
+ public function __toString()
+ {
+ return $this->getUrl();
+ }
+
+ /**
+ * @return string The direct URL to the media object
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value The direct URL to the media object
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * @return int The size of the media in bytes
+ */
+ public function getFileSize()
+ {
+ return $this->_fileSize;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setFileSize($value)
+ {
+ $this->_fileSize = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMedium()
+ {
+ return $this->_medium;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setMedium($value)
+ {
+ $this->_medium = $value;
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getIsDefault()
+ {
+ return $this->_isDefault;
+ }
+
+ /**
+ * @param bool $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setIsDefault($value)
+ {
+ $this->_isDefault = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getExpression()
+ {
+ return $this->_expression;
+ }
+
+ /**
+ * @param string
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setExpression($value)
+ {
+ $this->_expression = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getBitrate()
+ {
+ return $this->_bitrate;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setBitrate($value)
+ {
+ $this->_bitrate = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getFramerate()
+ {
+ return $this->_framerate;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setFramerate($value)
+ {
+ $this->_framerate = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSamplingrate()
+ {
+ return $this->_samplingrate;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setSamplingrate($value)
+ {
+ $this->_samplingrate = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getChannels()
+ {
+ return $this->_channels;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setChannels($value)
+ {
+ $this->_channels = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDuration()
+ {
+ return $this->_duration;
+ }
+
+ /**
+ *
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setDuration($value)
+ {
+ $this->_duration = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLang()
+ {
+ return $this->_lang;
+ }
+
+ /**
+ * @param string
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setLang($value)
+ {
+ $this->_lang = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaCopyright.php b/Zend/Gdata/Media/Extension/MediaCopyright.php
new file mode 100644
index 00000000..4e88cff9
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaCopyright.php
@@ -0,0 +1,116 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_url = $url;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCopyright Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaCredit.php b/Zend/Gdata/Media/Extension/MediaCredit.php
new file mode 100644
index 00000000..84172c35
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaCredit.php
@@ -0,0 +1,149 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_role = $role;
+ $this->_scheme = $scheme;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_role !== null) {
+ $element->setAttribute('role', $this->_role);
+ }
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'role':
+ $this->_role = $attribute->nodeValue;
+ break;
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getRole()
+ {
+ return $this->_role;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent interface
+ */
+ public function setRole($value)
+ {
+ $this->_role = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaDescription.php b/Zend/Gdata/Media/Extension/MediaDescription.php
new file mode 100644
index 00000000..6f57e304
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaDescription.php
@@ -0,0 +1,116 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_type = $type;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaDescription Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaGroup.php b/Zend/Gdata/Media/Extension/MediaGroup.php
new file mode 100644
index 00000000..d890115a
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaGroup.php
@@ -0,0 +1,566 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_content as $content) {
+ $element->appendChild($content->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_category as $category) {
+ $element->appendChild($category->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_credit as $credit) {
+ $element->appendChild($credit->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_player as $player) {
+ $element->appendChild($player->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_rating as $rating) {
+ $element->appendChild($rating->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_restriction as $restriction) {
+ $element->appendChild($restriction->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_mediaText as $text) {
+ $element->appendChild($text->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_thumbnail as $thumbnail) {
+ $element->appendChild($thumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_copyright != null) {
+ $element->appendChild(
+ $this->_copyright->getDOM($element->ownerDocument));
+ }
+ if ($this->_description != null) {
+ $element->appendChild(
+ $this->_description->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_hash as $hash) {
+ $element->appendChild($hash->getDOM($element->ownerDocument));
+ }
+ if ($this->_keywords != null) {
+ $element->appendChild(
+ $this->_keywords->getDOM($element->ownerDocument));
+ }
+ if ($this->_title != null) {
+ $element->appendChild(
+ $this->_title->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'content';
+ $content = new Zend_Gdata_Media_Extension_MediaContent();
+ $content->transferFromDOM($child);
+ $this->_content[] = $content;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'category';
+ $category = new Zend_Gdata_Media_Extension_MediaCategory();
+ $category->transferFromDOM($child);
+ $this->_category[] = $category;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'copyright';
+ $copyright = new Zend_Gdata_Media_Extension_MediaCopyright();
+ $copyright->transferFromDOM($child);
+ $this->_copyright = $copyright;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'credit';
+ $credit = new Zend_Gdata_Media_Extension_MediaCredit();
+ $credit->transferFromDOM($child);
+ $this->_credit[] = $credit;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'description';
+ $description = new Zend_Gdata_Media_Extension_MediaDescription();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'hash';
+ $hash = new Zend_Gdata_Media_Extension_MediaHash();
+ $hash->transferFromDOM($child);
+ $this->_hash[] = $hash;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'keywords';
+ $keywords = new Zend_Gdata_Media_Extension_MediaKeywords();
+ $keywords->transferFromDOM($child);
+ $this->_keywords = $keywords;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'player';
+ $player = new Zend_Gdata_Media_Extension_MediaPlayer();
+ $player->transferFromDOM($child);
+ $this->_player[] = $player;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'rating';
+ $rating = new Zend_Gdata_Media_Extension_MediaRating();
+ $rating->transferFromDOM($child);
+ $this->_rating[] = $rating;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'restriction';
+ $restriction = new Zend_Gdata_Media_Extension_MediaRestriction();
+ $restriction->transferFromDOM($child);
+ $this->_restriction[] = $restriction;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'text';
+ $text = new Zend_Gdata_Media_Extension_MediaText();
+ $text->transferFromDOM($child);
+ $this->_mediaText[] = $text;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'thumbnail';
+ $thumbnail = new Zend_Gdata_Media_Extension_MediaThumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_thumbnail[] = $thumbnail;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'title';
+ $title = new Zend_Gdata_Media_Extension_MediaTitle();
+ $title->transferFromDOM($child);
+ $this->_title = $title;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getContent()
+ {
+ return $this->_content;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_MediaGroup Provides a fluent interface
+ */
+ public function setContent($value)
+ {
+ $this->_content = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setCategory($value)
+ {
+ $this->_category = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaCopyright
+ */
+ public function getCopyright()
+ {
+ return $this->_copyright;
+ }
+
+ /**
+ * @param Zend_Gdata_Media_Extension_MediaCopyright $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setCopyright($value)
+ {
+ $this->_copyright = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getCredit()
+ {
+ return $this->_credit;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setCredit($value)
+ {
+ $this->_credit = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaTitle
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param Zend_Gdata_Media_Extension_MediaTitle $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setTitle($value)
+ {
+ $this->_title = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaDescription
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * @param Zend_Gdata_Media_Extension_MediaDescription $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setDescription($value)
+ {
+ $this->_description = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getHash()
+ {
+ return $this->_hash;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setHash($value)
+ {
+ $this->_hash = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaKeywords
+ */
+ public function getKeywords()
+ {
+ return $this->_keywords;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup Provides a fluent interface
+ */
+ public function setKeywords($value)
+ {
+ $this->_keywords = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getPlayer()
+ {
+ return $this->_player;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setPlayer($value)
+ {
+ $this->_player = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setRating($value)
+ {
+ $this->_rating = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getRestriction()
+ {
+ return $this->_restriction;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setRestriction($value)
+ {
+ $this->_restriction = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getThumbnail()
+ {
+ return $this->_thumbnail;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setThumbnail($value)
+ {
+ $this->_thumbnail = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getMediaText()
+ {
+ return $this->_mediaText;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setMediaText($value)
+ {
+ $this->_mediaText = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaHash.php b/Zend/Gdata/Media/Extension/MediaHash.php
new file mode 100644
index 00000000..a348630c
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaHash.php
@@ -0,0 +1,115 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_algo = $algo;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_algo !== null) {
+ $element->setAttribute('algo', $this->_algo);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'algo':
+ $this->_algo = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string The algo
+ */
+ public function getAlgo()
+ {
+ return $this->_algo;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaHash Provides a fluent interface
+ */
+ public function setAlgo($value)
+ {
+ $this->_algo = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaKeywords.php b/Zend/Gdata/Media/Extension/MediaKeywords.php
new file mode 100644
index 00000000..309359c6
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaKeywords.php
@@ -0,0 +1,52 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaPlayer.php b/Zend/Gdata/Media/Extension/MediaPlayer.php
new file mode 100644
index 00000000..07439d90
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaPlayer.php
@@ -0,0 +1,178 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_width = $width;
+ $this->_height = $height;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->_width !== null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ if ($this->_height !== null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaPlayer Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaPlayer Provides a fluent interface
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaPlayer Provides a fluent interface
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaRating.php b/Zend/Gdata/Media/Extension/MediaRating.php
new file mode 100644
index 00000000..33cf1e41
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaRating.php
@@ -0,0 +1,118 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_scheme = $scheme;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaRating Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaRestriction.php b/Zend/Gdata/Media/Extension/MediaRestriction.php
new file mode 100644
index 00000000..971419ad
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaRestriction.php
@@ -0,0 +1,149 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_relationship = $relationship;
+ $this->_type = $type;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_relationship !== null) {
+ $element->setAttribute('relationship', $this->_relationship);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'relationship':
+ $this->_relationship = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getRelationship()
+ {
+ return $this->_relationship;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaRestriction Provides a fluent interface
+ */
+ public function setRelationship($value)
+ {
+ $this->_relationship = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaRestriction Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaText.php b/Zend/Gdata/Media/Extension/MediaText.php
new file mode 100644
index 00000000..67329428
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaText.php
@@ -0,0 +1,211 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_type = $type;
+ $this->_lang = $lang;
+ $this->_start = $start;
+ $this->_end = $end;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ if ($this->_lang !== null) {
+ $element->setAttribute('lang', $this->_lang);
+ }
+ if ($this->_start !== null) {
+ $element->setAttribute('start', $this->_start);
+ }
+ if ($this->_end !== null) {
+ $element->setAttribute('end', $this->_end);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ case 'lang':
+ $this->_lang = $attribute->nodeValue;
+ break;
+ case 'start':
+ $this->_start = $attribute->nodeValue;
+ break;
+ case 'end':
+ $this->_end = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLang()
+ {
+ return $this->_lang;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setLang($value)
+ {
+ $this->_lang = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getStart()
+ {
+ return $this->_start;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setStart($value)
+ {
+ $this->_start = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getEnd()
+ {
+ return $this->_end;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setEnd($value)
+ {
+ $this->_end = $value;
+ return $this;
+ }
+}
diff --git a/Zend/Gdata/Media/Extension/MediaThumbnail.php b/Zend/Gdata/Media/Extension/MediaThumbnail.php
new file mode 100644
index 00000000..c347f811
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaThumbnail.php
@@ -0,0 +1,210 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_width = $width;
+ $this->_height = $height;
+ $this->_time = $time ;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->_width !== null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ if ($this->_height !== null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ if ($this->_time !== null) {
+ $element->setAttribute('time', $this->_time);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ case 'time':
+ $this->_time = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTime()
+ {
+ return $this->_time;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setTime($value)
+ {
+ $this->_time = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Extension/MediaTitle.php b/Zend/Gdata/Media/Extension/MediaTitle.php
new file mode 100644
index 00000000..93589db3
--- /dev/null
+++ b/Zend/Gdata/Media/Extension/MediaTitle.php
@@ -0,0 +1,118 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_type = $type;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaTitle Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Media/Feed.php b/Zend/Gdata/Media/Feed.php
new file mode 100644
index 00000000..779a1566
--- /dev/null
+++ b/Zend/Gdata/Media/Feed.php
@@ -0,0 +1,70 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/MediaMimeStream.php b/Zend/Gdata/MediaMimeStream.php
new file mode 100644
index 00000000..eb8fe701
--- /dev/null
+++ b/Zend/Gdata/MediaMimeStream.php
@@ -0,0 +1,190 @@
+ 1.
+ */
+ public function __construct($xmlString = null, $filePath = null,
+ $fileContentType = null)
+ {
+ if (!file_exists($filePath) || !is_readable($filePath)) {
+ require_once 'Zend/Gdata/App/IOException.php';
+ throw new Zend_Gdata_App_IOException('File to be uploaded at ' .
+ $filePath . ' does not exist or is not readable.');
+ }
+
+ $this->_fileHandle = fopen($filePath, 'rb', TRUE);
+ $this->_boundaryString = '=_' . md5(microtime(1) . rand(1,20));
+ $entry = $this->wrapEntry($xmlString, $fileContentType);
+ $closingBoundary = new Zend_Gdata_MimeBodyString("\r\n--{$this->_boundaryString}--\r\n");
+ $file = new Zend_Gdata_MimeFile($this->_fileHandle);
+ $this->_parts = array($entry, $file, $closingBoundary);
+
+ $fileSize = filesize($filePath);
+ $this->_totalSize = $entry->getSize() + $fileSize
+ + $closingBoundary->getSize();
+
+ }
+
+ /**
+ * Sandwiches the entry body into a MIME message
+ *
+ * @return void
+ */
+ private function wrapEntry($entry, $fileMimeType)
+ {
+ $wrappedEntry = "--{$this->_boundaryString}\r\n";
+ $wrappedEntry .= "Content-Type: application/atom+xml\r\n\r\n";
+ $wrappedEntry .= $entry;
+ $wrappedEntry .= "\r\n--{$this->_boundaryString}\r\n";
+ $wrappedEntry .= "Content-Type: $fileMimeType\r\n\r\n";
+ return new Zend_Gdata_MimeBodyString($wrappedEntry);
+ }
+
+ /**
+ * Read a specific chunk of the the MIME multipart message.
+ *
+ * @param integer $bufferSize The size of the chunk that is to be read,
+ * must be lower than MAX_BUFFER_SIZE.
+ * @return string A corresponding piece of the message. This could be
+ * binary or regular text.
+ */
+ public function read($bytesRequested)
+ {
+ if($this->_currentPart >= count($this->_parts)) {
+ return FALSE;
+ }
+
+ $activePart = $this->_parts[$this->_currentPart];
+ $buffer = $activePart->read($bytesRequested);
+
+ while(strlen($buffer) < $bytesRequested) {
+ $this->_currentPart += 1;
+ $nextBuffer = $this->read($bytesRequested - strlen($buffer));
+ if($nextBuffer === FALSE) {
+ break;
+ }
+ $buffer .= $nextBuffer;
+ }
+
+ return $buffer;
+ }
+
+ /**
+ * Return the total size of the mime message.
+ *
+ * @return integer Total size of the message to be sent.
+ */
+ public function getTotalSize()
+ {
+ return $this->_totalSize;
+ }
+
+ /**
+ * Close the internal file that we are streaming to the socket.
+ *
+ * @return void
+ */
+ public function closeFileHandle()
+ {
+ if ($this->_fileHandle !== null) {
+ fclose($this->_fileHandle);
+ }
+ }
+
+ /**
+ * Return a Content-type header that includes the current boundary string.
+ *
+ * @return string A valid HTTP Content-Type header.
+ */
+ public function getContentType()
+ {
+ return 'multipart/related;boundary="' .
+ $this->_boundaryString . '"' . "\r\n";
+ }
+
+}
diff --git a/Zend/Gdata/MimeBodyString.php b/Zend/Gdata/MimeBodyString.php
new file mode 100644
index 00000000..9de67889
--- /dev/null
+++ b/Zend/Gdata/MimeBodyString.php
@@ -0,0 +1,92 @@
+_sourceString = $sourceString;
+ $this->_bytesRead = 0;
+ }
+
+ /**
+ * Read the next chunk of the string.
+ *
+ * @param integer $bytesRequested The size of the chunk that is to be read.
+ * @return string A corresponding piece of the string.
+ */
+ public function read($bytesRequested)
+ {
+ $len = strlen($this->_sourceString);
+ if($this->_bytesRead == $len) {
+ return FALSE;
+ } else if($bytesRequested > $len - $this->_bytesRead) {
+ $bytesRequested = $len - $this->_bytesRead;
+ }
+
+ $buffer = substr($this->_sourceString, $this->_bytesRead, $bytesRequested);
+ $this->_bytesRead += $bytesRequested;
+
+ return $buffer;
+ }
+
+ /**
+ * The length of the string.
+ *
+ * @return int The length of the string contained in the object.
+ */
+ public function getSize()
+ {
+ return strlen($this->_sourceString);
+ }
+
+
+}
diff --git a/Zend/Gdata/MimeFile.php b/Zend/Gdata/MimeFile.php
new file mode 100644
index 00000000..7930e96d
--- /dev/null
+++ b/Zend/Gdata/MimeFile.php
@@ -0,0 +1,66 @@
+_fileHandle = $fileHandle;
+ }
+
+ /**
+ * Read the next chunk of the file.
+ *
+ * @param integer $bytesRequested The size of the chunk that is to be read.
+ * @return string A corresponding piece of the message. This could be
+ * binary or regular text.
+ */
+ public function read($bytesRequested)
+ {
+ return fread($this->_fileHandle, $bytesRequested);
+ }
+
+}
diff --git a/Zend/Gdata/Photos.php b/Zend/Gdata/Photos.php
new file mode 100644
index 00000000..3405ad81
--- /dev/null
+++ b/Zend/Gdata/Photos.php
@@ -0,0 +1,576 @@
+registerPackage('Zend_Gdata_Photos');
+ $this->registerPackage('Zend_Gdata_Photos_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retrieve a UserFeed containing AlbumEntries, PhotoEntries and
+ * TagEntries associated with a given user.
+ *
+ * @param string $userName The userName of interest
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query. If not provided, a default URL will be used instead.
+ * @return Zend_Gdata_Photos_UserFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getUserFeed($userName = null, $location = null)
+ {
+ if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('feed');
+ if ($userName !== null) {
+ $location->setUser($userName);
+ }
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($userName !== null) {
+ $location->setUser($userName);
+ }
+ $uri = $location->getQueryUrl();
+ } else if ($location !== null) {
+ $uri = $location;
+ } else if ($userName !== null) {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' . self::USER_PATH . '/' .
+ $userName;
+ } else {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' . self::USER_PATH . '/' .
+ self::DEFAULT_USER;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Photos_UserFeed');
+ }
+
+ /**
+ * Retreive AlbumFeed object containing multiple PhotoEntry or TagEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_AlbumFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getAlbumFeed($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('feed');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Photos_AlbumFeed');
+ }
+
+ /**
+ * Retreive PhotoFeed object containing comments and tags associated
+ * with a given photo.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query. If not specified, the community search feed will
+ * be returned instead.
+ * @return Zend_Gdata_Photos_PhotoFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getPhotoFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' .
+ self::COMMUNITY_SEARCH_PATH;
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('feed');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Photos_PhotoFeed');
+ }
+
+ /**
+ * Retreive a single UserEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_UserEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getUserEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_UserEntry');
+ }
+
+ /**
+ * Retreive a single AlbumEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_AlbumEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getAlbumEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_AlbumEntry');
+ }
+
+ /**
+ * Retreive a single PhotoEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_PhotoEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getPhotoEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_PhotoEntry');
+ }
+
+ /**
+ * Retreive a single TagEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_TagEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getTagEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_TagEntry');
+ }
+
+ /**
+ * Retreive a single CommentEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_CommentEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getCommentEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_CommentEntry');
+ }
+
+ /**
+ * Create a new album from a AlbumEntry.
+ *
+ * @param Zend_Gdata_Photos_AlbumEntry $album The album entry to
+ * insert.
+ * @param string $url (optional) The URI that the album should be
+ * uploaded to. If null, the default album creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Photos_AlbumEntry The inserted album entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertAlbumEntry($album, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' . self::USER_PATH . '/' .
+ self::DEFAULT_USER;
+ }
+ $newEntry = $this->insertEntry($album, $uri, 'Zend_Gdata_Photos_AlbumEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new photo from a PhotoEntry.
+ *
+ * @param Zend_Gdata_Photos_PhotoEntry $photo The photo to insert.
+ * @param string $url The URI that the photo should be uploaded
+ * to. Alternatively, an AlbumEntry can be provided and the
+ * photo will be added to that album.
+ * @return Zend_Gdata_Photos_PhotoEntry The inserted photo entry
+ * as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertPhotoEntry($photo, $uri = null)
+ {
+ if ($uri instanceof Zend_Gdata_Photos_AlbumEntry) {
+ $uri = $uri->getLink(self::FEED_LINK_PATH)->href;
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($photo, $uri, 'Zend_Gdata_Photos_PhotoEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new tag from a TagEntry.
+ *
+ * @param Zend_Gdata_Photos_TagEntry $tag The tag entry to insert.
+ * @param string $url The URI where the tag should be
+ * uploaded to. Alternatively, a PhotoEntry can be provided and
+ * the tag will be added to that photo.
+ * @return Zend_Gdata_Photos_TagEntry The inserted tag entry as returned
+ * by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertTagEntry($tag, $uri = null)
+ {
+ if ($uri instanceof Zend_Gdata_Photos_PhotoEntry) {
+ $uri = $uri->getLink(self::FEED_LINK_PATH)->href;
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($tag, $uri, 'Zend_Gdata_Photos_TagEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new comment from a CommentEntry.
+ *
+ * @param Zend_Gdata_Photos_CommentEntry $comment The comment entry to
+ * insert.
+ * @param string $url The URI where the comment should be uploaded to.
+ * Alternatively, a PhotoEntry can be provided and
+ * the comment will be added to that photo.
+ * @return Zend_Gdata_Photos_CommentEntry The inserted comment entry
+ * as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertCommentEntry($comment, $uri = null)
+ {
+ if ($uri instanceof Zend_Gdata_Photos_PhotoEntry) {
+ $uri = $uri->getLink(self::FEED_LINK_PATH)->href;
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($comment, $uri, 'Zend_Gdata_Photos_CommentEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Delete an AlbumEntry.
+ *
+ * @param Zend_Gdata_Photos_AlbumEntry $album The album entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deleteAlbumEntry($album, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($album);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_AlbumEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($album);
+ }
+ }
+
+ /**
+ * Delete a PhotoEntry.
+ *
+ * @param Zend_Gdata_Photos_PhotoEntry $photo The photo entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deletePhotoEntry($photo, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($photo);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_PhotoEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($photo);
+ }
+ }
+
+ /**
+ * Delete a CommentEntry.
+ *
+ * @param Zend_Gdata_Photos_CommentEntry $comment The comment entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deleteCommentEntry($comment, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($comment);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_CommentEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($comment);
+ }
+ }
+
+ /**
+ * Delete a TagEntry.
+ *
+ * @param Zend_Gdata_Photos_TagEntry $tag The tag entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deleteTagEntry($tag, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($tag);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_TagEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($tag);
+ }
+ }
+
+}
diff --git a/Zend/Gdata/Photos/AlbumEntry.php b/Zend/Gdata/Photos/AlbumEntry.php
new file mode 100644
index 00000000..b888c463
--- /dev/null
+++ b/Zend/Gdata/Photos/AlbumEntry.php
@@ -0,0 +1,610 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_AlbumEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_AlbumEntry';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:access element
+ *
+ * @var Zend_Gdata_Photos_Extension_Access
+ */
+ protected $_gphotoAccess = null;
+
+ /**
+ * gphoto:location element
+ *
+ * @var Zend_Gdata_Photos_Extension_Location
+ */
+ protected $_gphotoLocation = null;
+
+ /**
+ * gphoto:user element
+ *
+ * @var Zend_Gdata_Photos_Extension_User
+ */
+ protected $_gphotoUser = null;
+
+ /**
+ * gphoto:nickname element
+ *
+ * @var Zend_Gdata_Photos_Extension_Nickname
+ */
+ protected $_gphotoNickname = null;
+
+ /**
+ * gphoto:timestamp element
+ *
+ * @var Zend_Gdata_Photos_Extension_Timestamp
+ */
+ protected $_gphotoTimestamp = null;
+
+ /**
+ * gphoto:name element
+ *
+ * @var Zend_Gdata_Photos_Extension_Name
+ */
+ protected $_gphotoName = null;
+
+ /**
+ * gphoto:numphotos element
+ *
+ * @var Zend_Gdata_Photos_Extension_NumPhotos
+ */
+ protected $_gphotoNumPhotos = null;
+
+ /**
+ * gphoto:commentCount element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentCount
+ */
+ protected $_gphotoCommentCount = null;
+
+ /**
+ * gphoto:commentingEnabled element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+ protected $_gphotoCommentingEnabled = null;
+
+ /**
+ * media:group element
+ *
+ * @var Zend_Gdata_Media_MediaGroup
+ */
+ protected $_mediaGroup = null;
+
+ /**
+ * georss:where element
+ *
+ * @var Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ protected $_geoRssWhere = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#album',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoTimestamp !== null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoUser !== null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNickname !== null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoAccess !== null) {
+ $element->appendChild($this->_gphotoAccess->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoLocation !== null) {
+ $element->appendChild($this->_gphotoLocation->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoName !== null) {
+ $element->appendChild($this->_gphotoName->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNumPhotos !== null) {
+ $element->appendChild($this->_gphotoNumPhotos->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount !== null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled !== null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoId !== null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediaGroup !== null) {
+ $element->appendChild($this->_mediaGroup->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'access';
+ $access = new Zend_Gdata_Photos_Extension_Access();
+ $access->transferFromDOM($child);
+ $this->_gphotoAccess = $access;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'location';
+ $location = new Zend_Gdata_Photos_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_gphotoLocation = $location;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'name';
+ $name = new Zend_Gdata_Photos_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_gphotoName = $name;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'numphotos';
+ $numPhotos = new Zend_Gdata_Photos_Extension_NumPhotos();
+ $numPhotos->transferFromDOM($child);
+ $this->_gphotoNumPhotos = $numPhotos;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('georss') . ':' . 'where';
+ $geoRssWhere = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $geoRssWhere->transferFromDOM($child);
+ $this->_geoRssWhere = $geoRssWhere;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'group';
+ $mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:access attribute.
+ *
+ * @see setGphotoAccess
+ * @return string The requested attribute.
+ */
+ public function getGphotoAccess()
+ {
+ return $this->_gphotoAccess;
+ }
+
+ /**
+ * Set the value for this element's gphoto:access attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Access The element being modified.
+ */
+ public function setGphotoAccess($value)
+ {
+ $this->_gphotoAccess = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:location attribute.
+ *
+ * @see setGphotoLocation
+ * @return string The requested attribute.
+ */
+ public function getGphotoLocation()
+ {
+ return $this->_gphotoLocation;
+ }
+
+ /**
+ * Set the value for this element's gphoto:location attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Location The element being modified.
+ */
+ public function setGphotoLocation($value)
+ {
+ $this->_location = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:name attribute.
+ *
+ * @see setGphotoName
+ * @return string The requested attribute.
+ */
+ public function getGphotoName()
+ {
+ return $this->_gphotoName;
+ }
+
+ /**
+ * Set the value for this element's gphoto:name attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Name The element being modified.
+ */
+ public function setGphotoName($value)
+ {
+ $this->_gphotoName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:numphotos attribute.
+ *
+ * @see setGphotoNumPhotos
+ * @return string The requested attribute.
+ */
+ public function getGphotoNumPhotos()
+ {
+ return $this->_gphotoNumPhotos;
+ }
+
+ /**
+ * Set the value for this element's gphoto:numphotos attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_NumPhotos The element being modified.
+ */
+ public function setGphotoNumPhotos($value)
+ {
+ $this->_gphotoNumPhotos = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's georss:where attribute.
+ *
+ * @see setGeoRssWhere
+ * @return string The requested attribute.
+ */
+ public function getGeoRssWhere()
+ {
+ return $this->_geoRssWhere;
+ }
+
+ /**
+ * Set the value for this element's georss:where attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere The element being modified.
+ */
+ public function setGeoRssWhere($value)
+ {
+ $this->_geoRssWhere = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's media:group attribute.
+ *
+ * @see setMediaGroup
+ * @return string The requested attribute.
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Set the value for this element's media:group attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Media_Extension_MediaGroup The element being modified.
+ */
+ public function setMediaGroup($value)
+ {
+ $this->_mediaGroup = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+}
diff --git a/Zend/Gdata/Photos/AlbumFeed.php b/Zend/Gdata/Photos/AlbumFeed.php
new file mode 100644
index 00000000..99f93165
--- /dev/null
+++ b/Zend/Gdata/Photos/AlbumFeed.php
@@ -0,0 +1,509 @@
+ 'Zend_Gdata_Photos_PhotoEntry',
+ 'http://schemas.google.com/photos/2007#comment' => 'Zend_Gdata_Photos_CommentEntry',
+ 'http://schemas.google.com/photos/2007#tag' => 'Zend_Gdata_Photos_TagEntry'
+ );
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoId != null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoUser != null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNickname != null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoName != null) {
+ $element->appendChild($this->_gphotoName->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoLocation != null) {
+ $element->appendChild($this->_gphotoLocation->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoAccess != null) {
+ $element->appendChild($this->_gphotoAccess->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoTimestamp != null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNumPhotos != null) {
+ $element->appendChild($this->_gphotoNumPhotos->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled != null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount != null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'name';
+ $name = new Zend_Gdata_Photos_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_gphotoName = $name;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'location';
+ $location = new Zend_Gdata_Photos_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_gphotoLocation = $location;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'access';
+ $access = new Zend_Gdata_Photos_Extension_Access();
+ $access->transferFromDOM($child);
+ $this->_gphotoAccess = $access;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'numphotos';
+ $numphotos = new Zend_Gdata_Photos_Extension_NumPhotos();
+ $numphotos->transferFromDOM($child);
+ $this->_gphotoNumPhotos = $numphotos;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $entryClassName = $this->_entryClassName;
+ $tmpEntry = new Zend_Gdata_App_Entry($child);
+ $categories = $tmpEntry->getCategory();
+ foreach ($categories as $category) {
+ if ($category->scheme == Zend_Gdata_Photos::KIND_PATH &&
+ $this->_entryKindClassMapping[$category->term] != "") {
+ $entryClassName = $this->_entryKindClassMapping[$category->term];
+ break;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Entry is missing kind declaration.');
+ }
+ }
+
+ $newEntry = new $entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:access attribute.
+ *
+ * @see setGphotoAccess
+ * @return string The requested attribute.
+ */
+ public function getGphotoAccess()
+ {
+ return $this->_gphotoAccess;
+ }
+
+ /**
+ * Set the value for this element's gphoto:access attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Access The element being modified.
+ */
+ public function setGphotoAccess($value)
+ {
+ $this->_gphotoAccess = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:location attribute.
+ *
+ * @see setGphotoLocation
+ * @return string The requested attribute.
+ */
+ public function getGphotoLocation()
+ {
+ return $this->_gphotoLocation;
+ }
+
+ /**
+ * Set the value for this element's gphoto:location attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Location The element being modified.
+ */
+ public function setGphotoLocation($value)
+ {
+ $this->_gphotoLocation = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:name attribute.
+ *
+ * @see setGphotoName
+ * @return string The requested attribute.
+ */
+ public function getGphotoName()
+ {
+ return $this->_gphotoName;
+ }
+
+ /**
+ * Set the value for this element's gphoto:name attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Name The element being modified.
+ */
+ public function setGphotoName($value)
+ {
+ $this->_gphotoName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:numphotos attribute.
+ *
+ * @see setGphotoNumPhotos
+ * @return string The requested attribute.
+ */
+ public function getGphotoNumPhotos()
+ {
+ return $this->_gphotoNumPhotos;
+ }
+
+ /**
+ * Set the value for this element's gphoto:numphotos attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_NumPhotos The element being modified.
+ */
+ public function setGphotoNumPhotos($value)
+ {
+ $this->_gphotoNumPhotos = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's georss:where attribute.
+ *
+ * @see setGeoRssWhere
+ * @return string The requested attribute.
+ */
+ public function getGeoRssWhere()
+ {
+ return $this->_geoRssWhere;
+ }
+
+ /**
+ * Set the value for this element's georss:where attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere The element being modified.
+ */
+ public function setGeoRssWhere($value)
+ {
+ $this->_geoRssWhere = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Photos/AlbumQuery.php b/Zend/Gdata/Photos/AlbumQuery.php
new file mode 100644
index 00000000..25388dc0
--- /dev/null
+++ b/Zend/Gdata/Photos/AlbumQuery.php
@@ -0,0 +1,149 @@
+_albumId = null;
+ $this->_albumName = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get the album name which is to be returned.
+ *
+ * @see setAlbumName
+ * @return string The name of the album to retrieve.
+ */
+ public function getAlbumName()
+ {
+ return $this->_albumName;
+ }
+
+ /**
+ * Set the album ID to query for. When set, this album's photographs
+ * be returned. If not set or null, the default user's feed will be
+ * returned instead.
+ *
+ * NOTE: Album and AlbumId are mutually exclusive. Setting one will
+ * automatically set the other to null.
+ *
+ * @param string $value The ID of the album to retrieve, or null to
+ * clear.
+ * @return Zend_Gdata_Photos_AlbumQuery The query object.
+ */
+ public function setAlbumId($value)
+ {
+ $this->_albumName = null;
+ $this->_albumId = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get the album ID which is to be returned.
+ *
+ * @see setAlbum
+ * @return string The ID of the album to retrieve.
+ */
+ public function getAlbumId()
+ {
+ return $this->_albumId;
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl($incomingUri = '')
+ {
+ $uri = '';
+ if ($this->getAlbumName() !== null && $this->getAlbumId() === null) {
+ $uri .= '/album/' . $this->getAlbumName();
+ } elseif ($this->getAlbumName() === null && $this->getAlbumId() !== null) {
+ $uri .= '/albumid/' . $this->getAlbumId();
+ } elseif ($this->getAlbumName() !== null && $this->getAlbumId() !== null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'AlbumName and AlbumId cannot both be non-null');
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'AlbumName and AlbumId cannot both be null');
+ }
+ $uri .= $incomingUri;
+ return parent::getQueryUrl($uri);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/CommentEntry.php b/Zend/Gdata/Photos/CommentEntry.php
new file mode 100644
index 00000000..d6293f2d
--- /dev/null
+++ b/Zend/Gdata/Photos/CommentEntry.php
@@ -0,0 +1,195 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_CommentEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_CommentEntry';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:photoid element, differs from gphoto:id as this is an
+ * actual identification number unique exclusively to photo entries,
+ * whereas gphoto:id can refer to all gphoto objects
+ *
+ * @var Zend_Gdata_Photos_Extension_PhotoId
+ */
+ protected $_gphotoPhotoId = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#comment',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoId !== null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoPhotoId !== null) {
+ $element->appendChild($this->_gphotoPhotoId->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'photoid';
+ $photoid = new Zend_Gdata_Photos_Extension_PhotoId();
+ $photoid->transferFromDOM($child);
+ $this->_gphotoPhotoId = $photoid;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:photoid attribute.
+ *
+ * @see setGphotoPhotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoPhotoId()
+ {
+ return $this->_gphotoPhotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:photoid attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_PhotoId The element being modified.
+ */
+ public function setGphotoPhotoId($value)
+ {
+ $this->_gphotoPhotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+}
diff --git a/Zend/Gdata/Photos/Extension/Access.php b/Zend/Gdata/Photos/Extension/Access.php
new file mode 100644
index 00000000..994f7019
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Access.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/AlbumId.php b/Zend/Gdata/Photos/Extension/AlbumId.php
new file mode 100644
index 00000000..b4ec5119
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/AlbumId.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/BytesUsed.php b/Zend/Gdata/Photos/Extension/BytesUsed.php
new file mode 100644
index 00000000..f5ec94b4
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/BytesUsed.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Checksum.php b/Zend/Gdata/Photos/Extension/Checksum.php
new file mode 100644
index 00000000..53152b76
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Checksum.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Client.php b/Zend/Gdata/Photos/Extension/Client.php
new file mode 100644
index 00000000..7c2b1966
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Client.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/CommentCount.php b/Zend/Gdata/Photos/Extension/CommentCount.php
new file mode 100644
index 00000000..1af32f8d
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/CommentCount.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/CommentingEnabled.php b/Zend/Gdata/Photos/Extension/CommentingEnabled.php
new file mode 100644
index 00000000..deee3c49
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/CommentingEnabled.php
@@ -0,0 +1,64 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Height.php b/Zend/Gdata/Photos/Extension/Height.php
new file mode 100644
index 00000000..f4d7c498
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Height.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Id.php b/Zend/Gdata/Photos/Extension/Id.php
new file mode 100644
index 00000000..0c86453e
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Id.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Location.php b/Zend/Gdata/Photos/Extension/Location.php
new file mode 100644
index 00000000..a94e9b3f
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Location.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php b/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php
new file mode 100644
index 00000000..f72b6782
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Name.php b/Zend/Gdata/Photos/Extension/Name.php
new file mode 100644
index 00000000..bdbb3dcd
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Name.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Nickname.php b/Zend/Gdata/Photos/Extension/Nickname.php
new file mode 100644
index 00000000..d33f83d9
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Nickname.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/NumPhotos.php b/Zend/Gdata/Photos/Extension/NumPhotos.php
new file mode 100644
index 00000000..eb3db51c
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/NumPhotos.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php b/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php
new file mode 100644
index 00000000..4c89bc65
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/PhotoId.php b/Zend/Gdata/Photos/Extension/PhotoId.php
new file mode 100644
index 00000000..b18a7519
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/PhotoId.php
@@ -0,0 +1,61 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Position.php b/Zend/Gdata/Photos/Extension/Position.php
new file mode 100644
index 00000000..e9721726
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Position.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/QuotaCurrent.php b/Zend/Gdata/Photos/Extension/QuotaCurrent.php
new file mode 100644
index 00000000..c023fec5
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/QuotaCurrent.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/QuotaLimit.php b/Zend/Gdata/Photos/Extension/QuotaLimit.php
new file mode 100644
index 00000000..860ac67c
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/QuotaLimit.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Rotation.php b/Zend/Gdata/Photos/Extension/Rotation.php
new file mode 100644
index 00000000..69db345a
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Rotation.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Size.php b/Zend/Gdata/Photos/Extension/Size.php
new file mode 100644
index 00000000..0990ead6
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Size.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Thumbnail.php b/Zend/Gdata/Photos/Extension/Thumbnail.php
new file mode 100644
index 00000000..aa875540
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Thumbnail.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Timestamp.php b/Zend/Gdata/Photos/Extension/Timestamp.php
new file mode 100644
index 00000000..fbdda208
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Timestamp.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/User.php b/Zend/Gdata/Photos/Extension/User.php
new file mode 100644
index 00000000..cb58eb8e
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/User.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Version.php b/Zend/Gdata/Photos/Extension/Version.php
new file mode 100644
index 00000000..b8f6d984
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Version.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Weight.php b/Zend/Gdata/Photos/Extension/Weight.php
new file mode 100644
index 00000000..7b7ee5bd
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Weight.php
@@ -0,0 +1,63 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/Extension/Width.php b/Zend/Gdata/Photos/Extension/Width.php
new file mode 100644
index 00000000..e9741cb7
--- /dev/null
+++ b/Zend/Gdata/Photos/Extension/Width.php
@@ -0,0 +1,62 @@
+registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/PhotoEntry.php b/Zend/Gdata/Photos/PhotoEntry.php
new file mode 100644
index 00000000..fd2e289d
--- /dev/null
+++ b/Zend/Gdata/Photos/PhotoEntry.php
@@ -0,0 +1,691 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_PhotoEntry extends Zend_Gdata_Media_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_PhotoEntry';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:albumid element
+ *
+ * @var Zend_Gdata_Photos_Extension_AlbumId
+ */
+ protected $_gphotoAlbumId = null;
+
+ /**
+ * gphoto:version element
+ *
+ * @var Zend_Gdata_Photos_Extension_Version
+ */
+ protected $_gphotoVersion = null;
+
+ /**
+ * gphoto:width element
+ *
+ * @var Zend_Gdata_Photos_Extension_Width
+ */
+ protected $_gphotoWidth = null;
+
+ /**
+ * gphoto:height element
+ *
+ * @var Zend_Gdata_Photos_Extension_Height
+ */
+ protected $_gphotoHeight = null;
+
+ /**
+ * gphoto:size element
+ *
+ * @var Zend_Gdata_Photos_Extension_Size
+ */
+ protected $_gphotoSize = null;
+
+ /**
+ * gphoto:client element
+ *
+ * @var Zend_Gdata_Photos_Extension_Client
+ */
+ protected $_gphotoClient = null;
+
+ /**
+ * gphoto:checksum element
+ *
+ * @var Zend_Gdata_Photos_Extension_Checksum
+ */
+ protected $_gphotoChecksum = null;
+
+ /**
+ * gphoto:timestamp element
+ *
+ * @var Zend_Gdata_Photos_Extension_Timestamp
+ */
+ protected $_gphotoTimestamp = null;
+
+ /**
+ * gphoto:commentCount element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentCount
+ */
+ protected $_gphotoCommentCount = null;
+
+ /**
+ * gphoto:commentingEnabled element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+ protected $_gphotoCommentingEnabled = null;
+
+ /**
+ * exif:tags element
+ *
+ * @var Zend_Gdata_Exif_Extension_Tags
+ */
+ protected $_exifTags = null;
+
+ /**
+ * georss:where element
+ *
+ * @var Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ protected $_geoRssWhere = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#photo',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoAlbumId !== null) {
+ $element->appendChild($this->_gphotoAlbumId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoId !== null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoVersion !== null) {
+ $element->appendChild($this->_gphotoVersion->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoWidth !== null) {
+ $element->appendChild($this->_gphotoWidth->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoHeight !== null) {
+ $element->appendChild($this->_gphotoHeight->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoSize !== null) {
+ $element->appendChild($this->_gphotoSize->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoClient !== null) {
+ $element->appendChild($this->_gphotoClient->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoChecksum !== null) {
+ $element->appendChild($this->_gphotoChecksum->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoTimestamp !== null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled !== null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount !== null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_exifTags !== null) {
+ $element->appendChild($this->_exifTags->getDOM($element->ownerDocument));
+ }
+ if ($this->_geoRssWhere !== null) {
+ $element->appendChild($this->_geoRssWhere->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'albumid';
+ $albumId = new Zend_Gdata_Photos_Extension_AlbumId();
+ $albumId->transferFromDOM($child);
+ $this->_gphotoAlbumId = $albumId;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'version';
+ $version = new Zend_Gdata_Photos_Extension_Version();
+ $version->transferFromDOM($child);
+ $this->_gphotoVersion = $version;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'width';
+ $width = new Zend_Gdata_Photos_Extension_Width();
+ $width->transferFromDOM($child);
+ $this->_gphotoWidth = $width;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'height';
+ $height = new Zend_Gdata_Photos_Extension_Height();
+ $height->transferFromDOM($child);
+ $this->_gphotoHeight = $height;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'size';
+ $size = new Zend_Gdata_Photos_Extension_Size();
+ $size->transferFromDOM($child);
+ $this->_gphotoSize = $size;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'client';
+ $client = new Zend_Gdata_Photos_Extension_Client();
+ $client->transferFromDOM($child);
+ $this->_gphotoClient = $client;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'checksum';
+ $checksum = new Zend_Gdata_Photos_Extension_Checksum();
+ $checksum->transferFromDOM($child);
+ $this->_gphotoChecksum = $checksum;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'tags';
+ $exifTags = new Zend_Gdata_Exif_Extension_Tags();
+ $exifTags->transferFromDOM($child);
+ $this->_exifTags = $exifTags;
+ break;
+ case $this->lookupNamespace('georss') . ':' . 'where';
+ $geoRssWhere = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $geoRssWhere->transferFromDOM($child);
+ $this->_geoRssWhere = $geoRssWhere;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:albumid attribute.
+ *
+ * @see setGphotoAlbumId
+ * @return string The requested attribute.
+ */
+ public function getGphotoAlbumId()
+ {
+ return $this->_gphotoAlbumId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:albumid attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_AlbumId The element being modified.
+ */
+ public function setGphotoAlbumId($value)
+ {
+ $this->_gphotoAlbumId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:version attribute.
+ *
+ * @see setGphotoVersion
+ * @return string The requested attribute.
+ */
+ public function getGphotoVersion()
+ {
+ return $this->_gphotoVersion;
+ }
+
+ /**
+ * Set the value for this element's gphoto:version attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Version The element being modified.
+ */
+ public function setGphotoVersion($value)
+ {
+ $this->_gphotoVersion = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:width attribute.
+ *
+ * @see setGphotoWidth
+ * @return string The requested attribute.
+ */
+ public function getGphotoWidth()
+ {
+ return $this->_gphotoWidth;
+ }
+
+ /**
+ * Set the value for this element's gphoto:width attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Width The element being modified.
+ */
+ public function setGphotoWidth($value)
+ {
+ $this->_gphotoWidth = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:height attribute.
+ *
+ * @see setGphotoHeight
+ * @return string The requested attribute.
+ */
+ public function getGphotoHeight()
+ {
+ return $this->_gphotoHeight;
+ }
+
+ /**
+ * Set the value for this element's gphoto:height attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Height The element being modified.
+ */
+ public function setGphotoHeight($value)
+ {
+ $this->_gphotoHeight = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:size attribute.
+ *
+ * @see setGphotoSize
+ * @return string The requested attribute.
+ */
+ public function getGphotoSize()
+ {
+ return $this->_gphotoSize;
+ }
+
+ /**
+ * Set the value for this element's gphoto:size attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Size The element being modified.
+ */
+ public function setGphotoSize($value)
+ {
+ $this->_gphotoSize = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:client attribute.
+ *
+ * @see setGphotoClient
+ * @return string The requested attribute.
+ */
+ public function getGphotoClient()
+ {
+ return $this->_gphotoClient;
+ }
+
+ /**
+ * Set the value for this element's gphoto:client attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Client The element being modified.
+ */
+ public function setGphotoClient($value)
+ {
+ $this->_gphotoClient = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:checksum attribute.
+ *
+ * @see setGphotoChecksum
+ * @return string The requested attribute.
+ */
+ public function getGphotoChecksum()
+ {
+ return $this->_gphotoChecksum;
+ }
+
+ /**
+ * Set the value for this element's gphoto:checksum attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Checksum The element being modified.
+ */
+ public function setGphotoChecksum($value)
+ {
+ $this->_gphotoChecksum = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's exif:tags attribute.
+ *
+ * @see setExifTags
+ * @return string The requested attribute.
+ */
+ public function getExifTags()
+ {
+ return $this->_exifTags;
+ }
+
+ /**
+ * Set the value for this element's exif:tags attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags The element being modified.
+ */
+ public function setExifTags($value)
+ {
+ $this->_exifTags = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's georss:where attribute.
+ *
+ * @see setGeoRssWhere
+ * @return string The requested attribute.
+ */
+ public function getGeoRssWhere()
+ {
+ return $this->_geoRssWhere;
+ }
+
+ /**
+ * Set the value for this element's georss:where attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere The element being modified.
+ */
+ public function setGeoRssWhere($value)
+ {
+ $this->_geoRssWhere = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's media:group attribute.
+ *
+ * @see setMediaGroup
+ * @return string The requested attribute.
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Set the value for this element's media:group attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Media_Extension_MediaGroup The element being modified.
+ */
+ public function setMediaGroup($value)
+ {
+ $this->_mediaGroup = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Photos/PhotoFeed.php b/Zend/Gdata/Photos/PhotoFeed.php
new file mode 100644
index 00000000..21a314a7
--- /dev/null
+++ b/Zend/Gdata/Photos/PhotoFeed.php
@@ -0,0 +1,559 @@
+ 'Zend_Gdata_Photos_CommentEntry',
+ 'http://schemas.google.com/photos/2007#tag' => 'Zend_Gdata_Photos_TagEntry'
+ );
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoId != null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoVersion != null) {
+ $element->appendChild($this->_gphotoVersion->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoWidth != null) {
+ $element->appendChild($this->_gphotoWidth->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoHeight != null) {
+ $element->appendChild($this->_gphotoHeight->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoSize != null) {
+ $element->appendChild($this->_gphotoSize->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoClient != null) {
+ $element->appendChild($this->_gphotoClient->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoChecksum != null) {
+ $element->appendChild($this->_gphotoChecksum->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoTimestamp != null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled != null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount != null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediaGroup != null) {
+ $element->appendChild($this->_mediaGroup->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'version';
+ $version = new Zend_Gdata_Photos_Extension_Version();
+ $version->transferFromDOM($child);
+ $this->_gphotoVersion = $version;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'albumid';
+ $albumid = new Zend_Gdata_Photos_Extension_AlbumId();
+ $albumid->transferFromDOM($child);
+ $this->_gphotoAlbumId = $albumid;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'width';
+ $width = new Zend_Gdata_Photos_Extension_Width();
+ $width->transferFromDOM($child);
+ $this->_gphotoWidth = $width;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'height';
+ $height = new Zend_Gdata_Photos_Extension_Height();
+ $height->transferFromDOM($child);
+ $this->_gphotoHeight = $height;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'size';
+ $size = new Zend_Gdata_Photos_Extension_Size();
+ $size->transferFromDOM($child);
+ $this->_gphotoSize = $size;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'client';
+ $client = new Zend_Gdata_Photos_Extension_Client();
+ $client->transferFromDOM($child);
+ $this->_gphotoClient = $client;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'checksum';
+ $checksum = new Zend_Gdata_Photos_Extension_Checksum();
+ $checksum->transferFromDOM($child);
+ $this->_gphotoChecksum = $checksum;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'group';
+ $mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $entryClassName = $this->_entryClassName;
+ $tmpEntry = new Zend_Gdata_App_Entry($child);
+ $categories = $tmpEntry->getCategory();
+ foreach ($categories as $category) {
+ if ($category->scheme == Zend_Gdata_Photos::KIND_PATH &&
+ $this->_entryKindClassMapping[$category->term] != "") {
+ $entryClassName = $this->_entryKindClassMapping[$category->term];
+ break;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Entry is missing kind declaration.');
+ }
+ }
+
+ $newEntry = new $entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:version attribute.
+ *
+ * @see setGphotoVersion
+ * @return string The requested attribute.
+ */
+ public function getGphotoVersion()
+ {
+ return $this->_gphotoVersion;
+ }
+
+ /**
+ * Set the value for this element's gphoto:version attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Version The element being modified.
+ */
+ public function setGphotoVersion($value)
+ {
+ $this->_gphotoVersion = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:albumid attribute.
+ *
+ * @see setGphotoAlbumId
+ * @return string The requested attribute.
+ */
+ public function getGphotoAlbumId()
+ {
+ return $this->_gphotoAlbumId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:albumid attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_AlbumId The element being modified.
+ */
+ public function setGphotoAlbumId($value)
+ {
+ $this->_gphotoAlbumId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:width attribute.
+ *
+ * @see setGphotoWidth
+ * @return string The requested attribute.
+ */
+ public function getGphotoWidth()
+ {
+ return $this->_gphotoWidth;
+ }
+
+ /**
+ * Set the value for this element's gphoto:width attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Width The element being modified.
+ */
+ public function setGphotoWidth($value)
+ {
+ $this->_gphotoWidth = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:height attribute.
+ *
+ * @see setGphotoHeight
+ * @return string The requested attribute.
+ */
+ public function getGphotoHeight()
+ {
+ return $this->_gphotoHeight;
+ }
+
+ /**
+ * Set the value for this element's gphoto:height attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Height The element being modified.
+ */
+ public function setGphotoHeight($value)
+ {
+ $this->_gphotoHeight = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:size attribute.
+ *
+ * @see setGphotoSize
+ * @return string The requested attribute.
+ */
+ public function getGphotoSize()
+ {
+ return $this->_gphotoSize;
+ }
+
+ /**
+ * Set the value for this element's gphoto:size attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Size The element being modified.
+ */
+ public function setGphotoSize($value)
+ {
+ $this->_gphotoSize = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:client attribute.
+ *
+ * @see setGphotoClient
+ * @return string The requested attribute.
+ */
+ public function getGphotoClient()
+ {
+ return $this->_gphotoClient;
+ }
+
+ /**
+ * Set the value for this element's gphoto:client attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Client The element being modified.
+ */
+ public function setGphotoClient($value)
+ {
+ $this->_gphotoClient = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:checksum attribute.
+ *
+ * @see setGphotoChecksum
+ * @return string The requested attribute.
+ */
+ public function getGphotoChecksum()
+ {
+ return $this->_gphotoChecksum;
+ }
+
+ /**
+ * Set the value for this element's gphoto:checksum attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Checksum The element being modified.
+ */
+ public function setGphotoChecksum($value)
+ {
+ $this->_gphotoChecksum = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's media:group attribute.
+ *
+ * @see setMediaGroup
+ * @return string The requested attribute.
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Set the value for this element's media:group attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Media_Extension_MediaGroup The element being modified.
+ */
+ public function setMediaGroup($value)
+ {
+ $this->_mediaGroup = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Photos/PhotoQuery.php b/Zend/Gdata/Photos/PhotoQuery.php
new file mode 100644
index 00000000..1fc94c74
--- /dev/null
+++ b/Zend/Gdata/Photos/PhotoQuery.php
@@ -0,0 +1,98 @@
+_photoId = $value;
+ }
+
+ /**
+ * Get the photo ID which is to be returned.
+ *
+ * @see setPhoto
+ * @return string The ID of the photo to retrieve.
+ */
+ public function getPhotoId()
+ {
+ return $this->_photoId;
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl($incomingUri = '')
+ {
+ $uri = '';
+ if ($this->getPhotoId() !== null) {
+ $uri .= '/photoid/' . $this->getPhotoId();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'PhotoId cannot be null');
+ }
+ $uri .= $incomingUri;
+ return parent::getQueryUrl($uri);
+ }
+
+}
diff --git a/Zend/Gdata/Photos/TagEntry.php b/Zend/Gdata/Photos/TagEntry.php
new file mode 100644
index 00000000..908674cd
--- /dev/null
+++ b/Zend/Gdata/Photos/TagEntry.php
@@ -0,0 +1,140 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_TagEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_TagEntry';
+
+ protected $_gphotoWeight = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#tag',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoWeight !== null) {
+ $element->appendChild($this->_gphotoWeight->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'weight';
+ $weight = new Zend_Gdata_Photos_Extension_Weight();
+ $weight->transferFromDOM($child);
+ $this->_gphotoWeight = $weight;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:weight attribute.
+ *
+ * @see setGphotoWeight
+ * @return string The requested attribute.
+ */
+ public function getGphotoWeight()
+ {
+ return $this->_gphotoWeight;
+ }
+
+ /**
+ * Set the value for this element's gphoto:weight attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Weight The element being modified.
+ */
+ public function setGphotoWeight($value)
+ {
+ $this->_gphotoWeight = $value;
+ return $this;
+ }
+}
diff --git a/Zend/Gdata/Photos/UserEntry.php b/Zend/Gdata/Photos/UserEntry.php
new file mode 100644
index 00000000..a21c6367
--- /dev/null
+++ b/Zend/Gdata/Photos/UserEntry.php
@@ -0,0 +1,366 @@
+ in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_UserEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_UserEntry';
+
+ /**
+ * gphoto:nickname element
+ *
+ * @var Zend_Gdata_Photos_Extension_Nickname
+ */
+ protected $_gphotoNickname = null;
+
+ /**
+ * gphoto:user element
+ *
+ * @var Zend_Gdata_Photos_Extension_User
+ */
+ protected $_gphotoUser = null;
+
+ /**
+ * gphoto:thumbnail element
+ *
+ * @var Zend_Gdata_Photos_Extension_Thumbnail
+ */
+ protected $_gphotoThumbnail = null;
+
+ /**
+ * gphoto:quotalimit element
+ *
+ * @var Zend_Gdata_Photos_Extension_QuotaLimit
+ */
+ protected $_gphotoQuotaLimit = null;
+
+ /**
+ * gphoto:quotacurrent element
+ *
+ * @var Zend_Gdata_Photos_Extension_QuotaCurrent
+ */
+ protected $_gphotoQuotaCurrent = null;
+
+ /**
+ * gphoto:maxPhotosPerAlbum element
+ *
+ * @var Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum
+ */
+ protected $_gphotoMaxPhotosPerAlbum = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#user',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoNickname !== null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoThumbnail !== null) {
+ $element->appendChild($this->_gphotoThumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoUser !== null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoQuotaCurrent !== null) {
+ $element->appendChild($this->_gphotoQuotaCurrent->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoQuotaLimit !== null) {
+ $element->appendChild($this->_gphotoQuotaLimit->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoMaxPhotosPerAlbum !== null) {
+ $element->appendChild($this->_gphotoMaxPhotosPerAlbum->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'thumbnail';
+ $thumbnail = new Zend_Gdata_Photos_Extension_Thumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_gphotoThumbnail = $thumbnail;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'quotacurrent';
+ $quotaCurrent = new Zend_Gdata_Photos_Extension_QuotaCurrent();
+ $quotaCurrent->transferFromDOM($child);
+ $this->_gphotoQuotaCurrent = $quotaCurrent;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'quotalimit';
+ $quotaLimit = new Zend_Gdata_Photos_Extension_QuotaLimit();
+ $quotaLimit->transferFromDOM($child);
+ $this->_gphotoQuotaLimit = $quotaLimit;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'maxPhotosPerAlbum';
+ $maxPhotosPerAlbum = new Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum();
+ $maxPhotosPerAlbum->transferFromDOM($child);
+ $this->_gphotoMaxPhotosPerAlbum = $maxPhotosPerAlbum;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:thumbnail attribute.
+ *
+ * @see setGphotoThumbnail
+ * @return string The requested attribute.
+ */
+ public function getGphotoThumbnail()
+ {
+ return $this->_gphotoThumbnail;
+ }
+
+ /**
+ * Set the value for this element's gphoto:thumbnail attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Thumbnail The element being modified.
+ */
+ public function setGphotoThumbnail($value)
+ {
+ $this->_gphotoThumbnail = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:quotacurrent attribute.
+ *
+ * @see setGphotoQuotaCurrent
+ * @return string The requested attribute.
+ */
+ public function getGphotoQuotaCurrent()
+ {
+ return $this->_gphotoQuotaCurrent;
+ }
+
+ /**
+ * Set the value for this element's gphoto:quotacurrent attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_QuotaCurrent The element being modified.
+ */
+ public function setGphotoQuotaCurrent($value)
+ {
+ $this->_gphotoQuotaCurrent = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:quotalimit attribute.
+ *
+ * @see setGphotoQuotaLimit
+ * @return string The requested attribute.
+ */
+ public function getGphotoQuotaLimit()
+ {
+ return $this->_gphotoQuotaLimit;
+ }
+
+ /**
+ * Set the value for this element's gphoto:quotalimit attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_QuotaLimit The element being modified.
+ */
+ public function setGphotoQuotaLimit($value)
+ {
+ $this->_gphotoQuotaLimit = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:maxPhotosPerAlbum attribute.
+ *
+ * @see setGphotoMaxPhotosPerAlbum
+ * @return string The requested attribute.
+ */
+ public function getGphotoMaxPhotosPerAlbum()
+ {
+ return $this->_gphotoMaxPhotosPerAlbum;
+ }
+
+ /**
+ * Set the value for this element's gphoto:maxPhotosPerAlbum attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum The element being modified.
+ */
+ public function setGphotoMaxPhotosPerAlbum($value)
+ {
+ $this->_gphotoMaxPhotosPerAlbum = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Photos/UserFeed.php b/Zend/Gdata/Photos/UserFeed.php
new file mode 100644
index 00000000..5d67eff8
--- /dev/null
+++ b/Zend/Gdata/Photos/UserFeed.php
@@ -0,0 +1,247 @@
+ 'Zend_Gdata_Photos_AlbumEntry',
+ 'http://schemas.google.com/photos/2007#photo' => 'Zend_Gdata_Photos_PhotoEntry',
+ 'http://schemas.google.com/photos/2007#comment' => 'Zend_Gdata_Photos_CommentEntry',
+ 'http://schemas.google.com/photos/2007#tag' => 'Zend_Gdata_Photos_TagEntry'
+ );
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'thumbnail';
+ $thumbnail = new Zend_Gdata_Photos_Extension_Thumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_gphotoThumbnail = $thumbnail;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $entryClassName = $this->_entryClassName;
+ $tmpEntry = new Zend_Gdata_App_Entry($child);
+ $categories = $tmpEntry->getCategory();
+ foreach ($categories as $category) {
+ if ($category->scheme == Zend_Gdata_Photos::KIND_PATH &&
+ $this->_entryKindClassMapping[$category->term] != "") {
+ $entryClassName = $this->_entryKindClassMapping[$category->term];
+ break;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Entry is missing kind declaration.');
+ }
+ }
+
+ $newEntry = new $entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoUser != null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNickname != null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoThumbnail != null) {
+ $element->appendChild($this->_gphotoThumbnail->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:thumbnail attribute.
+ *
+ * @see setGphotoThumbnail
+ * @return string The requested attribute.
+ */
+ public function getGphotoThumbnail()
+ {
+ return $this->_gphotoThumbnail;
+ }
+
+ /**
+ * Set the value for this element's gphoto:thumbnail attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Thumbnail The element being modified.
+ */
+ public function setGphotoThumbnail($value)
+ {
+ $this->_gphotoThumbnail = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Photos/UserQuery.php b/Zend/Gdata/Photos/UserQuery.php
new file mode 100644
index 00000000..79f0ba9f
--- /dev/null
+++ b/Zend/Gdata/Photos/UserQuery.php
@@ -0,0 +1,355 @@
+_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the format of data in returned in Atom feeds.
+ *
+ * @see setProjection
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Set's the type of data returned in queries. Can be either
+ * 'feed' or 'entry'. Normally, 'feed' will be desired. Default is 'feed'.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Photos_UserQuery Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the type of data in returned in queries.
+ *
+ * @see setType
+ * @return string type
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Set the user to query for. When set, this user's feed will be
+ * returned. If not set or null, the default user's feed will be returned
+ * instead.
+ *
+ * @param string $value The user to retrieve, or null for the default
+ * user.
+ */
+ public function setUser($value)
+ {
+ if ($value !== null) {
+ $this->_user = $value;
+ } else {
+ $this->_user = Zend_Gdata_Photos::DEFAULT_USER;
+ }
+ }
+
+ /**
+ * Get the user which is to be returned.
+ *
+ * @see setUser
+ * @return string The visibility to retrieve.
+ */
+ public function getUser()
+ {
+ return $this->_user;
+ }
+
+ /**
+ * Set the visibility filter for entries returned. Only entries which
+ * match this value will be returned. If null or unset, the default
+ * value will be used instead.
+ *
+ * Valid values are 'all' (default), 'public', and 'private'.
+ *
+ * @param string $value The visibility to filter by, or null to use the
+ * default value.
+ */
+ public function setAccess($value)
+ {
+ if ($value !== null) {
+ $this->_params['access'] = $value;
+ } else {
+ unset($this->_params['access']);
+ }
+ }
+
+ /**
+ * Get the visibility filter for entries returned.
+ *
+ * @see setAccess
+ * @return string The visibility to filter by, or null for the default
+ * user.
+ */
+ public function getAccess()
+ {
+ return $this->_params['access'];
+ }
+
+ /**
+ * Set the tag for entries that are returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The tag to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setTag($value)
+ {
+ if ($value !== null) {
+ $this->_params['tag'] = $value;
+ } else {
+ unset($this->_params['tag']);
+ }
+ }
+
+ /**
+ * Get the tag filter for entries returned.
+ *
+ * @see setTag
+ * @return string The tag to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getTag()
+ {
+ return $this->_params['tag'];
+ }
+
+ /**
+ * Set the kind of entries that are returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The kind to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setKind($value)
+ {
+ if ($value !== null) {
+ $this->_params['kind'] = $value;
+ } else {
+ unset($this->_params['kind']);
+ }
+ }
+
+ /**
+ * Get the kind of entries to be returned.
+ *
+ * @see setKind
+ * @return string The kind to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getKind()
+ {
+ return $this->_params['kind'];
+ }
+
+ /**
+ * Set the maximum image size for entries returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The image size to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setImgMax($value)
+ {
+ if ($value !== null) {
+ $this->_params['imgmax'] = $value;
+ } else {
+ unset($this->_params['imgmax']);
+ }
+ }
+
+ /**
+ * Get the maximum image size filter for entries returned.
+ *
+ * @see setImgMax
+ * @return string The image size size to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getImgMax()
+ {
+ return $this->_params['imgmax'];
+ }
+
+ /**
+ * Set the thumbnail size filter for entries returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The thumbnail size to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setThumbsize($value)
+ {
+ if ($value !== null) {
+ $this->_params['thumbsize'] = $value;
+ } else {
+ unset($this->_params['thumbsize']);
+ }
+ }
+
+ /**
+ * Get the thumbnail size filter for entries returned.
+ *
+ * @see setThumbsize
+ * @return string The thumbnail size to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getThumbsize()
+ {
+ return $this->_params['thumbsize'];
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl($incomingUri = null)
+ {
+ $uri = Zend_Gdata_Photos::PICASA_BASE_URI;
+
+ if ($this->getType() !== null) {
+ $uri .= '/' . $this->getType();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Type must be feed or entry, not null');
+ }
+
+ if ($this->getProjection() !== null) {
+ $uri .= '/' . $this->getProjection();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Projection must not be null');
+ }
+
+ if ($this->getUser() !== null) {
+ $uri .= '/user/' . $this->getUser();
+ } else {
+ // Should never occur due to setter behavior
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'User must not be null');
+ }
+
+ $uri .= $incomingUri;
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/Zend/Gdata/Query.php b/Zend/Gdata/Query.php
new file mode 100644
index 00000000..d37329f9
--- /dev/null
+++ b/Zend/Gdata/Query.php
@@ -0,0 +1,418 @@
+_url = $url;
+ }
+
+ /**
+ * @return string querystring
+ */
+ public function getQueryString()
+ {
+ $queryArray = array();
+ foreach ($this->_params as $name => $value) {
+ if (substr($name, 0, 1) == '_') {
+ continue;
+ }
+ $queryArray[] = urlencode($name) . '=' . urlencode($value);
+ }
+ if (count($queryArray) > 0) {
+ return '?' . implode('&', $queryArray);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ *
+ */
+ public function resetParameters()
+ {
+ $this->_params = array();
+ }
+
+ /**
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ if ($this->_url == null) {
+ $url = $this->_defaultFeedUri;
+ } else {
+ $url = $this->_url;
+ }
+ if ($this->getCategory() !== null) {
+ $url .= '/-/' . $this->getCategory();
+ }
+ $url .= $this->getQueryString();
+ return $url;
+ }
+
+ /**
+ * @param string $name
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setParam($name, $value)
+ {
+ $this->_params[$name] = $value;
+ return $this;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function getParam($name)
+ {
+ return $this->_params[$name];
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setAlt($value)
+ {
+ if ($value != null) {
+ $this->_params['alt'] = $value;
+ } else {
+ unset($this->_params['alt']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setMaxResults($value)
+ {
+ if ($value != null) {
+ $this->_params['max-results'] = $value;
+ } else {
+ unset($this->_params['max-results']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setQuery($value)
+ {
+ if ($value != null) {
+ $this->_params['q'] = $value;
+ } else {
+ unset($this->_params['q']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setStartIndex($value)
+ {
+ if ($value != null) {
+ $this->_params['start-index'] = $value;
+ } else {
+ unset($this->_params['start-index']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setUpdatedMax($value)
+ {
+ if ($value != null) {
+ $this->_params['updated-max'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['updated-max']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setUpdatedMin($value)
+ {
+ if ($value != null) {
+ $this->_params['updated-min'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['updated-min']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setPublishedMax($value)
+ {
+ if ($value !== null) {
+ $this->_params['published-max'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['published-max']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setPublishedMin($value)
+ {
+ if ($value != null) {
+ $this->_params['published-min'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['published-min']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setAuthor($value)
+ {
+ if ($value != null) {
+ $this->_params['author'] = $value;
+ } else {
+ unset($this->_params['author']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string rss or atom
+ */
+ public function getAlt()
+ {
+ if (array_key_exists('alt', $this->_params)) {
+ return $this->_params['alt'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return int maxResults
+ */
+ public function getMaxResults()
+ {
+ if (array_key_exists('max-results', $this->_params)) {
+ return intval($this->_params['max-results']);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string query
+ */
+ public function getQuery()
+ {
+ if (array_key_exists('q', $this->_params)) {
+ return $this->_params['q'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return int startIndex
+ */
+ public function getStartIndex()
+ {
+ if (array_key_exists('start-index', $this->_params)) {
+ return intval($this->_params['start-index']);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string updatedMax
+ */
+ public function getUpdatedMax()
+ {
+ if (array_key_exists('updated-max', $this->_params)) {
+ return $this->_params['updated-max'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string updatedMin
+ */
+ public function getUpdatedMin()
+ {
+ if (array_key_exists('updated-min', $this->_params)) {
+ return $this->_params['updated-min'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string publishedMax
+ */
+ public function getPublishedMax()
+ {
+ if (array_key_exists('published-max', $this->_params)) {
+ return $this->_params['published-max'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string publishedMin
+ */
+ public function getPublishedMin()
+ {
+ if (array_key_exists('published-min', $this->_params)) {
+ return $this->_params['published-min'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string author
+ */
+ public function getAuthor()
+ {
+ if (array_key_exists('author', $this->_params)) {
+ return $this->_params['author'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setCategory($value)
+ {
+ $this->_category = $value;
+ return $this;
+ }
+
+ /*
+ * @return string id
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+
+ public function __get($name)
+ {
+ $method = 'get'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method));
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Property ' . $name . ' does not exist');
+ }
+ }
+
+ public function __set($name, $val)
+ {
+ $method = 'set'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method), $val);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Property ' . $name . ' does not exist');
+ }
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets.php b/Zend/Gdata/Spreadsheets.php
new file mode 100644
index 00000000..f30e3500
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets.php
@@ -0,0 +1,445 @@
+registerPackage('Zend_Gdata_Spreadsheets');
+ $this->registerPackage('Zend_Gdata_Spreadsheets_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ $this->_server = 'spreadsheets.google.com';
+ }
+
+ /**
+ * Gets a spreadsheet feed.
+ *
+ * @param mixed $location A DocumentQuery or a string URI specifying the feed location.
+ * @return Zend_Gdata_Spreadsheets_SpreadsheetFeed
+ */
+ public function getSpreadsheetFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::SPREADSHEETS_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('spreadsheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_SpreadsheetFeed');
+ }
+
+ /**
+ * Gets a spreadsheet entry.
+ *
+ * @param string $location A DocumentQuery or a URI specifying the entry location.
+ * @return SpreadsheetEntry
+ */
+ public function getSpreadsheetEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('spreadsheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_SpreadsheetEntry');
+ }
+
+ /**
+ * Gets a worksheet feed.
+ *
+ * @param mixed $location A DocumentQuery, SpreadsheetEntry, or a string URI
+ * @return Zend_Gdata_Spreadsheets_WorksheetFeed The feed of worksheets
+ */
+ public function getWorksheetFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('worksheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_SpreadsheetEntry) {
+ $uri = $location->getLink(self::WORKSHEETS_FEED_LINK_URI)->href;
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_WorksheetFeed');
+ }
+
+ /**
+ * Gets a worksheet entry.
+ *
+ * @param string $location A DocumentQuery or a URI specifying the entry location.
+ * @return WorksheetEntry
+ */
+ public function GetWorksheetEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('worksheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_WorksheetEntry');
+ }
+
+ /**
+ * Gets a cell feed.
+ *
+ * @param string $location A CellQuery, WorksheetEntry or a URI specifying the feed location.
+ * @return CellFeed
+ */
+ public function getCellFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_CellQuery) {
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_WorksheetEntry) {
+ $uri = $location->getLink(self::CELL_FEED_LINK_URI)->href;
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_CellFeed');
+ }
+
+ /**
+ * Gets a cell entry.
+ *
+ * @param string $location A CellQuery or a URI specifying the entry location.
+ * @return CellEntry
+ */
+ public function getCellEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_CellQuery) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_CellEntry');
+ }
+
+ /**
+ * Gets a list feed.
+ *
+ * @param mixed $location A ListQuery, WorksheetEntry or string URI specifying the feed location.
+ * @return ListFeed
+ */
+ public function getListFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_ListQuery) {
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_WorksheetEntry) {
+ $uri = $location->getLink(self::LIST_FEED_LINK_URI)->href;
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_ListFeed');
+ }
+
+ /**
+ * Gets a list entry.
+ *
+ * @param string $location A ListQuery or a URI specifying the entry location.
+ * @return ListEntry
+ */
+ public function getListEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_ListQuery) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_ListEntry');
+ }
+
+ /**
+ * Updates an existing cell.
+ *
+ * @param int $row The row containing the cell to update
+ * @param int $col The column containing the cell to update
+ * @param int $inputValue The new value for the cell
+ * @param string $key The key for the spreadsheet to be updated
+ * @param string $wkshtId (optional) The worksheet to be updated
+ * @return CellEntry The updated cell entry.
+ */
+ public function updateCell($row, $col, $inputValue, $key, $wkshtId = 'default')
+ {
+ $cell = 'R'.$row.'C'.$col;
+
+ $query = new Zend_Gdata_Spreadsheets_CellQuery();
+ $query->setSpreadsheetKey($key);
+ $query->setWorksheetId($wkshtId);
+ $query->setCellId($cell);
+
+ $entry = $this->getCellEntry($query);
+ $entry->setCell(new Zend_Gdata_Spreadsheets_Extension_Cell(null, $row, $col, $inputValue));
+ $response = $entry->save();
+ return $response;
+ }
+
+ /**
+ * Inserts a new row with provided data.
+ *
+ * @param array $rowData An array of column header to row data
+ * @param string $key The key of the spreadsheet to modify
+ * @param string $wkshtId (optional) The worksheet to modify
+ * @return ListEntry The inserted row
+ */
+ public function insertRow($rowData, $key, $wkshtId = 'default')
+ {
+ $newEntry = new Zend_Gdata_Spreadsheets_ListEntry();
+ $newCustomArr = array();
+ foreach ($rowData as $k => $v) {
+ $newCustom = new Zend_Gdata_Spreadsheets_Extension_Custom();
+ $newCustom->setText($v)->setColumnName($k);
+ $newEntry->addCustom($newCustom);
+ }
+
+ $query = new Zend_Gdata_Spreadsheets_ListQuery();
+ $query->setSpreadsheetKey($key);
+ $query->setWorksheetId($wkshtId);
+
+ $feed = $this->getListFeed($query);
+ $editLink = $feed->getLink('http://schemas.google.com/g/2005#post');
+
+ return $this->insertEntry($newEntry->saveXML(), $editLink->href, 'Zend_Gdata_Spreadsheets_ListEntry');
+ }
+
+ /**
+ * Updates an existing row with provided data.
+ *
+ * @param ListEntry $entry The row entry to update
+ * @param array $newRowData An array of column header to row data
+ */
+ public function updateRow($entry, $newRowData)
+ {
+ $newCustomArr = array();
+ foreach ($newRowData as $k => $v) {
+ $newCustom = new Zend_Gdata_Spreadsheets_Extension_Custom();
+ $newCustom->setText($v)->setColumnName($k);
+ $newCustomArr[] = $newCustom;
+ }
+ $entry->setCustom($newCustomArr);
+
+ return $entry->save();
+ }
+
+ /**
+ * Deletes an existing row .
+ *
+ * @param ListEntry $entry The row to delete
+ */
+ public function deleteRow($entry)
+ {
+ $entry->delete();
+ }
+
+ /**
+ * Returns the content of all rows as an associative array
+ *
+ * @param mixed $location A ListQuery or string URI specifying the feed location.
+ * @return array An array of rows. Each element of the array is an associative array of data
+ */
+ public function getSpreadsheetListFeedContents($location)
+ {
+ $listFeed = $this->getListFeed($location);
+ $listFeed = $this->retrieveAllEntriesForFeed($listFeed);
+ $spreadsheetContents = array();
+ foreach ($listFeed as $listEntry) {
+ $rowContents = array();
+ $customArray = $listEntry->getCustom();
+ foreach ($customArray as $custom) {
+ $rowContents[$custom->getColumnName()] = $custom->getText();
+ }
+ $spreadsheetContents[] = $rowContents;
+ }
+ return $spreadsheetContents;
+ }
+
+ /**
+ * Returns the content of all cells as an associative array, indexed
+ * off the cell location (ie 'A1', 'D4', etc). Each element of
+ * the array is an associative array with a 'value' and a 'function'.
+ * Only non-empty cells are returned by default. 'range' is the
+ * value of the 'range' query parameter specified at:
+ * http://code.google.com/apis/spreadsheets/reference.html#cells_Parameters
+ *
+ * @param mixed $location A CellQuery, WorksheetEntry or a URL (w/o query string) specifying the feed location.
+ * @param string $range The range of cells to retrieve
+ * @param boolean $empty Whether to retrieve empty cells
+ * @return array An associative array of cells
+ */
+ public function getSpreadsheetCellFeedContents($location, $range = null, $empty = false)
+ {
+ $cellQuery = null;
+ if ($location instanceof Zend_Gdata_Spreadsheets_CellQuery) {
+ $cellQuery = $location;
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_WorksheetEntry) {
+ $url = $location->getLink(self::CELL_FEED_LINK_URI)->href;
+ $cellQuery = new Zend_Gdata_Spreadsheets_CellQuery($url);
+ } else {
+ $url = $location;
+ $cellQuery = new Zend_Gdata_Spreadsheets_CellQuery($url);
+ }
+
+ if ($range != null) {
+ $cellQuery->setRange($range);
+ }
+ $cellQuery->setReturnEmpty($empty);
+
+ $cellFeed = $this->getCellFeed($cellQuery);
+ $cellFeed = $this->retrieveAllEntriesForFeed($cellFeed);
+ $spreadsheetContents = array();
+ foreach ($cellFeed as $cellEntry) {
+ $cellContents = array();
+ $cell = $cellEntry->getCell();
+ $cellContents['formula'] = $cell->getInputValue();
+ $cellContents['value'] = $cell->getText();
+ $spreadsheetContents[$cellEntry->getTitle()->getText()] = $cellContents;
+ }
+ return $spreadsheetContents;
+ }
+
+ /**
+ * Alias for getSpreadsheetFeed
+ *
+ * @param mixed $location A DocumentQuery or a string URI specifying the feed location.
+ * @return Zend_Gdata_Spreadsheets_SpreadsheetFeed
+ */
+ public function getSpreadsheets($location = null)
+ {
+ return $this->getSpreadsheetFeed($location = null);
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/CellEntry.php b/Zend/Gdata/Spreadsheets/CellEntry.php
new file mode 100644
index 00000000..abf11ce4
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/CellEntry.php
@@ -0,0 +1,103 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_cell != null) {
+ $element->appendChild($this->_cell->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gs') . ':' . 'cell';
+ $cell = new Zend_Gdata_Spreadsheets_Extension_Cell();
+ $cell->transferFromDOM($child);
+ $this->_cell = $cell;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Gets the Cell element of this Cell Entry.
+ * @return Zend_Gdata_Spreadsheets_Extension_Cell
+ */
+ public function getCell()
+ {
+ return $this->_cell;
+ }
+
+ /**
+ * Sets the Cell element of this Cell Entry.
+ * @param $cell Zend_Gdata_Spreadsheets_Extension_Cell $cell
+ */
+ public function setCell($cell)
+ {
+ $this->_cell = $cell;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/CellFeed.php b/Zend/Gdata/Spreadsheets/CellFeed.php
new file mode 100644
index 00000000..871774a9
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/CellFeed.php
@@ -0,0 +1,158 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->rowCount != null) {
+ $element->appendChild($this->_rowCount->getDOM($element->ownerDocument));
+ }
+ if ($this->colCount != null) {
+ $element->appendChild($this->_colCount->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gs') . ':' . 'rowCount';
+ $rowCount = new Zend_Gdata_Spreadsheets_Extension_RowCount();
+ $rowCount->transferFromDOM($child);
+ $this->_rowCount = $rowCount;
+ break;
+ case $this->lookupNamespace('gs') . ':' . 'colCount';
+ $colCount = new Zend_Gdata_Spreadsheets_Extension_ColCount();
+ $colCount->transferFromDOM($child);
+ $this->_colCount = $colCount;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Gets the row count for this feed.
+ * @return string The row count for the feed.
+ */
+ public function getRowCount()
+ {
+ return $this->_rowCount;
+ }
+
+ /**
+ * Gets the column count for this feed.
+ * @return string The column count for the feed.
+ */
+ public function getColumnCount()
+ {
+ return $this->_colCount;
+ }
+
+ /**
+ * Sets the row count for this feed.
+ * @param string $rowCount The new row count for the feed.
+ */
+ public function setRowCount($rowCount)
+ {
+ $this->_rowCount = $rowCount;
+ return $this;
+ }
+
+ /**
+ * Sets the column count for this feed.
+ * @param string $colCount The new column count for the feed.
+ */
+ public function setColumnCount($colCount)
+ {
+ $this->_colCount = $colCount;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/CellQuery.php b/Zend/Gdata/Spreadsheets/CellQuery.php
new file mode 100644
index 00000000..97661f35
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/CellQuery.php
@@ -0,0 +1,417 @@
+_spreadsheetKey = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for this query.
+ *
+ * @return string spreadsheet key
+ */
+ public function getSpreadsheetKey()
+ {
+ return $this->_spreadsheetKey;
+ }
+
+ /**
+ * Sets the worksheet id for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setWorksheetId($value)
+ {
+ $this->_worksheetId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the worksheet id for this query.
+ *
+ * @return string worksheet id
+ */
+ public function getWorksheetId()
+ {
+ return $this->_worksheetId;
+ }
+
+ /**
+ * Sets the cell id for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setCellId($value)
+ {
+ $this->_cellId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the cell id for this query.
+ *
+ * @return string cell id
+ */
+ public function getCellId()
+ {
+ return $this->_cellId;
+ }
+
+ /**
+ * Sets the projection for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query.
+ *
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ *
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ *
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the min-row attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMinRow($value)
+ {
+ if ($value != null) {
+ $this->_params['min-row'] = $value;
+ } else {
+ unset($this->_params['min-row']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the min-row attribute for this query.
+ *
+ * @return string min-row
+ */
+ public function getMinRow()
+ {
+ if (array_key_exists('min-row', $this->_params)) {
+ return $this->_params['min-row'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the max-row attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMaxRow($value)
+ {
+ if ($value != null) {
+ $this->_params['max-row'] = $value;
+ } else {
+ unset($this->_params['max-row']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the max-row attribute for this query.
+ *
+ * @return string max-row
+ */
+ public function getMaxRow()
+ {
+ if (array_key_exists('max-row', $this->_params)) {
+ return $this->_params['max-row'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the min-col attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMinCol($value)
+ {
+ if ($value != null) {
+ $this->_params['min-col'] = $value;
+ } else {
+ unset($this->_params['min-col']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the min-col attribute for this query.
+ *
+ * @return string min-col
+ */
+ public function getMinCol()
+ {
+ if (array_key_exists('min-col', $this->_params)) {
+ return $this->_params['min-col'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the max-col attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMaxCol($value)
+ {
+ if ($value != null) {
+ $this->_params['max-col'] = $value;
+ } else {
+ unset($this->_params['max-col']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the max-col attribute for this query.
+ *
+ * @return string max-col
+ */
+ public function getMaxCol()
+ {
+ if (array_key_exists('max-col', $this->_params)) {
+ return $this->_params['max-col'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the range attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setRange($value)
+ {
+ if ($value != null) {
+ $this->_params['range'] = $value;
+ } else {
+ unset($this->_params['range']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the range attribute for this query.
+ *
+ * @return string range
+ */
+ public function getRange()
+ {
+ if (array_key_exists('range', $this->_params)) {
+ return $this->_params['range'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the return-empty attribute for this query.
+ *
+ * @param mixed $value String or bool value for whether to return empty cells
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setReturnEmpty($value)
+ {
+ if (is_bool($value)) {
+ $this->_params['return-empty'] = ($value?'true':'false');
+ } else if ($value != null) {
+ $this->_params['return-empty'] = $value;
+ } else {
+ unset($this->_params['return-empty']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the return-empty attribute for this query.
+ *
+ * @return string return-empty
+ */
+ public function getReturnEmpty()
+ {
+ if (array_key_exists('return-empty', $this->_params)) {
+ return $this->_params['return-empty'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the full query URL for this query.
+ *
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ if ($this->_url == null) {
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A spreadsheet key must be provided for cell queries.');
+ }
+
+ if ($this->_worksheetId != null) {
+ $uri .= '/'.$this->_worksheetId;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A worksheet id must be provided for cell queries.');
+ }
+
+ if ($this->_visibility != null) {
+ $uri .= '/'.$this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A visibility must be provided for cell queries.');
+ }
+
+ if ($this->_projection != null) {
+ $uri .= '/'.$this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A projection must be provided for cell queries.');
+ }
+
+ if ($this->_cellId != null) {
+ $uri .= '/'.$this->_cellId;
+ }
+ } else {
+ $uri = $this->_url;
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+ /**
+ * Gets the attribute query string for this query.
+ *
+ * @return string query string
+ */
+ public function getQueryString()
+ {
+ return parent::getQueryString();
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/DocumentQuery.php b/Zend/Gdata/Spreadsheets/DocumentQuery.php
new file mode 100644
index 00000000..c5b4dc31
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/DocumentQuery.php
@@ -0,0 +1,288 @@
+_spreadsheetKey = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for this query.
+ * @return string spreadsheet key
+ */
+ public function getSpreadsheetKey()
+ {
+ return $this->_spreadsheetKey;
+ }
+
+ /**
+ * Sets the worksheet id for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setWorksheetId($value)
+ {
+ $this->_worksheetId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the worksheet id for this query.
+ * @return string worksheet id
+ */
+ public function getWorksheetId()
+ {
+ return $this->_worksheetId;
+ }
+
+ /**
+ * Sets the document type for this query.
+ * @param string $value spreadsheets or worksheets
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setDocumentType($value)
+ {
+ $this->_documentType = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the document type for this query.
+ * @return string document type
+ */
+ public function getDocumentType()
+ {
+ return $this->_documentType;
+ }
+
+ /**
+ * Sets the projection for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query.
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the title attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ if ($value != null) {
+ $this->_params['title'] = $value;
+ } else {
+ unset($this->_params['title']);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the title-exact attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setTitleExact($value)
+ {
+ if ($value != null) {
+ $this->_params['title-exact'] = $value;
+ } else {
+ unset($this->_params['title-exact']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the title attribute for this query.
+ * @return string title
+ */
+ public function getTitle()
+ {
+ if (array_key_exists('title', $this->_params)) {
+ return $this->_params['title'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the title-exact attribute for this query.
+ * @return string title-exact
+ */
+ public function getTitleExact()
+ {
+ if (array_key_exists('title-exact', $this->_params)) {
+ return $this->_params['title-exact'];
+ } else {
+ return null;
+ }
+ }
+
+ private function appendVisibilityProjection()
+ {
+ $uri = '';
+
+ if ($this->_visibility != null) {
+ $uri .= '/'.$this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A visibility must be provided for document queries.');
+ }
+
+ if ($this->_projection != null) {
+ $uri .= '/'.$this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A projection must be provided for document queries.');
+ }
+
+ return $uri;
+ }
+
+
+ /**
+ * Gets the full query URL for this query.
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_documentType != null) {
+ $uri .= '/'.$this->_documentType;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A document type must be provided for document queries.');
+ }
+
+ if ($this->_documentType == 'spreadsheets') {
+ $uri .= $this->appendVisibilityProjection();
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ }
+ } else if ($this->_documentType == 'worksheets') {
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A spreadsheet key must be provided for worksheet document queries.');
+ }
+ $uri .= $this->appendVisibilityProjection();
+ if ($this->_worksheetId != null) {
+ $uri .= '/'.$this->_worksheetId;
+ }
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+ /**
+ * Gets the attribute query string for this query.
+ * @return string query string
+ */
+ public function getQueryString()
+ {
+ return parent::getQueryString();
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/Extension/Cell.php b/Zend/Gdata/Spreadsheets/Extension/Cell.php
new file mode 100644
index 00000000..26f043b7
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/Extension/Cell.php
@@ -0,0 +1,201 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_row = $row;
+ $this->_col = $col;
+ $this->_inputValue = $inputValue;
+ $this->_numericValue = $numericValue;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ $element->setAttribute('row', $this->_row);
+ $element->setAttribute('col', $this->_col);
+ if ($this->_inputValue) $element->setAttribute('inputValue', $this->_inputValue);
+ if ($this->_numericValue) $element->setAttribute('numericValue', $this->_numericValue);
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'row':
+ $this->_row = $attribute->nodeValue;
+ break;
+ case 'col':
+ $this->_col = $attribute->nodeValue;
+ break;
+ case 'inputValue':
+ $this->_inputValue = $attribute->nodeValue;
+ break;
+ case 'numericValue':
+ $this->_numericValue = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Gets the row attribute of the Cell element.
+ * @return string Row of the Cell.
+ */
+ public function getRow()
+ {
+ return $this->_row;
+ }
+
+ /**
+ * Gets the column attribute of the Cell element.
+ * @return string Column of the Cell.
+ */
+ public function getColumn()
+ {
+ return $this->_col;
+ }
+
+ /**
+ * Gets the input value attribute of the Cell element.
+ * @return string Input value of the Cell.
+ */
+ public function getInputValue()
+ {
+ return $this->_inputValue;
+ }
+
+ /**
+ * Gets the numeric value attribute of the Cell element.
+ * @return string Numeric value of the Cell.
+ */
+ public function getNumericValue()
+ {
+ return $this->_numericValue;
+ }
+
+ /**
+ * Sets the row attribute of the Cell element.
+ * @param string $row New row of the Cell.
+ */
+ public function setRow($row)
+ {
+ $this->_row = $row;
+ return $this;
+ }
+
+ /**
+ * Sets the column attribute of the Cell element.
+ * @param string $col New column of the Cell.
+ */
+ public function setColumn($col)
+ {
+ $this->_col = $col;
+ return $this;
+ }
+
+ /**
+ * Sets the input value attribute of the Cell element.
+ * @param string $inputValue New input value of the Cell.
+ */
+ public function setInputValue($inputValue)
+ {
+ $this->_inputValue = $inputValue;
+ return $this;
+ }
+
+ /**
+ * Sets the numeric value attribute of the Cell element.
+ * @param string $numericValue New numeric value of the Cell.
+ */
+ public function setNumericValue($numericValue)
+ {
+ $this->_numericValue = $numericValue;
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/Extension/ColCount.php b/Zend/Gdata/Spreadsheets/Extension/ColCount.php
new file mode 100644
index 00000000..840033aa
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/Extension/ColCount.php
@@ -0,0 +1,59 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+}
diff --git a/Zend/Gdata/Spreadsheets/Extension/Custom.php b/Zend/Gdata/Spreadsheets/Extension/Custom.php
new file mode 100644
index 00000000..e1f56cb0
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/Extension/Custom.php
@@ -0,0 +1,100 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ $this->_rootElement = $column;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ return $element;
+ }
+
+ /**
+ * Transfers each child and attribute into member variables.
+ * This is called when XML is received over the wire and the data
+ * model needs to be built to represent this XML.
+ *
+ * @param DOMNode $node The DOMNode that represents this object's data
+ */
+ public function transferFromDOM($node)
+ {
+ parent::transferFromDOM($node);
+ $this->_rootElement = $node->localName;
+ }
+
+ /**
+ * Sets the column/tag name of the element.
+ * @param string $column The new column name.
+ */
+ public function setColumnName($column)
+ {
+ $this->_rootElement = $column;
+ return $this;
+ }
+
+ /**
+ * Gets the column name of the element
+ * @return string The column name.
+ */
+ public function getColumnName()
+ {
+ return $this->_rootElement;
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/Extension/RowCount.php b/Zend/Gdata/Spreadsheets/Extension/RowCount.php
new file mode 100644
index 00000000..310c9be6
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/Extension/RowCount.php
@@ -0,0 +1,60 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/ListEntry.php b/Zend/Gdata/Spreadsheets/ListEntry.php
new file mode 100644
index 00000000..e1ac7087
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/ListEntry.php
@@ -0,0 +1,208 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if (!empty($this->_custom)) {
+ foreach ($this->_custom as $custom) {
+ $element->appendChild($custom->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ switch ($child->namespaceURI) {
+ case $this->lookupNamespace('gsx');
+ $custom = new Zend_Gdata_Spreadsheets_Extension_Custom($child->localName);
+ $custom->transferFromDOM($child);
+ $this->addCustom($custom);
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Gets the row elements contained by this list entry.
+ * @return array The custom row elements in this list entry
+ */
+ public function getCustom()
+ {
+ return $this->_custom;
+ }
+
+ /**
+ * Gets a single row element contained by this list entry using its name.
+ * @param string $name The name of a custom element to return. If null
+ * or not defined, an array containing all custom elements
+ * indexed by name will be returned.
+ * @return mixed If a name is specified, the
+ * Zend_Gdata_Spreadsheets_Extension_Custom element requested,
+ * is returned or null if not found. Otherwise, an array of all
+ * Zend_Gdata_Spreadsheets_Extension_Custom elements is returned
+ * indexed by name.
+ */
+ public function getCustomByName($name = null)
+ {
+ if ($name === null) {
+ return $this->_customByName;
+ } else {
+ if (array_key_exists($name, $this->customByName)) {
+ return $this->_customByName[$name];
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Sets the row elements contained by this list entry. If any
+ * custom row elements were previously stored, they will be overwritten.
+ * @param array $custom The custom row elements to be contained in this
+ * list entry.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ */
+ public function setCustom($custom)
+ {
+ $this->_custom = array();
+ foreach ($custom as $c) {
+ $this->addCustom($c);
+ }
+ return $this;
+ }
+
+ /**
+ * Add an individual custom row element to this list entry.
+ * @param Zend_Gdata_Spreadsheets_Extension_Custom $custom The custom
+ * element to be added.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ */
+ public function addCustom($custom)
+ {
+ $this->_custom[] = $custom;
+ $this->_customByName[$custom->getColumnName()] = $custom;
+ return $this;
+ }
+
+ /**
+ * Remove an individual row element from this list entry by index. This
+ * will cause the array to be re-indexed.
+ * @param int $index The index of the custom element to be deleted.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function removeCustom($index)
+ {
+ if (array_key_exists($index, $this->_custom)) {
+ $element = $this->_custom[$index];
+ // Remove element
+ unset($this->_custom[$index]);
+ // Re-index the array
+ $this->_custom = array_values($this->_custom);
+ // Be sure to delete form both arrays!
+ $key = array_search($element, $this->_customByName);
+ unset($this->_customByName[$key]);
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Element does not exist.');
+ }
+ return $this;
+ }
+
+ /**
+ * Remove an individual row element from this list entry by name.
+ * @param string $name The name of the custom element to be deleted.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function removeCustomByName($name)
+ {
+ if (array_key_exists($name, $this->_customByName)) {
+ $element = $this->_customByName[$name];
+ // Remove element
+ unset($this->_customByName[$name]);
+ // Be sure to delete from both arrays!
+ $key = array_search($element, $this->_custom);
+ unset($this->_custom[$key]);
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Element does not exist.');
+ }
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/ListFeed.php b/Zend/Gdata/Spreadsheets/ListFeed.php
new file mode 100644
index 00000000..b925838e
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/ListFeed.php
@@ -0,0 +1,64 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/ListQuery.php b/Zend/Gdata/Spreadsheets/ListQuery.php
new file mode 100644
index 00000000..1fb17b86
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/ListQuery.php
@@ -0,0 +1,305 @@
+_spreadsheetKey = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for the query.
+ * @return string spreadsheet key
+ */
+ public function getSpreadsheetKey()
+ {
+ return $this->_spreadsheetKey;
+ }
+
+ /**
+ * Sets the worksheet id for the query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setWorksheetId($value)
+ {
+ $this->_worksheetId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the worksheet id for the query.
+ * @return string worksheet id
+ */
+ public function getWorksheetId()
+ {
+ return $this->_worksheetId;
+ }
+
+ /**
+ * Sets the row id for the query.
+ * @param string $value row id
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setRowId($value)
+ {
+ $this->_rowId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the row id for the query.
+ * @return string row id
+ */
+ public function getRowId()
+ {
+ return $this->_rowId;
+ }
+
+ /**
+ * Sets the projection for the query.
+ * @param string $value Projection
+ * @return Zend_Gdata_Spreadsheets_ListQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query.
+ * @param string $value visibility
+ * @return Zend_Gdata_Spreadsheets_ListQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the spreadsheet key for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setSpreadsheetQuery($value)
+ {
+ if ($value != null) {
+ $this->_params['sq'] = $value;
+ } else {
+ unset($this->_params['sq']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for this query.
+ * @return string spreadsheet query
+ */
+ public function getSpreadsheetQuery()
+ {
+ if (array_key_exists('sq', $this->_params)) {
+ return $this->_params['sq'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the orderby attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value != null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the orderby attribute for this query.
+ * @return string orderby
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the reverse attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setReverse($value)
+ {
+ if ($value != null) {
+ $this->_params['reverse'] = $value;
+ } else {
+ unset($this->_params['reverse']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the reverse attribute for this query.
+ * @return string reverse
+ */
+ public function getReverse()
+ {
+
+
+ if (array_key_exists('reverse', $this->_params)) {
+ return $this->_params['reverse'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the full query URL for this query.
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A spreadsheet key must be provided for list queries.');
+ }
+
+ if ($this->_worksheetId != null) {
+ $uri .= '/'.$this->_worksheetId;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A worksheet id must be provided for list queries.');
+ }
+
+ if ($this->_visibility != null) {
+ $uri .= '/'.$this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A visibility must be provided for list queries.');
+ }
+
+ if ($this->_projection != null) {
+ $uri .= '/'.$this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A projection must be provided for list queries.');
+ }
+
+ if ($this->_rowId != null) {
+ $uri .= '/'.$this->_rowId;
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+ /**
+ * Gets the attribute query string for this query.
+ * @return string query string
+ */
+ public function getQueryString()
+ {
+ return parent::getQueryString();
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php b/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php
new file mode 100644
index 00000000..b6781cc4
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php
@@ -0,0 +1,64 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Returns the worksheets in this spreadsheet
+ *
+ * @return Zend_Gdata_Spreadsheets_WorksheetFeed The worksheets
+ */
+ public function getWorksheets()
+ {
+ $service = new Zend_Gdata_Spreadsheets($this->getHttpClient());
+ return $service->getWorksheetFeed($this);
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php b/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php
new file mode 100644
index 00000000..efca3b18
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php
@@ -0,0 +1,64 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/WorksheetEntry.php b/Zend/Gdata/Spreadsheets/WorksheetEntry.php
new file mode 100644
index 00000000..92278e9e
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/WorksheetEntry.php
@@ -0,0 +1,187 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_rowCount != null) {
+ $element->appendChild($this->_rowCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_colCount != null) {
+ $element->appendChild($this->_colCount->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gs') . ':' . 'rowCount';
+ $rowCount = new Zend_Gdata_Spreadsheets_Extension_RowCount();
+ $rowCount->transferFromDOM($child);
+ $this->_rowCount = $rowCount;
+ break;
+ case $this->lookupNamespace('gs') . ':' . 'colCount';
+ $colCount = new Zend_Gdata_Spreadsheets_Extension_ColCount();
+ $colCount->transferFromDOM($child);
+ $this->_colCount = $colCount;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+
+ /**
+ * Gets the row count for this entry.
+ *
+ * @return string The row count for the entry.
+ */
+ public function getRowCount()
+ {
+ return $this->_rowCount;
+ }
+
+ /**
+ * Gets the column count for this entry.
+ *
+ * @return string The column count for the entry.
+ */
+ public function getColumnCount()
+ {
+ return $this->_colCount;
+ }
+
+ /**
+ * Sets the row count for this entry.
+ *
+ * @param string $rowCount The new row count for the entry.
+ */
+ public function setRowCount($rowCount)
+ {
+ $this->_rowCount = $rowCount;
+ return $this;
+ }
+
+ /**
+ * Sets the column count for this entry.
+ *
+ * @param string $colCount The new column count for the entry.
+ */
+ public function setColumnCount($colCount)
+ {
+ $this->_colCount = $colCount;
+ return $this;
+ }
+
+ /**
+ * Returns the content of all rows as an associative array
+ *
+ * @return array An array of rows. Each element of the array is an associative array of data
+ */
+ public function getContentsAsRows()
+ {
+ $service = new Zend_Gdata_Spreadsheets($this->getHttpClient());
+ return $service->getSpreadsheetListFeedContents($this);
+ }
+
+ /**
+ * Returns the content of all cells as an associative array, indexed
+ * off the cell location (ie 'A1', 'D4', etc). Each element of
+ * the array is an associative array with a 'value' and a 'function'.
+ * Only non-empty cells are returned by default. 'range' is the
+ * value of the 'range' query parameter specified at:
+ * http://code.google.com/apis/spreadsheets/reference.html#cells_Parameters
+ *
+ * @param string $range The range of cells to retrieve
+ * @param boolean $empty Whether to retrieve empty cells
+ * @return array An associative array of cells
+ */
+ public function getContentsAsCells($range = null, $empty = false)
+ {
+ $service = new Zend_Gdata_Spreadsheets($this->getHttpClient());
+ return $service->getSpreadsheetCellFeedContents($this, $range, $empty);
+ }
+
+}
diff --git a/Zend/Gdata/Spreadsheets/WorksheetFeed.php b/Zend/Gdata/Spreadsheets/WorksheetFeed.php
new file mode 100644
index 00000000..0c43234b
--- /dev/null
+++ b/Zend/Gdata/Spreadsheets/WorksheetFeed.php
@@ -0,0 +1,64 @@
+registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_WorksheetEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Spreadsheets_WorksheetFeed';
+
+}
diff --git a/Zend/Gdata/YouTube.php b/Zend/Gdata/YouTube.php
new file mode 100644
index 00000000..b3f56f05
--- /dev/null
+++ b/Zend/Gdata/YouTube.php
@@ -0,0 +1,874 @@
+registerPackage('Zend_Gdata_YouTube');
+ $this->registerPackage('Zend_Gdata_YouTube_Extension');
+ $this->registerPackage('Zend_Gdata_Media');
+ $this->registerPackage('Zend_Gdata_Media_Extension');
+
+ // NOTE This constructor no longer calls the parent constructor
+ $this->setHttpClient($client, $applicationId, $clientId, $developerKey);
+ }
+
+ /**
+ * Set the Zend_Http_Client object used for communication
+ *
+ * @param Zend_Http_Client $client The client to use for communication
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_App Provides a fluent interface
+ */
+ public function setHttpClient($client,
+ $applicationId = 'MyCompany-MyApp-1.0', $clientId = null,
+ $developerKey = null)
+ {
+ if ($client === null) {
+ $client = new Zend_Http_Client();
+ }
+ if (!$client instanceof Zend_Http_Client) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Argument is not an instance of Zend_Http_Client.');
+ }
+
+ if ($clientId != null) {
+ $client->setHeaders('X-GData-Client', $clientId);
+ }
+
+ if ($developerKey != null) {
+ $client->setHeaders('X-GData-Key', 'key='. $developerKey);
+ }
+
+ return parent::setHttpClient($client, $applicationId);
+ }
+
+ /**
+ * Retrieves a feed of videos.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getVideoFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::VIDEO_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a specific video entry.
+ *
+ * @param mixed $videoId The ID of the video to retrieve.
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined.
+ * @param boolean $fullEntry (optional) Retrieve the full metadata for the
+ * entry. Only possible if entry belongs to currently authenticated
+ * user. An exception will be thrown otherwise.
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_YouTube_VideoEntry The video entry found at the
+ * specified URL.
+ */
+ public function getVideoEntry($videoId = null, $location = null,
+ $fullEntry = false)
+ {
+ if ($videoId !== null) {
+ if ($fullEntry) {
+ return $this->getFullVideoEntry($videoId);
+ } else {
+ $uri = self::VIDEO_URI . "/" . $videoId;
+ }
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_YouTube_VideoEntry');
+ }
+
+ /**
+ * Retrieves a video entry from the user's upload feed.
+ *
+ * @param mixed $videoID The ID of the video to retrieve.
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_YouTube_VideoEntry|null The video entry to be
+ * retrieved, or null if it was not found or the user requesting it
+ * did not have the appropriate permissions.
+ */
+ public function getFullVideoEntry($videoId)
+ {
+ $uri = self::USER_URI . "/default/" .
+ self::UPLOADS_URI_SUFFIX . "/$videoId";
+ return parent::getEntry($uri, 'Zend_Gdata_YouTube_VideoEntry');
+ }
+
+ /**
+ * Retrieves a feed of videos related to the specified video ID.
+ *
+ * @param string $videoId The videoId of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getRelatedVideoFeed($videoId = null, $location = null)
+ {
+ if ($videoId !== null) {
+ $uri = self::VIDEO_URI . "/" . $videoId . "/" .
+ self::RELATED_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of video responses related to the specified video ID.
+ *
+ * @param string $videoId The videoId of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getVideoResponseFeed($videoId = null, $location = null)
+ {
+ if ($videoId !== null) {
+ $uri = self::VIDEO_URI . "/" . $videoId . "/" .
+ self::RESPONSES_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of comments related to the specified video ID.
+ *
+ * @param string $videoId The videoId of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_CommentFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getVideoCommentFeed($videoId = null, $location = null)
+ {
+ if ($videoId !== null) {
+ $uri = self::VIDEO_URI . "/" . $videoId . "/comments";
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_CommentFeed');
+ }
+
+ /**
+ * Retrieves a feed of comments related to the specified video ID.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_CommentFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getTopRatedVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_TOP_RATED_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_TOP_RATED_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('top rated');
+ }
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+
+ /**
+ * Retrieves a feed of the most viewed videos.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getMostViewedVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_MOST_VIEWED_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_MOST_VIEWED_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('most viewed');
+ }
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of recently featured videos.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getRecentlyFeaturedVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_RECENTLY_FEATURED_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_RECENTLY_FEATURED_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('recently featured');
+ }
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of videos recently featured for mobile devices.
+ * These videos will have RTSP links in the $entry->mediaGroup->content
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getWatchOnMobileVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_WATCH_ON_MOBILE_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_WATCH_ON_MOBILE_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('watch on mobile');
+ }
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed which lists a user's playlist
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_PlaylistListFeed The feed of playlists
+ */
+ public function getPlaylistListFeed($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/playlists';
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_PlaylistListFeed');
+ }
+
+ /**
+ * Retrieves a feed of videos in a particular playlist
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_PlaylistVideoFeed The feed of videos found at
+ * the specified URL.
+ */
+ public function getPlaylistVideoFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_PlaylistVideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of a user's subscriptions
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_SubscriptionListFeed The feed of subscriptions
+ */
+ public function getSubscriptionFeed($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/subscriptions';
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_SubscriptionFeed');
+ }
+
+ /**
+ * Retrieves a feed of a user's contacts
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_ContactFeed The feed of contacts
+ */
+ public function getContactFeed($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/contacts';
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_ContactFeed');
+ }
+
+ /**
+ * Retrieves a user's uploads
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The videos uploaded by the user
+ */
+ public function getUserUploads($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/' .
+ self::UPLOADS_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a user's favorites
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The videos favorited by the user
+ */
+ public function getUserFavorites($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/' .
+ self::FAVORITES_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a user's profile as an entry
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_UserProfileEntry The user profile entry
+ */
+ public function getUserProfile($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_YouTube_UserProfileEntry');
+ }
+
+ /**
+ * Helper function for parsing a YouTube token response
+ *
+ * @param string $response The service response
+ * @throws Zend_Gdata_App_Exception
+ * @return array An array containing the token and URL
+ */
+ public static function parseFormUploadTokenResponse($response)
+ {
+ // Load the feed as an XML DOMDocument object
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($response);
+ @ini_restore('track_errors');
+
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "Zend_Gdata_YouTube::parseFormUploadTokenResponse - " .
+ "DOMDocument cannot parse XML: $php_errormsg");
+ }
+ $responseElement = $doc->getElementsByTagName('response')->item(0);
+
+ $urlText = null;
+ $tokenText = null;
+ if ($responseElement != null) {
+ $urlElement =
+ $responseElement->getElementsByTagName('url')->item(0);
+ $tokenElement =
+ $responseElement->getElementsByTagName('token')->item(0);
+
+ if ($urlElement && $urlElement->hasChildNodes() &&
+ $tokenElement && $tokenElement->hasChildNodes()) {
+
+ $urlText = $urlElement->firstChild->nodeValue;
+ $tokenText = $tokenElement->firstChild->nodeValue;
+ }
+ }
+
+ if ($tokenText != null && $urlText != null) {
+ return array('token' => $tokenText, 'url' => $urlText);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Form upload token not found in response');
+ }
+ }
+
+ /**
+ * Retrieves a YouTube token
+ *
+ * @param Zend_Gdata_YouTube_VideoEntry $videoEntry The video entry
+ * @param string $url The location as a string URL
+ * @throws Zend_Gdata_App_Exception
+ * @return array An array containing a token and URL
+ */
+ public function getFormUploadToken($videoEntry,
+ $url='http://gdata.youtube.com/action/GetUploadToken')
+ {
+ if ($url != null && is_string($url)) {
+ // $response is a Zend_Http_response object
+ $response = $this->post($videoEntry, $url);
+ return self::parseFormUploadTokenResponse($response->getBody());
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Url must be provided as a string URL');
+ }
+ }
+
+ /**
+ * Retrieves the activity feed for users
+ *
+ * @param mixed $usernames A string identifying the usernames for which to
+ * retrieve activity for. This can also be a Zend_Gdata_Query
+ * object from which a URL can be determined.
+ * @throws Zend_Gdata_App_VersionException if using version less than 2.
+ * @return Zend_Gdata_YouTube_ActivityFeed
+ */
+ public function getActivityForUser($username)
+ {
+ if ($this->getMajorProtocolVersion() == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('User activity feeds ' .
+ 'are not available in API version 1.');
+ }
+
+ $uri = null;
+ if ($username instanceof Zend_Gdata_Query) {
+ $uri = $username->getQueryUrl();
+ } else {
+ if (count(explode(',', $username)) >
+ self::ACTIVITY_FEED_MAX_USERS) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Activity feed can only retrieve for activity for up to ' .
+ self::ACTIVITY_FEED_MAX_USERS . ' users per request');
+ }
+ $uri = self::ACTIVITY_FEED_URI . '?author=' . $username;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_ActivityFeed');
+ }
+
+ /**
+ * Retrieve the activity of the currently authenticated users friend.
+ *
+ * @throws Zend_Gdata_App_Exception if not logged in.
+ * @return Zend_Gdata_YouTube_ActivityFeed
+ */
+ public function getFriendActivityForCurrentUser()
+ {
+ if (!$this->isAuthenticated()) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('You must be authenticated to ' .
+ 'use the getFriendActivityForCurrentUser function in Zend_' .
+ 'Gdata_YouTube.');
+ }
+ return parent::getFeed(self::FRIEND_ACTIVITY_FEED_URI,
+ 'Zend_Gdata_YouTube_ActivityFeed');
+ }
+
+ /**
+ * Retrieve a feed of messages in the currently authenticated user's inbox.
+ *
+ * @throws Zend_Gdata_App_Exception if not logged in.
+ * @return Zend_Gdata_YouTube_InboxFeed|null
+ */
+ public function getInboxFeedForCurrentUser()
+ {
+ if (!$this->isAuthenticated()) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('You must be authenticated to ' .
+ 'use the getInboxFeedForCurrentUser function in Zend_' .
+ 'Gdata_YouTube.');
+ }
+
+ return parent::getFeed(self::INBOX_FEED_URI,
+ 'Zend_Gdata_YouTube_InboxFeed');
+ }
+
+ /**
+ * Send a video message.
+ *
+ * Note: Either a Zend_Gdata_YouTube_VideoEntry or a valid video ID must
+ * be provided.
+ *
+ * @param string $body The body of the message
+ * @param Zend_Gdata_YouTube_VideoEntry (optional) The video entry to send
+ * @param string $videoId The id of the video to send
+ * @param string $recipientUserName The username of the recipient
+ * @throws Zend_Gdata_App_InvalidArgumentException if no valid
+ * Zend_Gdata_YouTube_VideoEntry or videoId were provided
+ * @return Zend_Gdata_YouTube_InboxEntry|null The
+ * Zend_Gdata_YouTube_Inbox_Entry representing the sent message.
+ *
+ */
+ public function sendVideoMessage($body, $videoEntry = null,
+ $videoId = null, $recipientUserName)
+ {
+ if (!$videoId && !$videoEntry) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Expecting either a valid videoID or a videoEntry object in ' .
+ 'Zend_Gdata_YouTube->sendVideoMessage().');
+ }
+
+ $messageEntry = new Zend_Gdata_YouTube_InboxEntry();
+
+ if ($this->getMajorProtocolVersion() == null ||
+ $this->getMajorProtocolVersion() == 1) {
+
+ if (!$videoId) {
+ $videoId = $videoEntry->getVideoId();
+ } elseif (strlen($videoId) < 12) {
+ //Append the full URI
+ $videoId = self::VIDEO_URI . '/' . $videoId;
+ }
+
+ $messageEntry->setId($this->newId($videoId));
+ // TODO there seems to be a bug where v1 inbox entries dont
+ // retain their description...
+ $messageEntry->setDescription(
+ new Zend_Gdata_YouTube_Extension_Description($body));
+
+ } else {
+ if (!$videoId) {
+ $videoId = $videoEntry->getVideoId();
+ $videoId = substr($videoId, strrpos($videoId, ':'));
+ }
+ $messageEntry->setId($this->newId($videoId));
+ $messageEntry->setSummary($this->newSummary($body));
+ }
+
+ $insertUrl = 'http://gdata.youtube.com/feeds/api/users/' .
+ $recipientUserName . '/inbox';
+ $response = $this->insertEntry($messageEntry, $insertUrl,
+ 'Zend_Gdata_YouTube_InboxEntry');
+ return $response;
+ }
+
+ /**
+ * Post a comment in reply to an existing comment
+ *
+ * @param $commentEntry Zend_Gdata_YouTube_CommentEntry The comment entry
+ * to reply to
+ * @param $commentText string The text of the comment to post
+ * @return A Zend_Gdata_YouTube_CommentEntry representing the posted
+ * comment
+ */
+ public function replyToCommentEntry($commentEntry, $commentText)
+ {
+ $newComment = $this->newCommentEntry();
+ $newComment->content = $this->newContent()->setText($commentText);
+ $commentId = $commentEntry->getId();
+ $commentIdArray = explode(':', $commentId);
+
+ // create a new link element
+ $inReplyToLinkHref = self::VIDEO_URI . '/' . $commentIdArray[3] .
+ '/comments/' . $commentIdArray[5];
+ $inReplyToLink = $this->newLink($inReplyToLinkHref,
+ self::IN_REPLY_TO_SCHEME, $type="application/atom+xml");
+ $links = $newComment->getLink();
+ $links[] = $inReplyToLink;
+ $newComment->setLink($links);
+ $commentFeedPostUrl = self::VIDEO_URI . '/' . $commentIdArray[3] .
+ '/comments';
+ return $this->insertEntry($newComment,
+ $commentFeedPostUrl, 'Zend_Gdata_YouTube_CommentEntry');
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/ActivityEntry.php b/Zend/Gdata/YouTube/ActivityEntry.php
new file mode 100644
index 00000000..e1f1aee6
--- /dev/null
+++ b/Zend/Gdata/YouTube/ActivityEntry.php
@@ -0,0 +1,232 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_videoId !== null) {
+ $element->appendChild($this->_videoId->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_username !== null) {
+ $element->appendChild($this->_username->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_rating !== null) {
+ $element->appendChild($this->_rating->getDOM(
+ $element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'videoid':
+ $videoId = new Zend_Gdata_YouTube_Extension_VideoId();
+ $videoId->transferFromDOM($child);
+ $this->_videoId = $videoId;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'username':
+ $username = new Zend_Gdata_YouTube_Extension_Username();
+ $username->transferFromDOM($child);
+ $this->_username = $username;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the video ID for this activity entry.
+ *
+ * @return null|Zend_Gdata_YouTube_Extension_VideoId
+ */
+ public function getVideoId()
+ {
+ return $this->_videoId;
+ }
+
+ /**
+ * Returns the username for this activity entry.
+ *
+ * @return null|Zend_Gdata_YouTube_Extension_Username
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Returns the rating for this activity entry.
+ *
+ * @return null|Zend_Gdata_YouTube_Extension_Rating
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Return the value of the rating for this video entry.
+ *
+ * Convenience method to save needless typing.
+ *
+ * @return integer|null The value of the rating that was created, if found.
+ */
+ public function getRatingValue()
+ {
+ $rating = $this->_rating;
+ if ($rating) {
+ return $rating->getValue();
+ }
+ return null;
+ }
+
+ /**
+ * Return the activity type that was performed.
+ *
+ * Convenience method that inspects category where scheme is
+ * http://gdata.youtube.com/schemas/2007/userevents.cat.
+ *
+ * @return string|null The activity category if found.
+ */
+ public function getActivityType()
+ {
+ $categories = $this->getCategory();
+ foreach($categories as $category) {
+ if ($category->getScheme() == self::ACTIVITY_CATEGORY_SCHEME) {
+ return $category->getTerm();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Convenience method to quickly get access to the author of the activity
+ *
+ * @return string The author of the activity
+ */
+ public function getAuthorName()
+ {
+ $authors = $this->getAuthor();
+ return $authors[0]->getName()->getText();
+ }
+}
diff --git a/Zend/Gdata/YouTube/ActivityFeed.php b/Zend/Gdata/YouTube/ActivityFeed.php
new file mode 100644
index 00000000..3c3978fa
--- /dev/null
+++ b/Zend/Gdata/YouTube/ActivityFeed.php
@@ -0,0 +1,66 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/CommentEntry.php b/Zend/Gdata/YouTube/CommentEntry.php
new file mode 100644
index 00000000..3248b789
--- /dev/null
+++ b/Zend/Gdata/YouTube/CommentEntry.php
@@ -0,0 +1,59 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/CommentFeed.php b/Zend/Gdata/YouTube/CommentFeed.php
new file mode 100644
index 00000000..6aa9ec01
--- /dev/null
+++ b/Zend/Gdata/YouTube/CommentFeed.php
@@ -0,0 +1,66 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/ContactEntry.php b/Zend/Gdata/YouTube/ContactEntry.php
new file mode 100644
index 00000000..2c350f22
--- /dev/null
+++ b/Zend/Gdata/YouTube/ContactEntry.php
@@ -0,0 +1,136 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_status != null) {
+ $element->appendChild($this->_status->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'status':
+ $status = new Zend_Gdata_YouTube_Extension_Status();
+ $status->transferFromDOM($child);
+ $this->_status = $status;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the status
+ *
+ * @param Zend_Gdata_YouTube_Extension_Status $status The status
+ * @return Zend_Gdata_YouTube_ContactEntry Provides a fluent interface
+ */
+ public function setStatus($status = null)
+ {
+ $this->_status = $status;
+ return $this;
+ }
+
+ /**
+ * Returns the status
+ *
+ * @return Zend_Gdata_YouTube_Extension_Status The status
+ */
+ public function getStatus()
+ {
+ return $this->_status;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/ContactFeed.php b/Zend/Gdata/YouTube/ContactFeed.php
new file mode 100644
index 00000000..60e4c4c3
--- /dev/null
+++ b/Zend/Gdata/YouTube/ContactFeed.php
@@ -0,0 +1,68 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/AboutMe.php b/Zend/Gdata/YouTube/Extension/AboutMe.php
new file mode 100644
index 00000000..20858efb
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/AboutMe.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Age.php b/Zend/Gdata/YouTube/Extension/Age.php
new file mode 100644
index 00000000..d0c17b56
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Age.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Books.php b/Zend/Gdata/YouTube/Extension/Books.php
new file mode 100644
index 00000000..2221c821
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Books.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Company.php b/Zend/Gdata/YouTube/Extension/Company.php
new file mode 100644
index 00000000..ecd44f68
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Company.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Control.php b/Zend/Gdata/YouTube/Extension/Control.php
new file mode 100644
index 00000000..618bc038
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Control.php
@@ -0,0 +1,133 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($draft);
+ $this->_state = $state;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_state != null) {
+ $element->appendChild($this->_state->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'state':
+ $state = new Zend_Gdata_YouTube_Extension_State();
+ $state->transferFromDOM($child);
+ $this->_state = $state;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's state attribute.
+ *
+ * @return Zend_Gdata_YouTube_Extension_State The state element.
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Set the value for this element's state attribute.
+ *
+ * @param Zend_Gdata_YouTube_Extension_State $value The desired value for this attribute.
+ * @return Zend_YouTube_Extension_Control The element being modified.
+ */
+ public function setState($value)
+ {
+ $this->_state = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of this element's state attribute.
+ *
+ * @return string The state's text value
+ */
+ public function getStateValue()
+ {
+ return $this->getState()->getText();
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/CountHint.php b/Zend/Gdata/YouTube/Extension/CountHint.php
new file mode 100644
index 00000000..2eacf12c
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/CountHint.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Description.php b/Zend/Gdata/YouTube/Extension/Description.php
new file mode 100644
index 00000000..1ec3b2aa
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Description.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Duration.php b/Zend/Gdata/YouTube/Extension/Duration.php
new file mode 100644
index 00000000..18b66931
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Duration.php
@@ -0,0 +1,126 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_seconds = $seconds;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_seconds !== null) {
+ $element->setAttribute('seconds', $this->_seconds);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'seconds':
+ $this->_seconds = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's seconds attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getSeconds()
+ {
+ return $this->_seconds;
+ }
+
+ /**
+ * Set the value for this element's seconds attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Duration The element being modified.
+ */
+ public function setSeconds($value)
+ {
+ $this->_seconds = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string The duration in seconds
+ */
+ public function __toString()
+ {
+ return $this->_seconds;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/FirstName.php b/Zend/Gdata/YouTube/Extension/FirstName.php
new file mode 100644
index 00000000..c577af57
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/FirstName.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Gender.php b/Zend/Gdata/YouTube/Extension/Gender.php
new file mode 100644
index 00000000..ce5f79a9
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Gender.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Hobbies.php b/Zend/Gdata/YouTube/Extension/Hobbies.php
new file mode 100644
index 00000000..4916edc3
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Hobbies.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Hometown.php b/Zend/Gdata/YouTube/Extension/Hometown.php
new file mode 100644
index 00000000..7c281680
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Hometown.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/LastName.php b/Zend/Gdata/YouTube/Extension/LastName.php
new file mode 100644
index 00000000..a9a3aa8d
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/LastName.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Link.php b/Zend/Gdata/YouTube/Extension/Link.php
new file mode 100644
index 00000000..c05b6920
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Link.php
@@ -0,0 +1,133 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ $this->_token = $token;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_token != null) {
+ $element->appendChild($this->_token->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'token':
+ $token = new Zend_Gdata_YouTube_Extension_Token();
+ $token->transferFromDOM($child);
+ $this->_token = $token;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's token attribute.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Token The token element.
+ */
+ public function getToken()
+ {
+ return $this->_token;
+ }
+
+ /**
+ * Set the value for this element's token attribute.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Token $value The desired value for this attribute.
+ * @return Zend_YouTube_Extension_Link The element being modified.
+ */
+ public function setToken($value)
+ {
+ $this->_token = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of this element's token attribute.
+ *
+ * @return string The token's text value
+ */
+ public function getTokenValue()
+ {
+ return $this->getToken()->getText();
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Location.php b/Zend/Gdata/YouTube/Extension/Location.php
new file mode 100644
index 00000000..d355bb26
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Location.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/MediaContent.php b/Zend/Gdata/YouTube/Extension/MediaContent.php
new file mode 100644
index 00000000..50e5d4fc
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/MediaContent.php
@@ -0,0 +1,120 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_format!= null) {
+ $element->setAttributeNS($this->lookupNamespace('yt'), 'yt:format', $this->_format);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ $absoluteAttrName = $attribute->namespaceURI . ':' . $attribute->localName;
+ if ($absoluteAttrName == $this->lookupNamespace('yt') . ':' . 'format') {
+ $this->_format = $attribute->nodeValue;
+ } else {
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the format of the media
+ * Optional.
+ *
+ * @return int The format of the media
+ */
+ public function getFormat()
+ {
+ return $this->_format;
+ }
+
+ /**
+ * Sets the format of the media
+ *
+ * @param int $value Format of the media
+ * @return Zend_Gdata_YouTube_Extension_MediaContent Provides a fluent interface
+ *
+ */
+ public function setFormat($value)
+ {
+ $this->_format = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/MediaCredit.php b/Zend/Gdata/YouTube/Extension/MediaCredit.php
new file mode 100644
index 00000000..5831dad2
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/MediaCredit.php
@@ -0,0 +1,189 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_role = $role;
+ $this->_scheme = $scheme;
+ $this->_yttype = $yttype;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_role !== null) {
+ $element->setAttribute('role', $this->_role);
+ }
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_yttype !== null) {
+ $element->setAttributeNS('http://gdata.youtube.com/schemas/2007',
+ 'yt:type', $this->_yttype);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'role':
+ $this->_role = $attribute->nodeValue;
+ break;
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_yttype = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getRole()
+ {
+ return $this->_role;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent
+ * interface
+ */
+ public function setRole($value)
+ {
+ $this->_role = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent
+ * interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getYTtype()
+ {
+ return $this->_yttype;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent
+ * interface
+ */
+ public function setYTtype($value)
+ {
+ $this->_yttype = $value;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/MediaGroup.php b/Zend/Gdata/YouTube/Extension/MediaGroup.php
new file mode 100644
index 00000000..e630cb18
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/MediaGroup.php
@@ -0,0 +1,336 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_duration !== null) {
+ $element->appendChild(
+ $this->_duration->getDOM($element->ownerDocument));
+ }
+ if ($this->_private !== null) {
+ $element->appendChild(
+ $this->_private->getDOM($element->ownerDocument));
+ }
+ if ($this->_videoid != null) {
+ $element->appendChild(
+ $this->_videoid->getDOM($element->ownerDocument));
+ }
+ if ($this->_uploaded != null) {
+ $element->appendChild(
+ $this->_uploaded->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediacredit != null) {
+ $element->appendChild(
+ $this->_mediacredit->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediarating != null) {
+ $element->appendChild(
+ $this->_mediarating->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'content':
+ $content = new Zend_Gdata_YouTube_Extension_MediaContent();
+ $content->transferFromDOM($child);
+ $this->_content[] = $content;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'rating':
+ $mediarating = new Zend_Gdata_YouTube_Extension_MediaRating();
+ $mediarating->transferFromDOM($child);
+ $this->_mediarating = $mediarating;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'credit':
+ $mediacredit = new Zend_Gdata_YouTube_Extension_MediaCredit();
+ $mediacredit->transferFromDOM($child);
+ $this->_mediacredit = $mediacredit;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'duration':
+ $duration = new Zend_Gdata_YouTube_Extension_Duration();
+ $duration->transferFromDOM($child);
+ $this->_duration = $duration;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'private':
+ $private = new Zend_Gdata_YouTube_Extension_Private();
+ $private->transferFromDOM($child);
+ $this->_private = $private;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'videoid':
+ $videoid = new Zend_Gdata_YouTube_Extension_VideoId();
+ $videoid ->transferFromDOM($child);
+ $this->_videoid = $videoid;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'uploaded':
+ $uploaded = new Zend_Gdata_YouTube_Extension_Uploaded();
+ $uploaded ->transferFromDOM($child);
+ $this->_uploaded = $uploaded;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the duration value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_Duration
+ */
+ public function getDuration()
+ {
+ return $this->_duration;
+ }
+
+ /**
+ * Sets the duration value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_Duration $value The duration value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setDuration($value)
+ {
+ $this->_duration = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the videoid value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_VideoId
+ */
+ public function getVideoId()
+ {
+ return $this->_videoid;
+ }
+
+ /**
+ * Sets the videoid value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_VideoId $value The video id value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setVideoId($value)
+ {
+ $this->_videoid = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the yt:uploaded element
+ *
+ * @return Zend_Gdata_YouTube_Extension_Uploaded
+ */
+ public function getUploaded()
+ {
+ return $this->_uploaded;
+ }
+
+ /**
+ * Sets the yt:uploaded element
+ *
+ * @param Zend_Gdata_YouTube_Extension_Uploaded $value The uploaded value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setUploaded($value)
+ {
+ $this->_uploaded = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the private value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_Private
+ */
+ public function getPrivate()
+ {
+ return $this->_private;
+ }
+
+ /**
+ * Sets the private value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_Private $value The private value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setPrivate($value)
+ {
+ $this->_private = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the rating value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_MediaRating
+ */
+ public function getMediaRating()
+ {
+ return $this->_mediarating;
+ }
+
+ /**
+ * Sets the media:rating value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_MediaRating $value The rating element
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setMediaRating($value)
+ {
+ $this->_mediarating = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the media:credit value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_MediaCredit
+ */
+ public function getMediaCredit()
+ {
+ return $this->_mediacredit;
+ }
+
+ /**
+ * Sets the media:credit value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_MediaCredit $value The credit element
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setMediaCredit($value)
+ {
+ $this->_mediacredit = $value;
+ return $this;
+ }
+}
diff --git a/Zend/Gdata/YouTube/Extension/MediaRating.php b/Zend/Gdata/YouTube/Extension/MediaRating.php
new file mode 100644
index 00000000..50e0309e
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/MediaRating.php
@@ -0,0 +1,150 @@
+registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_scheme = $scheme;
+ $this->_country = $country;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_country != null) {
+ $element->setAttribute('country', $this->_country);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'country':
+ $this->_country = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_YouTube_Extension_MediaRating Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCountry()
+ {
+ return $this->_country;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_YouTube_Extension_MediaRating Provides a fluent interface
+ */
+ public function setCountry($value)
+ {
+ $this->_country = $value;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Movies.php b/Zend/Gdata/YouTube/Extension/Movies.php
new file mode 100644
index 00000000..dd0cb986
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Movies.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Music.php b/Zend/Gdata/YouTube/Extension/Music.php
new file mode 100644
index 00000000..1d0e6c01
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Music.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/NoEmbed.php b/Zend/Gdata/YouTube/Extension/NoEmbed.php
new file mode 100644
index 00000000..28f732ea
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/NoEmbed.php
@@ -0,0 +1,54 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Occupation.php b/Zend/Gdata/YouTube/Extension/Occupation.php
new file mode 100644
index 00000000..a49ccd55
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Occupation.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/PlaylistId.php b/Zend/Gdata/YouTube/Extension/PlaylistId.php
new file mode 100644
index 00000000..266493a3
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/PlaylistId.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/PlaylistTitle.php b/Zend/Gdata/YouTube/Extension/PlaylistTitle.php
new file mode 100644
index 00000000..896decbb
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/PlaylistTitle.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Position.php b/Zend/Gdata/YouTube/Extension/Position.php
new file mode 100644
index 00000000..07a8b532
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Position.php
@@ -0,0 +1,90 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+ /**
+ * Get the value for the position in the playlist
+ *
+ * @return int The 1-based position in the playlist
+ */
+ public function getValue()
+ {
+ return $this->_text;
+ }
+
+ /**
+ * Set the value for the position in the playlist
+ *
+ * @param int $value The 1-based position in the playlist
+ * @return Zend_Gdata_Extension_Visibility The element being modified
+ */
+ public function setValue($value)
+ {
+ $this->_text = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/Zend/Gdata/YouTube/Extension/Private.php b/Zend/Gdata/YouTube/Extension/Private.php
new file mode 100644
index 00000000..469feb78
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Private.php
@@ -0,0 +1,81 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ parent::takeAttributeFromDOM($attribute);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/QueryString.php b/Zend/Gdata/YouTube/Extension/QueryString.php
new file mode 100644
index 00000000..8d4b2ba9
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/QueryString.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Racy.php b/Zend/Gdata/YouTube/Extension/Racy.php
new file mode 100644
index 00000000..408fb77d
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Racy.php
@@ -0,0 +1,124 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_state = $state;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_state !== null) {
+ $element->setAttribute('state', $this->_state);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'state':
+ $this->_state = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's state attribute.
+ *
+ * @return bool The value associated with this attribute.
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Set the value for this element's state attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Racy The element being modified.
+ */
+ public function setState($value)
+ {
+ $this->_state = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_state;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Recorded.php b/Zend/Gdata/YouTube/Extension/Recorded.php
new file mode 100644
index 00000000..20363641
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Recorded.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Relationship.php b/Zend/Gdata/YouTube/Extension/Relationship.php
new file mode 100644
index 00000000..e2e09369
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Relationship.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/ReleaseDate.php b/Zend/Gdata/YouTube/Extension/ReleaseDate.php
new file mode 100644
index 00000000..a0658086
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/ReleaseDate.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/School.php b/Zend/Gdata/YouTube/Extension/School.php
new file mode 100644
index 00000000..a922917f
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/School.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/State.php b/Zend/Gdata/YouTube/Extension/State.php
new file mode 100644
index 00000000..7215a996
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/State.php
@@ -0,0 +1,193 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $explanation;
+ $this->_name = $name;
+ $this->_reasonCode = $reasonCode;
+ $this->_helpUrl = $reasonCode;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ if ($this->_reasonCode !== null) {
+ $element->setAttribute('reasonCode', $this->_reasonCode);
+ }
+ if ($this->_helpUrl !== null) {
+ $element->setAttribute('helpUrl', $this->_helpUrl);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ * TODO: Convert attributes to proper types
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'reasonCode':
+ $this->_reasonCode = $attribute->nodeValue;
+ break;
+ case 'helpUrl':
+ $this->_helpUrl = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_State The element being modified.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's reasonCode attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getReasonCode()
+ {
+ return $this->_reasonCode;
+ }
+
+ /**
+ * Set the value for this element's reasonCode attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_State The element being modified.
+ */
+ public function setReasonCode($value)
+ {
+ $this->_reasonCode = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's helpUrl attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getHelpUrl()
+ {
+ return $this->_helpUrl;
+ }
+
+ /**
+ * Set the value for this element's helpUrl attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_State The element being modified.
+ */
+ public function setHelpUrl($value)
+ {
+ $this->_helpUrl = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->_text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Statistics.php b/Zend/Gdata/YouTube/Extension/Statistics.php
new file mode 100644
index 00000000..23598d80
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Statistics.php
@@ -0,0 +1,309 @@
+ tag appears within a
+ * user profile entry.
+ *
+ * @var integer
+ */
+ protected $_videoWatchCount = null;
+
+ /**
+ * When the viewCount attribute refers to a video entry, the attribute
+ * specifies the number of times that the video has been viewed.
+ * When the viewCount attribute refers to a user profile, the attribute
+ * specifies the number of times that the user's profile has been
+ * viewed.
+ *
+ * @var integer
+ */
+ protected $_viewCount = null;
+
+ /**
+ * The subscriberCount attribute specifies the number of YouTube users
+ * who have subscribed to a particular user's YouTube channel.
+ * The subscriberCount attribute is only specified when the
+ * tag appears within a user profile entry.
+ *
+ * @var integer
+ */
+ protected $_subscriberCount = null;
+
+ /**
+ * The lastWebAccess attribute indicates the most recent time that
+ * a particular user used YouTube.
+ *
+ * @var string
+ */
+ protected $_lastWebAccess = null;
+
+ /**
+ * The favoriteCount attribute specifies the number of YouTube users
+ * who have added a video to their list of favorite videos. The
+ * favoriteCount attribute is only specified when the
+ * tag appears within a video entry.
+ *
+ * @var integer
+ */
+ protected $_favoriteCount = null;
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Statistics object.
+ * @param string $viewCount(optional) The viewCount value
+ * @param string $videoWatchCount(optional) The videoWatchCount value
+ * @param string $subscriberCount(optional) The subscriberCount value
+ * @param string $lastWebAccess(optional) The lastWebAccess value
+ * @param string $favoriteCount(optional) The favoriteCount value
+ */
+ public function __construct($viewCount = null, $videoWatchCount = null,
+ $subscriberCount = null, $lastWebAccess = null,
+ $favoriteCount = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_viewCount = $viewCount;
+ $this->_videoWatchCount = $videoWatchCount;
+ $this->_subscriberCount = $subscriberCount;
+ $this->_lastWebAccess = $lastWebAccess;
+ $this->_favoriteCount = $favoriteCount;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_videoWatchCount !== null) {
+ $element->setAttribute('watchCount', $this->_videoWatchCount);
+ }
+ if ($this->_viewCount !== null) {
+ $element->setAttribute('viewCount', $this->_viewCount);
+ }
+ if ($this->_subscriberCount !== null) {
+ $element->setAttribute('subscriberCount',
+ $this->_subscriberCount);
+ }
+ if ($this->_lastWebAccess !== null) {
+ $element->setAttribute('lastWebAccess',
+ $this->_lastWebAccess);
+ }
+ if ($this->_favoriteCount !== null) {
+ $element->setAttribute('favoriteCount',
+ $this->_favoriteCount);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ * TODO: Convert attributes to proper types
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'videoWatchCount':
+ $this->_videoWatchCount = $attribute->nodeValue;
+ break;
+ case 'viewCount':
+ $this->_viewCount = $attribute->nodeValue;
+ break;
+ case 'subscriberCount':
+ $this->_subscriberCount = $attribute->nodeValue;
+ break;
+ case 'lastWebAccess':
+ $this->_lastWebAccess = $attribute->nodeValue;
+ break;
+ case 'favoriteCount':
+ $this->_favoriteCount = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's viewCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getViewCount()
+ {
+ return $this->_viewCount;
+ }
+
+ /**
+ * Set the value for this element's viewCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setViewCount($value)
+ {
+ $this->_viewCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's videoWatchCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getVideoWatchCount()
+ {
+ return $this->_videoWatchCount;
+ }
+
+ /**
+ * Set the value for this element's videoWatchCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setVideoWatchCount($value)
+ {
+ $this->_videoWatchCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's subscriberCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getSubscriberCount()
+ {
+ return $this->_subscriberCount;
+ }
+
+ /**
+ * Set the value for this element's subscriberCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setSubscriberCount($value)
+ {
+ $this->_subscriberCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's lastWebAccess attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getLastWebAccess()
+ {
+ return $this->_lastWebAccess;
+ }
+
+ /**
+ * Set the value for this element's lastWebAccess attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setLastWebAccess($value)
+ {
+ $this->_lastWebAccess = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's favoriteCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getFavoriteCount()
+ {
+ return $this->_favoriteCount;
+ }
+
+ /**
+ * Set the value for this element's favoriteCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setFavoriteCount($value)
+ {
+ $this->_favoriteCount = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return 'View Count=' . $this->_viewCount .
+ ' VideoWatchCount=' . $this->_videoWatchCount .
+ ' SubscriberCount=' . $this->_subscriberCount .
+ ' LastWebAccess=' . $this->_lastWebAccess .
+ ' FavoriteCount=' . $this->_favoriteCount;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Status.php b/Zend/Gdata/YouTube/Extension/Status.php
new file mode 100644
index 00000000..d3690355
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Status.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Token.php b/Zend/Gdata/YouTube/Extension/Token.php
new file mode 100644
index 00000000..c4b7b5d7
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Token.php
@@ -0,0 +1,70 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ return $element;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Uploaded.php b/Zend/Gdata/YouTube/Extension/Uploaded.php
new file mode 100644
index 00000000..d23c6501
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Uploaded.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/Username.php b/Zend/Gdata/YouTube/Extension/Username.php
new file mode 100644
index 00000000..dacca105
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/Username.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/Extension/VideoId.php b/Zend/Gdata/YouTube/Extension/VideoId.php
new file mode 100644
index 00000000..0a87fa37
--- /dev/null
+++ b/Zend/Gdata/YouTube/Extension/VideoId.php
@@ -0,0 +1,51 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/InboxEntry.php b/Zend/Gdata/YouTube/InboxEntry.php
new file mode 100644
index 00000000..cdac634f
--- /dev/null
+++ b/Zend/Gdata/YouTube/InboxEntry.php
@@ -0,0 +1,281 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_description != null) {
+ $element->appendChild(
+ $this->_description->getDOM($element->ownerDocument));
+ }
+ if ($this->_rating != null) {
+ $element->appendChild(
+ $this->_rating->getDOM($element->ownerDocument));
+ }
+ if ($this->_statistics != null) {
+ $element->appendChild(
+ $this->_statistics->getDOM($element->ownerDocument));
+ }
+ if ($this->_comments != null) {
+ $element->appendChild(
+ $this->_comments->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'comments':
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'description':
+ $description = new Zend_Gdata_YouTube_Extension_Description();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'statistics':
+ $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
+ $statistics->transferFromDOM($child);
+ $this->_statistics = $statistics;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the yt:description
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_Description|null
+ */
+ public function getDescription()
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getDescription ' .
+ ' method is only supported in version 1 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_description;
+ }
+ }
+
+ /**
+ * Sets the yt:description element for a new inbox entry.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Description $description The
+ * description.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setDescription($description = null)
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setDescription ' .
+ ' method is only supported in version 1 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_description = $description;
+ return $this;
+ }
+ }
+
+ /**
+ * Get the gd:rating element for the inbox entry
+ *
+ * @return Zend_Gdata_Extension_Rating|null
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Sets the gd:rating element for the inbox entry
+ *
+ * @param Zend_Gdata_Extension_Rating $rating The rating for the video in
+ * the message
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setRating($rating = null)
+ {
+ $this->_rating = $rating;
+ return $this;
+ }
+
+ /**
+ * Get the gd:comments element of the inbox entry.
+ *
+ * @return Zend_Gdata_Extension_Comments|null
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * Sets the gd:comments element for the inbox entry
+ *
+ * @param Zend_Gdata_Extension_Comments $comments The comments feed link
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setComments($comments = null)
+ {
+ $this->_comments = $comments;
+ return $this;
+ }
+
+ /**
+ * Get the yt:statistics element for the inbox entry
+ *
+ * @return Zend_Gdata_YouTube_Extension_Statistics|null
+ */
+ public function getStatistics()
+ {
+ return $this->_statistics;
+ }
+
+ /**
+ * Sets the yt:statistics element for the inbox entry
+ *
+ * @param Zend_Gdata_YouTube_Extension_Statistics $statistics The
+ * statistics element for the video in the message
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setStatistics($statistics = null)
+ {
+ $this->_statistics = $statistics;
+ return $this;
+ }
+
+
+}
diff --git a/Zend/Gdata/YouTube/InboxFeed.php b/Zend/Gdata/YouTube/InboxFeed.php
new file mode 100644
index 00000000..79ae87b1
--- /dev/null
+++ b/Zend/Gdata/YouTube/InboxFeed.php
@@ -0,0 +1,68 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/MediaEntry.php b/Zend/Gdata/YouTube/MediaEntry.php
new file mode 100644
index 00000000..b193ae60
--- /dev/null
+++ b/Zend/Gdata/YouTube/MediaEntry.php
@@ -0,0 +1,81 @@
+namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'group':
+ $mediaGroup = new Zend_Gdata_YouTube_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/PlaylistListEntry.php b/Zend/Gdata/YouTube/PlaylistListEntry.php
new file mode 100644
index 00000000..196533bf
--- /dev/null
+++ b/Zend/Gdata/YouTube/PlaylistListEntry.php
@@ -0,0 +1,300 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_description != null) {
+ $element->appendChild($this->_description->getDOM($element->ownerDocument));
+ }
+ if ($this->_countHint != null) {
+ $element->appendChild($this->_countHint->getDOM($element->ownerDocument));
+ }
+ if ($this->_playlistId != null) {
+ $element->appendChild($this->_playlistId->getDOM($element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'description':
+ $description = new Zend_Gdata_YouTube_Extension_Description();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'countHint':
+ $countHint = new Zend_Gdata_YouTube_Extension_CountHint();
+ $countHint->transferFromDOM($child);
+ $this->_countHint = $countHint;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'playlistId':
+ $playlistId = new Zend_Gdata_YouTube_Extension_PlaylistId();
+ $playlistId->transferFromDOM($child);
+ $this->_playlistId = $playlistId;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the description relating to the playlist.
+ *
+ * @deprecated Deprecated as of version 2 of the YouTube API.
+ * @param Zend_Gdata_YouTube_Extension_Description $description The description relating to the video
+ * @return Zend_Gdata_YouTube_PlaylistListEntry Provides a fluent interface
+ */
+ public function setDescription($description = null)
+ {
+ if ($this->getMajorProtocolVersion() >= 2) {
+ $this->setSummary($description);
+ } else {
+ $this->_description = $description;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the description relating to the video.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Description The description
+ * relating to the video
+ */
+ public function getDescription()
+ {
+ if ($this->getMajorProtocolVersion() >= 2) {
+ return $this->getSummary();
+ } else {
+ return $this->_description;
+ }
+ }
+
+ /**
+ * Returns the countHint relating to the playlist.
+ *
+ * The countHint is the number of videos on a playlist.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_CountHint The count of videos on
+ * a playlist.
+ */
+ public function getCountHint()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The yt:countHint ' .
+ 'element is not supported in versions earlier than 2.');
+ } else {
+ return $this->_countHint;
+ }
+ }
+
+ /**
+ * Returns the Id relating to the playlist.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_PlaylistId The id of this playlist.
+ */
+ public function getPlaylistId()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The yt:playlistId ' .
+ 'element is not supported in versions earlier than 2.');
+ } else {
+ return $this->_playlistId;
+ }
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the playlist
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_PlaylistListEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL of the playlist video feed
+ *
+ * @return string The URL of the playlist video feed
+ */
+ public function getPlaylistVideoFeedUrl()
+ {
+ if ($this->getMajorProtocolVersion() >= 2) {
+ return $this->getContent()->getSrc();
+ } else {
+ return $this->getFeedLink(Zend_Gdata_YouTube::PLAYLIST_REL)->href;
+ }
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/PlaylistListFeed.php b/Zend/Gdata/YouTube/PlaylistListFeed.php
new file mode 100644
index 00000000..9b8736b4
--- /dev/null
+++ b/Zend/Gdata/YouTube/PlaylistListFeed.php
@@ -0,0 +1,68 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/PlaylistVideoEntry.php b/Zend/Gdata/YouTube/PlaylistVideoEntry.php
new file mode 100644
index 00000000..699e1b47
--- /dev/null
+++ b/Zend/Gdata/YouTube/PlaylistVideoEntry.php
@@ -0,0 +1,132 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_position !== null) {
+ $element->appendChild($this->_position->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'position':
+ $position = new Zend_Gdata_YouTube_Extension_Position();
+ $position->transferFromDOM($child);
+ $this->_position = $position;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param Zend_Gdata_YouTube_Extension_Position $position
+ * The position of the entry in the feed, as specified by the user.
+ * @return Zend_Gdata_YouTube_PlaylistVideoEntry Provides a fluent interface
+ */
+ public function setPosition($position = null)
+ {
+ $this->_position = $position;
+ return $this;
+ }
+
+ /**
+ * Returns the position of the entry in the feed, as specified by the user
+ *
+ * @return Zend_Gdata_YouTube_Extension_Position The position
+ */
+ public function getPosition()
+ {
+ return $this->_position;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/PlaylistVideoFeed.php b/Zend/Gdata/YouTube/PlaylistVideoFeed.php
new file mode 100644
index 00000000..e2ddb312
--- /dev/null
+++ b/Zend/Gdata/YouTube/PlaylistVideoFeed.php
@@ -0,0 +1,68 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/SubscriptionEntry.php b/Zend/Gdata/YouTube/SubscriptionEntry.php
new file mode 100644
index 00000000..fa1ddcc9
--- /dev/null
+++ b/Zend/Gdata/YouTube/SubscriptionEntry.php
@@ -0,0 +1,446 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_countHint != null) {
+ $element->appendChild($this->_countHint->getDOM($element->ownerDocument));
+ }
+ if ($this->_playlistTitle != null) {
+ $element->appendChild($this->_playlistTitle->getDOM($element->ownerDocument));
+ }
+ if ($this->_playlistId != null) {
+ $element->appendChild($this->_playlistId->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediaThumbnail != null) {
+ $element->appendChild($this->_mediaThumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_username != null) {
+ $element->appendChild($this->_username->getDOM($element->ownerDocument));
+ }
+ if ($this->_queryString != null) {
+ $element->appendChild($this->_queryString->getDOM($element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'thumbnail':
+ $mediaThumbnail = new Zend_Gdata_Media_Extension_MediaThumbnail();
+ $mediaThumbnail->transferFromDOM($child);
+ $this->_mediaThumbnail = $mediaThumbnail;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'countHint':
+ $countHint = new Zend_Gdata_YouTube_Extension_CountHint();
+ $countHint->transferFromDOM($child);
+ $this->_countHint = $countHint;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'playlistTitle':
+ $playlistTitle = new Zend_Gdata_YouTube_Extension_PlaylistTitle();
+ $playlistTitle->transferFromDOM($child);
+ $this->_playlistTitle = $playlistTitle;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'playlistId':
+ $playlistId = new Zend_Gdata_YouTube_Extension_PlaylistId();
+ $playlistId->transferFromDOM($child);
+ $this->_playlistId = $playlistId;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'queryString':
+ $queryString = new Zend_Gdata_YouTube_Extension_QueryString();
+ $queryString->transferFromDOM($child);
+ $this->_queryString = $queryString;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'username':
+ $username = new Zend_Gdata_YouTube_Extension_Username();
+ $username->transferFromDOM($child);
+ $this->_username = $username;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Get the playlist title for a 'playlist' subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_PlaylistId
+ */
+ public function getPlaylistId()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getPlaylistId ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_playlistId;
+ }
+ }
+
+ /**
+ * Sets the yt:playlistId element for a new playlist subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_PlaylistId $id The id of
+ * the playlist to which to subscribe to.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setPlaylistId($id = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setPlaylistTitle ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_playlistId = $id;
+ return $this;
+ }
+ }
+
+ /**
+ * Get the queryString of the subscription
+ *
+ * @return Zend_Gdata_YouTube_Extension_QueryString
+ */
+ public function getQueryString()
+ {
+ return $this->_queryString;
+ }
+
+ /**
+ * Sets the yt:queryString element for a new keyword subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_QueryString $queryString The query
+ * string to subscribe to
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setQueryString($queryString = null)
+ {
+ $this->_queryString = $queryString;
+ return $this;
+ }
+
+ /**
+ * Get the playlist title for a 'playlist' subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_PlaylistTitle
+ */
+ public function getPlaylistTitle()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getPlaylistTitle ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_playlistTitle;
+ }
+ }
+
+ /**
+ * Sets the yt:playlistTitle element for a new playlist subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_PlaylistTitle $title The title of
+ * the playlist to which to subscribe to.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setPlaylistTitle($title = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setPlaylistTitle ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_playlistTitle = $title;
+ return $this;
+ }
+ }
+
+ /**
+ * Get the counthint for a subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_CountHint
+ */
+ public function getCountHint()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getCountHint ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_countHint;
+ }
+ }
+
+ /**
+ * Get the thumbnail for a subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+ public function getMediaThumbnail()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getMediaThumbnail ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_mediaThumbnail;
+ }
+ }
+
+ /**
+ * Get the username for a channel subscription.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Username
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Sets the username for a new channel subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Username $username The username of
+ * the channel to which to subscribe to.
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setUsername($username = null)
+ {
+ $this->_username = $username;
+ return $this;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/SubscriptionFeed.php b/Zend/Gdata/YouTube/SubscriptionFeed.php
new file mode 100644
index 00000000..bb71af8e
--- /dev/null
+++ b/Zend/Gdata/YouTube/SubscriptionFeed.php
@@ -0,0 +1,68 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/UserProfileEntry.php b/Zend/Gdata/YouTube/UserProfileEntry.php
new file mode 100644
index 00000000..deb79491
--- /dev/null
+++ b/Zend/Gdata/YouTube/UserProfileEntry.php
@@ -0,0 +1,1041 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_description != null) {
+ $element->appendChild($this->_description->getDOM($element->ownerDocument));
+ }
+ if ($this->_aboutMe != null) {
+ $element->appendChild($this->_aboutMe->getDOM($element->ownerDocument));
+ }
+ if ($this->_age != null) {
+ $element->appendChild($this->_age->getDOM($element->ownerDocument));
+ }
+ if ($this->_username != null) {
+ $element->appendChild($this->_username->getDOM($element->ownerDocument));
+ }
+ if ($this->_books != null) {
+ $element->appendChild($this->_books->getDOM($element->ownerDocument));
+ }
+ if ($this->_company != null) {
+ $element->appendChild($this->_company->getDOM($element->ownerDocument));
+ }
+ if ($this->_hobbies != null) {
+ $element->appendChild($this->_hobbies->getDOM($element->ownerDocument));
+ }
+ if ($this->_hometown != null) {
+ $element->appendChild($this->_hometown->getDOM($element->ownerDocument));
+ }
+ if ($this->_location != null) {
+ $element->appendChild($this->_location->getDOM($element->ownerDocument));
+ }
+ if ($this->_movies != null) {
+ $element->appendChild($this->_movies->getDOM($element->ownerDocument));
+ }
+ if ($this->_music != null) {
+ $element->appendChild($this->_music->getDOM($element->ownerDocument));
+ }
+ if ($this->_occupation != null) {
+ $element->appendChild($this->_occupation->getDOM($element->ownerDocument));
+ }
+ if ($this->_school != null) {
+ $element->appendChild($this->_school->getDOM($element->ownerDocument));
+ }
+ if ($this->_gender != null) {
+ $element->appendChild($this->_gender->getDOM($element->ownerDocument));
+ }
+ if ($this->_relationship != null) {
+ $element->appendChild($this->_relationship->getDOM($element->ownerDocument));
+ }
+ if ($this->_firstName != null) {
+ $element->appendChild($this->_firstName->getDOM($element->ownerDocument));
+ }
+ if ($this->_lastName != null) {
+ $element->appendChild($this->_lastName->getDOM($element->ownerDocument));
+ }
+ if ($this->_statistics != null) {
+ $element->appendChild($this->_statistics->getDOM($element->ownerDocument));
+ }
+ if ($this->_thumbnail != null) {
+ $element->appendChild($this->_thumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'description':
+ $description = new Zend_Gdata_YouTube_Extension_Description();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'aboutMe':
+ $aboutMe = new Zend_Gdata_YouTube_Extension_AboutMe();
+ $aboutMe->transferFromDOM($child);
+ $this->_aboutMe = $aboutMe;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'age':
+ $age = new Zend_Gdata_YouTube_Extension_Age();
+ $age->transferFromDOM($child);
+ $this->_age = $age;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'username':
+ $username = new Zend_Gdata_YouTube_Extension_Username();
+ $username->transferFromDOM($child);
+ $this->_username = $username;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'books':
+ $books = new Zend_Gdata_YouTube_Extension_Books();
+ $books->transferFromDOM($child);
+ $this->_books = $books;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'company':
+ $company = new Zend_Gdata_YouTube_Extension_Company();
+ $company->transferFromDOM($child);
+ $this->_company = $company;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'hobbies':
+ $hobbies = new Zend_Gdata_YouTube_Extension_Hobbies();
+ $hobbies->transferFromDOM($child);
+ $this->_hobbies = $hobbies;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'hometown':
+ $hometown = new Zend_Gdata_YouTube_Extension_Hometown();
+ $hometown->transferFromDOM($child);
+ $this->_hometown = $hometown;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'location':
+ $location = new Zend_Gdata_YouTube_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_location = $location;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'movies':
+ $movies = new Zend_Gdata_YouTube_Extension_Movies();
+ $movies->transferFromDOM($child);
+ $this->_movies = $movies;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'music':
+ $music = new Zend_Gdata_YouTube_Extension_Music();
+ $music->transferFromDOM($child);
+ $this->_music = $music;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'occupation':
+ $occupation = new Zend_Gdata_YouTube_Extension_Occupation();
+ $occupation->transferFromDOM($child);
+ $this->_occupation = $occupation;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'school':
+ $school = new Zend_Gdata_YouTube_Extension_School();
+ $school->transferFromDOM($child);
+ $this->_school = $school;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'gender':
+ $gender = new Zend_Gdata_YouTube_Extension_Gender();
+ $gender->transferFromDOM($child);
+ $this->_gender = $gender;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'relationship':
+ $relationship = new Zend_Gdata_YouTube_Extension_Relationship();
+ $relationship->transferFromDOM($child);
+ $this->_relationship = $relationship;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'firstName':
+ $firstName = new Zend_Gdata_YouTube_Extension_FirstName();
+ $firstName->transferFromDOM($child);
+ $this->_firstName = $firstName;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'lastName':
+ $lastName = new Zend_Gdata_YouTube_Extension_LastName();
+ $lastName->transferFromDOM($child);
+ $this->_lastName = $lastName;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'statistics':
+ $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
+ $statistics->transferFromDOM($child);
+ $this->_statistics = $statistics;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'thumbnail':
+ $thumbnail = new Zend_Gdata_Media_Extension_MediaThumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_thumbnail = $thumbnail;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the content of the 'about me' field.
+ *
+ * @param Zend_Gdata_YouTube_Extension_AboutMe $aboutMe The 'about me'
+ * information.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setAboutMe($aboutMe = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setAboutMe ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_aboutMe = $aboutMe;
+ return $this;
+ }
+ }
+
+ /**
+ * Returns the contents of the 'about me' field.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_AboutMe The 'about me' information
+ */
+ public function getAboutMe()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getAboutMe ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_aboutMe;
+ }
+ }
+
+ /**
+ * Sets the content of the 'first name' field.
+ *
+ * @param Zend_Gdata_YouTube_Extension_FirstName $firstName The first name
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setFirstName($firstName = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setFirstName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_firstName = $firstName;
+ return $this;
+ }
+ }
+
+ /**
+ * Returns the first name
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_FirstName The first name
+ */
+ public function getFirstName()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getFirstName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_firstName;
+ }
+ }
+
+ /**
+ * Sets the content of the 'last name' field.
+ *
+ * @param Zend_Gdata_YouTube_Extension_LastName $lastName The last name
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setLastName($lastName = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setLastName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_lastName = $lastName;
+ return $this;
+ }
+ }
+
+ /**
+ * Returns the last name
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_LastName The last name
+ */
+ public function getLastName()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getLastName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_lastName;
+ }
+ }
+
+ /**
+ * Returns the statistics
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_Statistics The profile statistics
+ */
+ public function getStatistics()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getStatistics ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_statistics;
+ }
+ }
+
+ /**
+ * Returns the thumbnail
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail The profile thumbnail
+ */
+ public function getThumbnail()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getThumbnail ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_thumbnail;
+ }
+ }
+
+ /**
+ * Sets the age
+ *
+ * @param Zend_Gdata_YouTube_Extension_Age $age The age
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setAge($age = null)
+ {
+ $this->_age = $age;
+ return $this;
+ }
+
+ /**
+ * Returns the age
+ *
+ * @return Zend_Gdata_YouTube_Extension_Age The age
+ */
+ public function getAge()
+ {
+ return $this->_age;
+ }
+
+ /**
+ * Sets the username
+ *
+ * @param Zend_Gdata_YouTube_Extension_Username $username The username
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setUsername($username = null)
+ {
+ $this->_username = $username;
+ return $this;
+ }
+
+ /**
+ * Returns the username
+ *
+ * @return Zend_Gdata_YouTube_Extension_Username The username
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Sets the books
+ *
+ * @param Zend_Gdata_YouTube_Extension_Books $books The books
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setBooks($books = null)
+ {
+ $this->_books = $books;
+ return $this;
+ }
+
+ /**
+ * Returns the books
+ *
+ * @return Zend_Gdata_YouTube_Extension_Books The books
+ */
+ public function getBooks()
+ {
+ return $this->_books;
+ }
+
+ /**
+ * Sets the company
+ *
+ * @param Zend_Gdata_YouTube_Extension_Company $company The company
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setCompany($company = null)
+ {
+ $this->_company = $company;
+ return $this;
+ }
+
+ /**
+ * Returns the company
+ *
+ * @return Zend_Gdata_YouTube_Extension_Company The company
+ */
+ public function getCompany()
+ {
+ return $this->_company;
+ }
+
+ /**
+ * Sets the hobbies
+ *
+ * @param Zend_Gdata_YouTube_Extension_Hobbies $hobbies The hobbies
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setHobbies($hobbies = null)
+ {
+ $this->_hobbies = $hobbies;
+ return $this;
+ }
+
+ /**
+ * Returns the hobbies
+ *
+ * @return Zend_Gdata_YouTube_Extension_Hobbies The hobbies
+ */
+ public function getHobbies()
+ {
+ return $this->_hobbies;
+ }
+
+ /**
+ * Sets the hometown
+ *
+ * @param Zend_Gdata_YouTube_Extension_Hometown $hometown The hometown
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setHometown($hometown = null)
+ {
+ $this->_hometown = $hometown;
+ return $this;
+ }
+
+ /**
+ * Returns the hometown
+ *
+ * @return Zend_Gdata_YouTube_Extension_Hometown The hometown
+ */
+ public function getHometown()
+ {
+ return $this->_hometown;
+ }
+
+ /**
+ * Sets the location
+ *
+ * @param Zend_Gdata_YouTube_Extension_Location $location The location
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setLocation($location = null)
+ {
+ $this->_location = $location;
+ return $this;
+ }
+
+ /**
+ * Returns the location
+ *
+ * @return Zend_Gdata_YouTube_Extension_Location The location
+ */
+ public function getLocation()
+ {
+ return $this->_location;
+ }
+
+ /**
+ * Sets the movies
+ *
+ * @param Zend_Gdata_YouTube_Extension_Movies $movies The movies
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setMovies($movies = null)
+ {
+ $this->_movies = $movies;
+ return $this;
+ }
+
+ /**
+ * Returns the movies
+ *
+ * @return Zend_Gdata_YouTube_Extension_Movies The movies
+ */
+ public function getMovies()
+ {
+ return $this->_movies;
+ }
+
+ /**
+ * Sets the music
+ *
+ * @param Zend_Gdata_YouTube_Extension_Music $music The music
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setMusic($music = null)
+ {
+ $this->_music = $music;
+ return $this;
+ }
+
+ /**
+ * Returns the music
+ *
+ * @return Zend_Gdata_YouTube_Extension_Music The music
+ */
+ public function getMusic()
+ {
+ return $this->_music;
+ }
+
+ /**
+ * Sets the occupation
+ *
+ * @param Zend_Gdata_YouTube_Extension_Occupation $occupation The occupation
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setOccupation($occupation = null)
+ {
+ $this->_occupation = $occupation;
+ return $this;
+ }
+
+ /**
+ * Returns the occupation
+ *
+ * @return Zend_Gdata_YouTube_Extension_Occupation The occupation
+ */
+ public function getOccupation()
+ {
+ return $this->_occupation;
+ }
+
+ /**
+ * Sets the school
+ *
+ * @param Zend_Gdata_YouTube_Extension_School $school The school
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setSchool($school = null)
+ {
+ $this->_school = $school;
+ return $this;
+ }
+
+ /**
+ * Returns the school
+ *
+ * @return Zend_Gdata_YouTube_Extension_School The school
+ */
+ public function getSchool()
+ {
+ return $this->_school;
+ }
+
+ /**
+ * Sets the gender
+ *
+ * @param Zend_Gdata_YouTube_Extension_Gender $gender The gender
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setGender($gender = null)
+ {
+ $this->_gender = $gender;
+ return $this;
+ }
+
+ /**
+ * Returns the gender
+ *
+ * @return Zend_Gdata_YouTube_Extension_Gender The gender
+ */
+ public function getGender()
+ {
+ return $this->_gender;
+ }
+
+ /**
+ * Sets the relationship
+ *
+ * @param Zend_Gdata_YouTube_Extension_Relationship $relationship The relationship
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setRelationship($relationship = null)
+ {
+ $this->_relationship = $relationship;
+ return $this;
+ }
+
+ /**
+ * Returns the relationship
+ *
+ * @return Zend_Gdata_YouTube_Extension_Relationship The relationship
+ */
+ public function getRelationship()
+ {
+ return $this->_relationship;
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL in the gd:feedLink with the provided rel value
+ *
+ * @param string $rel The rel value to find
+ * @return mixed Either the URL as a string or null if a feedLink wasn't
+ * found with the provided rel value
+ */
+ public function getFeedLinkHref($rel)
+ {
+ $feedLink = $this->getFeedLink($rel);
+ if ($feedLink !== null) {
+ return $feedLink->href;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL of the playlist list feed
+ *
+ * @return string The URL of the playlist video feed
+ */
+ public function getPlaylistListFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_PLAYLISTS_REL);
+ }
+
+ /**
+ * Returns the URL of the uploads feed
+ *
+ * @return string The URL of the uploads video feed
+ */
+ public function getUploadsFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_UPLOADS_REL);
+ }
+
+ /**
+ * Returns the URL of the subscriptions feed
+ *
+ * @return string The URL of the subscriptions feed
+ */
+ public function getSubscriptionsFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_SUBSCRIPTIONS_REL);
+ }
+
+ /**
+ * Returns the URL of the contacts feed
+ *
+ * @return string The URL of the contacts feed
+ */
+ public function getContactsFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_CONTACTS_REL);
+ }
+
+ /**
+ * Returns the URL of the favorites feed
+ *
+ * @return string The URL of the favorites feed
+ */
+ public function getFavoritesFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_FAVORITES_REL);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/VideoEntry.php b/Zend/Gdata/YouTube/VideoEntry.php
new file mode 100644
index 00000000..fff6156f
--- /dev/null
+++ b/Zend/Gdata/YouTube/VideoEntry.php
@@ -0,0 +1,1095 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_noEmbed != null) {
+ $element->appendChild($this->_noEmbed->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_statistics != null) {
+ $element->appendChild($this->_statistics->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_racy != null) {
+ $element->appendChild($this->_racy->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_recorded != null) {
+ $element->appendChild($this->_recorded->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_location != null) {
+ $element->appendChild($this->_location->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_rating != null) {
+ $element->appendChild($this->_rating->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_comments != null) {
+ $element->appendChild($this->_comments->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_where != null) {
+ $element->appendChild($this->_where->getDOM(
+ $element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'statistics':
+ $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
+ $statistics->transferFromDOM($child);
+ $this->_statistics = $statistics;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'racy':
+ $racy = new Zend_Gdata_YouTube_Extension_Racy();
+ $racy->transferFromDOM($child);
+ $this->_racy = $racy;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'recorded':
+ $recorded = new Zend_Gdata_YouTube_Extension_Recorded();
+ $recorded->transferFromDOM($child);
+ $this->_recorded = $recorded;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'location':
+ $location = new Zend_Gdata_YouTube_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_location = $location;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'comments':
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'noembed':
+ $noEmbed = new Zend_Gdata_YouTube_Extension_NoEmbed();
+ $noEmbed->transferFromDOM($child);
+ $this->_noEmbed = $noEmbed;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ case $this->lookupNamespace('georss') . ':' . 'where':
+ $where = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $where->transferFromDOM($child);
+ $this->_where = $where;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'link';
+ $link = new Zend_Gdata_YouTube_Extension_Link();
+ $link->transferFromDOM($child);
+ $this->_link[] = $link;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'control':
+ $control = new Zend_Gdata_YouTube_Extension_Control();
+ $control->transferFromDOM($child);
+ $this->_control = $control;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets when the video was recorded.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Recorded $recorded When the video was recorded
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setRecorded($recorded = null)
+ {
+ $this->_recorded = $recorded;
+ return $this;
+ }
+
+ /**
+ * Gets the date that the video was recorded.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Recorded|null
+ */
+ public function getRecorded()
+ {
+ return $this->_recorded;
+ }
+
+ /**
+ * Sets the location information.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Location $location Where the video
+ * was recorded
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setLocation($location = null)
+ {
+ $this->_location = $location;
+ return $this;
+ }
+
+ /**
+ * Gets the location where the video was recorded.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Location|null
+ */
+ public function getLocation()
+ {
+ return $this->_location;
+ }
+
+ /**
+ * If an instance of Zend_Gdata_YouTube_Extension_NoEmbed is passed in,
+ * the video cannot be embedded. Otherwise, if null is passsed in, the
+ * video is able to be embedded.
+ *
+ * @param Zend_Gdata_YouTube_Extension_NoEmbed $noEmbed Whether or not the
+ * video can be embedded.
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setNoEmbed($noEmbed = null)
+ {
+ $this->_noEmbed = $noEmbed;
+ return $this;
+ }
+
+ /**
+ * If the return value is an instance of
+ * Zend_Gdata_YouTube_Extension_NoEmbed, this video cannot be embedded.
+ *
+ * @return Zend_Gdata_YouTube_Extension_NoEmbed|null Whether or not the video can be embedded
+ */
+ public function getNoEmbed()
+ {
+ return $this->_noEmbed;
+ }
+
+ /**
+ * Checks whether the video is embeddable.
+ *
+ * @return bool Returns true if the video is embeddable.
+ */
+ public function isVideoEmbeddable()
+ {
+ if ($this->getNoEmbed() == null) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Sets the statistics relating to the video.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Statistics $statistics The statistics relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setStatistics($statistics = null)
+ {
+ $this->_statistics = $statistics;
+ return $this;
+ }
+
+ /**
+ * Returns the statistics relating to the video.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Statistics The statistics relating to the video
+ */
+ public function getStatistics()
+ {
+ return $this->_statistics;
+ }
+
+ /**
+ * Specifies that the video has racy content.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Racy $racy The racy flag object
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setRacy($racy = null)
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException(
+ 'Calling getRacy() on a YouTube VideoEntry is deprecated ' .
+ 'as of version 2 of the API.');
+ }
+
+ $this->_racy = $racy;
+ return $this;
+ }
+
+ /**
+ * Returns the racy flag object.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_Racy|null The racy flag object
+ */
+ public function getRacy()
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException(
+ 'Calling getRacy() on a YouTube VideoEntry is deprecated ' .
+ 'as of version 2 of the API.');
+ }
+ return $this->_racy;
+ }
+
+ /**
+ * Sets the rating relating to the video.
+ *
+ * @param Zend_Gdata_Extension_Rating $rating The rating relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setRating($rating = null)
+ {
+ $this->_rating = $rating;
+ return $this;
+ }
+
+ /**
+ * Returns the rating relating to the video.
+ *
+ * @return Zend_Gdata_Extension_Rating The rating relating to the video
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Sets the comments relating to the video.
+ *
+ * @param Zend_Gdata_Extension_Comments $comments The comments relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setComments($comments = null)
+ {
+ $this->_comments = $comments;
+ return $this;
+ }
+
+ /**
+ * Returns the comments relating to the video.
+ *
+ * @return Zend_Gdata_Extension_Comments The comments relating to the video
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the link element relating to video responses.
+ *
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getVideoResponsesLink()
+ {
+ return $this->getLink(Zend_Gdata_YouTube::VIDEO_RESPONSES_REL);
+ }
+
+ /**
+ * Returns the link element relating to video ratings.
+ *
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getVideoRatingsLink()
+ {
+ return $this->getLink(Zend_Gdata_YouTube::VIDEO_RATINGS_REL);
+ }
+
+ /**
+ * Returns the link element relating to video complaints.
+ *
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getVideoComplaintsLink()
+ {
+ return $this->getLink(Zend_Gdata_YouTube::VIDEO_COMPLAINTS_REL);
+ }
+
+ /**
+ * Gets the YouTube video ID based upon the atom:id value
+ *
+ * @return string The video ID
+ */
+ public function getVideoId()
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ $videoId = $this->getMediaGroup()->getVideoId()->text;
+ } else {
+ $fullId = $this->getId()->getText();
+ $position = strrpos($fullId, '/');
+ if ($position === false) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Slash not found in atom:id of ' . $fullId);
+ } else {
+ $videoId = substr($fullId, $position + 1);
+ }
+ }
+ return $videoId;
+ }
+
+ /**
+ * Gets the date that the video was recorded.
+ *
+ * @return string|null The date that the video was recorded
+ */
+ public function getVideoRecorded()
+ {
+ $recorded = $this->getRecorded();
+ if ($recorded != null) {
+ return $recorded->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the date that the video was recorded.
+ *
+ * @param string $recorded The date that the video was recorded, in the
+ * format of '2001-06-19'
+ */
+ public function setVideoRecorded($recorded)
+ {
+ $this->setRecorded(
+ new Zend_Gdata_YouTube_Extension_Recorded($recorded));
+ return $this;
+ }
+
+ /**
+ * Gets the georss:where element
+ *
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ /**
+ * Sets the georss:where element
+ *
+ * @param Zend_Gdata_Geo_Extension_GeoRssWhere $value The georss:where class value
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the title of the video as a string. null is returned
+ * if the video title is not available.
+ *
+ * @return string|null The title of the video
+ */
+ public function getVideoTitle()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getTitle() != null) {
+ return $this->getMediaGroup()->getTitle()->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the title of the video as a string.
+ *
+ * @param string $title Title for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoTitle($title)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setTitle(
+ new Zend_Gdata_Media_Extension_MediaTitle($title));
+ return $this;
+ }
+
+ /**
+ * Sets the description of the video as a string.
+ *
+ * @param string $description Description for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoDescription($description)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setDescription(
+ new Zend_Gdata_Media_Extension_MediaDescription($description));
+ return $this;
+ }
+
+
+ /**
+ * Gets the description of the video as a string. null is returned
+ * if the video description is not available.
+ *
+ * @return string|null The description of the video
+ */
+ public function getVideoDescription()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getDescription() != null) {
+ return $this->getMediaGroup()->getDescription()->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the URL of the YouTube video watch page. null is returned
+ * if the video watch page URL is not available.
+ *
+ * @return string|null The URL of the YouTube video watch page
+ */
+ public function getVideoWatchPageUrl()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getPlayer() != null &&
+ array_key_exists(0, $this->getMediaGroup()->getPlayer())) {
+ $players = $this->getMediaGroup()->getPlayer();
+ return $players[0]->getUrl();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets an array of the thumbnails representing the video.
+ * Each thumbnail is an element of the array, and is an
+ * array of the thumbnail properties - time, height, width,
+ * and url. For convient usage inside a foreach loop, an
+ * empty array is returned if there are no thumbnails.
+ *
+ * @return array An array of video thumbnails.
+ */
+ public function getVideoThumbnails()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getThumbnail() != null) {
+
+ $thumbnailArray = array();
+
+ foreach ($this->getMediaGroup()->getThumbnail() as $thumbnailObj) {
+ $thumbnail = array();
+ $thumbnail['time'] = $thumbnailObj->time;
+ $thumbnail['height'] = $thumbnailObj->height;
+ $thumbnail['width'] = $thumbnailObj->width;
+ $thumbnail['url'] = $thumbnailObj->url;
+ $thumbnailArray[] = $thumbnail;
+ }
+ return $thumbnailArray;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Gets the URL of the flash player SWF. null is returned if the
+ * duration value is not available.
+ *
+ * @return string|null The URL of the flash player SWF
+ */
+ public function getFlashPlayerUrl()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ foreach ($this->getMediaGroup()->getContent() as $content) {
+ if ($content->getType() === 'application/x-shockwave-flash') {
+ return $content->getUrl();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the duration of the video, in seconds. null is returned
+ * if the duration value is not available.
+ *
+ * @return string|null The duration of the video, in seconds.
+ */
+ public function getVideoDuration()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getDuration() != null) {
+ return $this->getMediaGroup()->getDuration()->getSeconds();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Checks whether the video is private.
+ *
+ * @return bool Return true if video is private
+ */
+ public function isVideoPrivate()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getPrivate() != null) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Sets video to private.
+ *
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoPrivate()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setPrivate(new Zend_Gdata_YouTube_Extension_Private());
+ return $this;
+ }
+
+ /**
+ * Sets a private video to be public.
+ *
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoPublic()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->private = null;
+ return $this;
+ }
+
+ /**
+ * Gets an array of the tags assigned to this video. For convient
+ * usage inside a foreach loop, an empty array is returned when there
+ * are no tags assigned.
+ *
+ * @return array An array of the tags assigned to this video
+ */
+ public function getVideoTags()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getKeywords() != null) {
+
+ $keywords = $this->getMediaGroup()->getKeywords();
+ $keywordsString = $keywords->getText();
+ if (strlen(trim($keywordsString)) > 0) {
+ return preg_split('/(, *)|,/', $keywordsString);
+ }
+ }
+ return array();
+ }
+
+ /**
+ * Sets the keyword tags for a video.
+ *
+ * @param mixed $tags Either a comma-separated string or an array
+ * of tags for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoTags($tags)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $keywords = new Zend_Gdata_Media_Extension_MediaKeywords();
+ if (is_array($tags)) {
+ $tags = implode(', ', $tags);
+ }
+ $keywords->setText($tags);
+ $this->getMediaGroup()->setKeywords($keywords);
+ return $this;
+ }
+
+ /**
+ * Gets the number of views for this video. null is returned if the
+ * number of views is not available.
+ *
+ * @return string|null The number of views for this video
+ */
+ public function getVideoViewCount()
+ {
+ if ($this->getStatistics() != null) {
+ return $this->getStatistics()->getViewCount();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the location specified for this video, if available. The location
+ * is returned as an array containing the keys 'longitude' and 'latitude'.
+ * null is returned if the location is not available.
+ *
+ * @return array|null The location specified for this video
+ */
+ public function getVideoGeoLocation()
+ {
+ if ($this->getWhere() != null &&
+ $this->getWhere()->getPoint() != null &&
+ ($position = $this->getWhere()->getPoint()->getPos()) != null) {
+
+ $positionString = $position->__toString();
+
+ if (strlen(trim($positionString)) > 0) {
+ $positionArray = explode(' ', trim($positionString));
+ if (count($positionArray) == 2) {
+ $returnArray = array();
+ $returnArray['latitude'] = $positionArray[0];
+ $returnArray['longitude'] = $positionArray[1];
+ return $returnArray;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the rating information for this video, if available. The rating
+ * is returned as an array containing the keys 'average' and 'numRaters'.
+ * null is returned if the rating information is not available.
+ *
+ * @return array|null The rating information for this video
+ */
+ public function getVideoRatingInfo()
+ {
+ if ($this->getRating() != null) {
+ $returnArray = array();
+ $returnArray['average'] = $this->getRating()->getAverage();
+ $returnArray['numRaters'] = $this->getRating()->getNumRaters();
+ return $returnArray;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the category of this video, if available. The category is returned
+ * as a string. Valid categories are found at:
+ * http://gdata.youtube.com/schemas/2007/categories.cat
+ * If the category is not set, null is returned.
+ *
+ * @return string|null The category of this video
+ */
+ public function getVideoCategory()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $categories = $this->getMediaGroup()->getCategory();
+ if ($categories != null) {
+ foreach($categories as $category) {
+ if ($category->getScheme() == self::YOUTUBE_CATEGORY_SCHEMA) {
+ return $category->getText();
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets the category of the video as a string.
+ *
+ * @param string $category Categories for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoCategory($category)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setCategory(array(new Zend_Gdata_Media_Extension_MediaCategory($category, self::YOUTUBE_CATEGORY_SCHEMA)));
+ return $this;
+ }
+
+ /**
+ * Gets the developer tags for the video, if available and if client is
+ * authenticated with a valid developerKey. The tags are returned
+ * as an array.
+ * If no tags are set, null is returned.
+ *
+ * @return array|null The developer tags for this video or null if none were set.
+ */
+ public function getVideoDeveloperTags()
+ {
+ $developerTags = null;
+ $this->ensureMediaGroupIsNotNull();
+
+ $categoryArray = $this->getMediaGroup()->getCategory();
+ if ($categoryArray != null) {
+ foreach ($categoryArray as $category) {
+ if ($category instanceof Zend_Gdata_Media_Extension_MediaCategory) {
+ if ($category->getScheme() == self::YOUTUBE_DEVELOPER_TAGS_SCHEMA) {
+ $developerTags[] = $category->getText();
+ }
+ }
+ }
+ return $developerTags;
+ }
+ return null;
+ }
+
+ /**
+ * Adds a developer tag to array of tags for the video.
+ *
+ * @param string $developerTag DeveloperTag for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function addVideoDeveloperTag($developerTag)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $newCategory = new Zend_Gdata_Media_Extension_MediaCategory($developerTag, self::YOUTUBE_DEVELOPER_TAGS_SCHEMA);
+
+ if ($this->getMediaGroup()->getCategory() == null) {
+ $this->getMediaGroup()->setCategory($newCategory);
+ } else {
+ $categories = $this->getMediaGroup()->getCategory();
+ $categories[] = $newCategory;
+ $this->getMediaGroup()->setCategory($categories);
+ }
+ return $this;
+ }
+
+ /**
+ * Set multiple developer tags for the video as strings.
+ *
+ * @param array $developerTags Array of developerTag for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoDeveloperTags($developerTags)
+ {
+ foreach($developerTags as $developerTag) {
+ $this->addVideoDeveloperTag($developerTag);
+ }
+ return $this;
+ }
+
+
+ /**
+ * Get the current publishing state of the video.
+ *
+ * @return Zend_Gdata_YouTube_Extension_State|null The publishing state of this video
+ */
+ public function getVideoState()
+ {
+ $control = $this->getControl();
+ if ($control != null &&
+ $control->getDraft() != null &&
+ $control->getDraft()->getText() == 'yes') {
+
+ return $control->getState();
+ }
+ return null;
+ }
+
+ /**
+ * Get the VideoEntry's Zend_Gdata_YouTube_Extension_MediaGroup object.
+ * If the mediaGroup does not exist, then set it.
+ *
+ * @return void
+ */
+ public function ensureMediaGroupIsNotNull()
+ {
+ if ($this->getMediagroup() == null) {
+ $this->setMediagroup(new Zend_Gdata_YouTube_Extension_MediaGroup());
+ }
+ }
+
+ /**
+ * Helper function to conveniently set a video's rating.
+ *
+ * @param integer $ratingValue A number representing the rating. Must
+ * be between 1 and 5 inclusive.
+ * @throws Zend_Gdata_Exception
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface.
+ */
+ public function setVideoRating($ratingValue)
+ {
+ if ($ratingValue < 1 || $ratingValue > 5) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Rating for video entry must be between 1 and 5 inclusive.');
+ }
+
+ require_once 'Zend/Gdata/Extension/Rating.php';
+ $rating = new Zend_Gdata_Extension_Rating(null, 1, 5, null,
+ $ratingValue);
+ $this->setRating($rating);
+ return $this;
+ }
+
+ /**
+ * Retrieve the URL for a video's comment feed.
+ *
+ * @return string|null The URL if found, or null if not found.
+ */
+ public function getVideoCommentFeedUrl()
+ {
+ $commentsExtension = $this->getComments();
+ $commentsFeedUrl = null;
+ if ($commentsExtension) {
+ $commentsFeedLink = $commentsExtension->getFeedLink();
+ if ($commentsFeedLink) {
+ $commentsFeedUrl = $commentsFeedLink->getHref();
+ }
+ }
+ return $commentsFeedUrl;
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/VideoFeed.php b/Zend/Gdata/YouTube/VideoFeed.php
new file mode 100644
index 00000000..702a93ac
--- /dev/null
+++ b/Zend/Gdata/YouTube/VideoFeed.php
@@ -0,0 +1,65 @@
+registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/Zend/Gdata/YouTube/VideoQuery.php b/Zend/Gdata/YouTube/VideoQuery.php
new file mode 100644
index 00000000..7f3f20c3
--- /dev/null
+++ b/Zend/Gdata/YouTube/VideoQuery.php
@@ -0,0 +1,540 @@
+_url = Zend_Gdata_YouTube::STANDARD_TOP_RATED_URI;
+ break;
+ case 'most viewed':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_MOST_VIEWED_URI;
+ break;
+ case 'recently featured':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_RECENTLY_FEATURED_URI;
+ break;
+ case 'mobile':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_WATCH_ON_MOBILE_URI;
+ break;
+ case 'related':
+ if ($videoId === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Video ID must be set for feed of type: ' . $feedType);
+ } else {
+ $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . $videoId .
+ '/related';
+ }
+ break;
+ case 'responses':
+ if ($videoId === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Video ID must be set for feed of type: ' . $feedType);
+ } else {
+ $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . $videoId .
+ 'responses';
+ }
+ break;
+ case 'comments':
+ if ($videoId === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Video ID must be set for feed of type: ' . $feedType);
+ } else {
+ $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' .
+ $videoId . 'comments';
+ if ($entry !== null) {
+ $this->_url .= '/' . $entry;
+ }
+ }
+ break;
+ default:
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Unknown feed type');
+ break;
+ }
+ }
+
+ /**
+ * Sets the location parameter for the query
+ *
+ * @param string $value
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setLocation($value)
+ {
+ switch($value) {
+ case null:
+ unset($this->_params['location']);
+ default:
+ $parameters = explode(',', $value);
+ if (count($parameters) != 2) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must provide 2 coordinates to the location ' .
+ 'URL parameter');
+ }
+
+ foreach($parameters as $param) {
+ $temp = trim($param);
+ // strip off the optional exclamation mark for numeric check
+ if (substr($temp, -1) == '!') {
+ $temp = substr($temp, 0, -1);
+ }
+ if (!is_numeric($temp)) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Value provided to location parameter must' .
+ ' be in the form of two coordinates');
+ }
+ }
+ $this->_params['location'] = $value;
+ }
+ }
+
+ /**
+ * Get the value of the location parameter
+ *
+ * @return string|null Return the location if it exists, null otherwise.
+ */
+ public function getLocation()
+ {
+ if (array_key_exists('location', $this->_params)) {
+ return $this->_params['location'];
+ } else {
+ return null;
+ }
+ }
+
+
+ /**
+ * Sets the location-radius parameter for the query
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setLocationRadius($value)
+ {
+ switch($value) {
+ case null:
+ unset($this->_params['location-radius']);
+ default:
+ $this->_params['location-radius'] = $value;
+ }
+ }
+
+ /**
+ * Get the value of the location-radius parameter
+ *
+ * @return string|null Return the location-radius if it exists,
+ * null otherwise.
+ */
+ public function getLocationRadius()
+ {
+ if (array_key_exists('location-radius', $this->_params)) {
+ return $this->_params['location-radius'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the time period over which this query should apply
+ *
+ * @param string $value
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setTime($value = null)
+ {
+ switch ($value) {
+ case 'today':
+ $this->_params['time'] = 'today';
+ break;
+ case 'this_week':
+ $this->_params['time'] = 'this_week';
+ break;
+ case 'this_month':
+ $this->_params['time'] = 'this_month';
+ break;
+ case 'all_time':
+ $this->_params['time'] = 'all_time';
+ break;
+ case null:
+ unset($this->_params['time']);
+ default:
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Unknown time value');
+ break;
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the value of the uploader parameter
+ *
+ * @param string $value The value of the uploader parameter. Currently this
+ * can only be set to the value of 'partner'.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setUploader($value = null)
+ {
+ switch ($value) {
+ case 'partner':
+ $this->_params['uploader'] = 'partner';
+ break;
+ case null:
+ unset($this->_params['uploader']);
+ break;
+ default:
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Unknown value for uploader');
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the formatted video query (vq) URL param value
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setVideoQuery($value = null)
+ {
+ if ($value != null) {
+ $this->_params['vq'] = $value;
+ } else {
+ unset($this->_params['vq']);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the param to return videos of a specific format
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setFormat($value = null)
+ {
+ if ($value != null) {
+ $this->_params['format'] = $value;
+ } else {
+ unset($this->_params['format']);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets whether or not to include racy videos in the search results
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setRacy($value = null)
+ {
+ switch ($value) {
+ case 'include':
+ $this->_params['racy'] = $value;
+ break;
+ case 'exclude':
+ $this->_params['racy'] = $value;
+ break;
+ case null:
+ unset($this->_params['racy']);
+ break;
+ }
+ return $this;
+ }
+
+ /**
+ * Whether or not to include racy videos in the search results
+ *
+ * @return string|null The value of racy if it exists, null otherwise.
+ */
+ public function getRacy()
+ {
+ if (array_key_exists('racy', $this->_params)) {
+ return $this->_params['racy'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the safeSearch parameter
+ *
+ * @param string $value The value of the parameter, currently only 'none',
+ * 'moderate' or 'strict' are allowed values.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setSafeSearch($value)
+ {
+ switch ($value) {
+ case 'none':
+ $this->_params['safeSearch'] = 'none';
+ break;
+ case 'moderate':
+ $this->_params['safeSearch'] = 'moderate';
+ break;
+ case 'strict':
+ $this->_params['safeSearch'] = 'strict';
+ break;
+ case null:
+ unset($this->_params['safeSearch']);
+ default:
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'The safeSearch parameter only supports the values '.
+ '\'none\', \'moderate\' or \'strict\'.');
+ }
+ }
+
+ /**
+ * Return the value of the safeSearch parameter
+ *
+ * @return string|null The value of the safeSearch parameter if it has been
+ * set, null otherwise.
+ */
+ public function getSafeSearch()
+ {
+ if (array_key_exists('safeSearch', $this->_params)) {
+ return $this->_params['safeSearch'];
+ }
+ return $this;
+ }
+
+ /**
+ * Set the value of the orderby parameter
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_Query Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value != null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * Return the value of the format parameter
+ *
+ * @return string|null The value of format if it exists, null otherwise.
+ */
+ public function getFormat()
+ {
+ if (array_key_exists('format', $this->_params)) {
+ return $this->_params['format'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return the value of the video query that has been set
+ *
+ * @return string|null The value of the video query if it exists,
+ * null otherwise.
+ */
+ public function getVideoQuery()
+ {
+ if (array_key_exists('vq', $this->_params)) {
+ return $this->_params['vq'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return the value of the time parameter
+ *
+ * @return string|null The time parameter if it exists, null otherwise.
+ */
+ public function getTime()
+ {
+ if (array_key_exists('time', $this->_params)) {
+ return $this->_params['time'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return the value of the orderby parameter if it exists
+ *
+ * @return string|null The value of orderby if it exists, null otherwise.
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Generate the query string from the URL parameters, optionally modifying
+ * them based on protocol version.
+ *
+ * @param integer $majorProtocolVersion The major protocol version
+ * @param integer $minorProtocolVersion The minor protocol version
+ * @throws Zend_Gdata_App_VersionException
+ * @return string querystring
+ */
+ public function getQueryString($majorProtocolVersion = null,
+ $minorProtocolVersion = null)
+ {
+ $queryArray = array();
+
+ foreach ($this->_params as $name => $value) {
+ if (substr($name, 0, 1) == '_') {
+ continue;
+ }
+
+ switch($name) {
+ case 'location-radius':
+ if ($majorProtocolVersion == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is only supported in version 2.");
+ }
+ break;
+
+ case 'racy':
+ if ($majorProtocolVersion == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is not supported in version 2. " .
+ "Please use 'safeSearch'.");
+ }
+ break;
+
+ case 'safeSearch':
+ if ($majorProtocolVersion == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is only supported in version 2. " .
+ "Please use 'racy'.");
+ }
+ break;
+
+ case 'uploader':
+ if ($majorProtocolVersion == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is only supported in version 2.");
+ }
+ break;
+
+ case 'vq':
+ if ($majorProtocolVersion == 2) {
+ $name = 'q';
+ }
+ break;
+ }
+
+ $queryArray[] = urlencode($name) . '=' . urlencode($value);
+
+ }
+ if (count($queryArray) > 0) {
+ return '?' . implode('&', $queryArray);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Returns the generated full query URL, optionally modifying it based on
+ * the protocol version.
+ *
+ * @param integer $majorProtocolVersion The major protocol version
+ * @param integer $minorProtocolVersion The minor protocol version
+ * @return string The URL
+ */
+ public function getQueryUrl($majorProtocolVersion = null,
+ $minorProtocolVersion = null)
+ {
+ if (isset($this->_url)) {
+ $url = $this->_url;
+ } else {
+ $url = Zend_Gdata_YouTube::VIDEO_URI;
+ }
+ if ($this->getCategory() !== null) {
+ $url .= '/-/' . $this->getCategory();
+ }
+ $url = $url . $this->getQueryString($majorProtocolVersion,
+ $minorProtocolVersion);
+ return $url;
+ }
+
+}
diff --git a/Zend/Http/Client.php b/Zend/Http/Client.php
new file mode 100644
index 00000000..7627a638
--- /dev/null
+++ b/Zend/Http/Client.php
@@ -0,0 +1,1453 @@
+ 5,
+ 'strictredirects' => false,
+ 'useragent' => 'Zend_Http_Client',
+ 'timeout' => 10,
+ 'adapter' => 'Zend_Http_Client_Adapter_Socket',
+ 'httpversion' => self::HTTP_1,
+ 'keepalive' => false,
+ 'storeresponse' => true,
+ 'strict' => true,
+ 'output_stream' => false,
+ 'encodecookies' => true,
+ );
+
+ /**
+ * The adapter used to preform the actual connection to the server
+ *
+ * @var Zend_Http_Client_Adapter_Interface
+ */
+ protected $adapter = null;
+
+ /**
+ * Request URI
+ *
+ * @var Zend_Uri_Http
+ */
+ protected $uri = null;
+
+ /**
+ * Associative array of request headers
+ *
+ * @var array
+ */
+ protected $headers = array();
+
+ /**
+ * HTTP request method
+ *
+ * @var string
+ */
+ protected $method = self::GET;
+
+ /**
+ * Associative array of GET parameters
+ *
+ * @var array
+ */
+ protected $paramsGet = array();
+
+ /**
+ * Assiciative array of POST parameters
+ *
+ * @var array
+ */
+ protected $paramsPost = array();
+
+ /**
+ * Request body content type (for POST requests)
+ *
+ * @var string
+ */
+ protected $enctype = null;
+
+ /**
+ * The raw post data to send. Could be set by setRawData($data, $enctype).
+ *
+ * @var string
+ */
+ protected $raw_post_data = null;
+
+ /**
+ * HTTP Authentication settings
+ *
+ * Expected to be an associative array with this structure:
+ * $this->auth = array('user' => 'username', 'password' => 'password', 'type' => 'basic')
+ * Where 'type' should be one of the supported authentication types (see the AUTH_*
+ * constants), for example 'basic' or 'digest'.
+ *
+ * If null, no authentication will be used.
+ *
+ * @var array|null
+ */
+ protected $auth;
+
+ /**
+ * File upload arrays (used in POST requests)
+ *
+ * An associative array, where each element is of the format:
+ * 'name' => array('filename.txt', 'text/plain', 'This is the actual file contents')
+ *
+ * @var array
+ */
+ protected $files = array();
+
+ /**
+ * The client's cookie jar
+ *
+ * @var Zend_Http_CookieJar
+ */
+ protected $cookiejar = null;
+
+ /**
+ * The last HTTP request sent by the client, as string
+ *
+ * @var string
+ */
+ protected $last_request = null;
+
+ /**
+ * The last HTTP response received by the client
+ *
+ * @var Zend_Http_Response
+ */
+ protected $last_response = null;
+
+ /**
+ * Redirection counter
+ *
+ * @var int
+ */
+ protected $redirectCounter = 0;
+
+ /**
+ * Fileinfo magic database resource
+ *
+ * This varaiable is populated the first time _detectFileMimeType is called
+ * and is then reused on every call to this method
+ *
+ * @var resource
+ */
+ static protected $_fileInfoDb = null;
+
+ /**
+ * Contructor method. Will create a new HTTP client. Accepts the target
+ * URL and optionally configuration array.
+ *
+ * @param Zend_Uri_Http|string $uri
+ * @param array $config Configuration key-value pairs.
+ */
+ public function __construct($uri = null, $config = null)
+ {
+ if ($uri !== null) {
+ $this->setUri($uri);
+ }
+ if ($config !== null) {
+ $this->setConfig($config);
+ }
+ }
+
+ /**
+ * Set the URI for the next request
+ *
+ * @param Zend_Uri_Http|string $uri
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setUri($uri)
+ {
+ if (is_string($uri)) {
+ $uri = Zend_Uri::factory($uri);
+ }
+
+ if (!$uri instanceof Zend_Uri_Http) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Passed parameter is not a valid HTTP URI.');
+ }
+
+ // Set auth if username and password has been specified in the uri
+ if ($uri->getUsername() && $uri->getPassword()) {
+ $this->setAuth($uri->getUsername(), $uri->getPassword());
+ }
+
+ // We have no ports, set the defaults
+ if (! $uri->getPort()) {
+ $uri->setPort(($uri->getScheme() == 'https' ? 443 : 80));
+ }
+
+ $this->uri = $uri;
+
+ return $this;
+ }
+
+ /**
+ * Get the URI for the next request
+ *
+ * @param boolean $as_string If true, will return the URI as a string
+ * @return Zend_Uri_Http|string
+ */
+ public function getUri($as_string = false)
+ {
+ if ($as_string && $this->uri instanceof Zend_Uri_Http) {
+ return $this->uri->__toString();
+ } else {
+ return $this->uri;
+ }
+ }
+
+ /**
+ * Set configuration parameters for this HTTP client
+ *
+ * @param Zend_Config | array $config
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Array or Zend_Config object expected, got ' . gettype($config));
+ }
+
+ foreach ($config as $k => $v) {
+ $this->config[strtolower($k)] = $v;
+ }
+
+ // Pass configuration options to the adapter if it exists
+ if ($this->adapter instanceof Zend_Http_Client_Adapter_Interface) {
+ $this->adapter->setConfig($config);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the next request's method
+ *
+ * Validated the passed method and sets it. If we have files set for
+ * POST requests, and the new method is not POST, the files are silently
+ * dropped.
+ *
+ * @param string $method
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setMethod($method = self::GET)
+ {
+ if (! preg_match('/^[^\x00-\x1f\x7f-\xff\(\)<>@,;:\\\\"\/\[\]\?={}\s]+$/', $method)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("'{$method}' is not a valid HTTP request method.");
+ }
+
+ if ($method == self::POST && $this->enctype === null) {
+ $this->setEncType(self::ENC_URLENCODED);
+ }
+
+ $this->method = $method;
+
+ return $this;
+ }
+
+ /**
+ * Set one or more request headers
+ *
+ * This function can be used in several ways to set the client's request
+ * headers:
+ * 1. By providing two parameters: $name as the header to set (eg. 'Host')
+ * and $value as it's value (eg. 'www.example.com').
+ * 2. By providing a single header string as the only parameter
+ * eg. 'Host: www.example.com'
+ * 3. By providing an array of headers as the first parameter
+ * eg. array('host' => 'www.example.com', 'x-foo: bar'). In This case
+ * the function will call itself recursively for each array item.
+ *
+ * @param string|array $name Header name, full header string ('Header: value')
+ * or an array of headers
+ * @param mixed $value Header value or null
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setHeaders($name, $value = null)
+ {
+ // If we got an array, go recusive!
+ if (is_array($name)) {
+ foreach ($name as $k => $v) {
+ if (is_string($k)) {
+ $this->setHeaders($k, $v);
+ } else {
+ $this->setHeaders($v, null);
+ }
+ }
+ } else {
+ // Check if $name needs to be split
+ if ($value === null && (strpos($name, ':') > 0)) {
+ list($name, $value) = explode(':', $name, 2);
+ }
+
+ // Make sure the name is valid if we are in strict mode
+ if ($this->config['strict'] && (! preg_match('/^[a-zA-Z0-9-]+$/', $name))) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("{$name} is not a valid HTTP header name");
+ }
+
+ $normalized_name = strtolower($name);
+
+ // If $value is null or false, unset the header
+ if ($value === null || $value === false) {
+ unset($this->headers[$normalized_name]);
+
+ // Else, set the header
+ } else {
+ // Header names are stored lowercase internally.
+ if (is_string($value)) {
+ $value = trim($value);
+ }
+ $this->headers[$normalized_name] = array($name, $value);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the value of a specific header
+ *
+ * Note that if the header has more than one value, an array
+ * will be returned.
+ *
+ * @param string $key
+ * @return string|array|null The header value or null if it is not set
+ */
+ public function getHeader($key)
+ {
+ $key = strtolower($key);
+ if (isset($this->headers[$key])) {
+ return $this->headers[$key][1];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set a GET parameter for the request. Wrapper around _setParameter
+ *
+ * @param string|array $name
+ * @param string $value
+ * @return Zend_Http_Client
+ */
+ public function setParameterGet($name, $value = null)
+ {
+ if (is_array($name)) {
+ foreach ($name as $k => $v)
+ $this->_setParameter('GET', $k, $v);
+ } else {
+ $this->_setParameter('GET', $name, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set a POST parameter for the request. Wrapper around _setParameter
+ *
+ * @param string|array $name
+ * @param string $value
+ * @return Zend_Http_Client
+ */
+ public function setParameterPost($name, $value = null)
+ {
+ if (is_array($name)) {
+ foreach ($name as $k => $v)
+ $this->_setParameter('POST', $k, $v);
+ } else {
+ $this->_setParameter('POST', $name, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set a GET or POST parameter - used by SetParameterGet and SetParameterPost
+ *
+ * @param string $type GET or POST
+ * @param string $name
+ * @param string $value
+ * @return null
+ */
+ protected function _setParameter($type, $name, $value)
+ {
+ $parray = array();
+ $type = strtolower($type);
+ switch ($type) {
+ case 'get':
+ $parray = &$this->paramsGet;
+ break;
+ case 'post':
+ $parray = &$this->paramsPost;
+ break;
+ }
+
+ if ($value === null) {
+ if (isset($parray[$name])) unset($parray[$name]);
+ } else {
+ $parray[$name] = $value;
+ }
+ }
+
+ /**
+ * Get the number of redirections done on the last request
+ *
+ * @return int
+ */
+ public function getRedirectionsCount()
+ {
+ return $this->redirectCounter;
+ }
+
+ /**
+ * Set HTTP authentication parameters
+ *
+ * $type should be one of the supported types - see the self::AUTH_*
+ * constants.
+ *
+ * To enable authentication:
+ *
+ * $this->setAuth('shahar', 'secret', Zend_Http_Client::AUTH_BASIC);
+ *
+ *
+ * To disable authentication:
+ *
+ * $this->setAuth(false);
+ *
+ *
+ * @see http://www.faqs.org/rfcs/rfc2617.html
+ * @param string|false $user User name or false disable authentication
+ * @param string $password Password
+ * @param string $type Authentication type
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setAuth($user, $password = '', $type = self::AUTH_BASIC)
+ {
+ // If we got false or null, disable authentication
+ if ($user === false || $user === null) {
+ $this->auth = null;
+
+ // Clear the auth information in the uri instance as well
+ if ($this->uri instanceof Zend_Uri_Http) {
+ $this->getUri()->setUsername('');
+ $this->getUri()->setPassword('');
+ }
+ // Else, set up authentication
+ } else {
+ // Check we got a proper authentication type
+ if (! defined('self::AUTH_' . strtoupper($type))) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Invalid or not supported authentication type: '$type'");
+ }
+
+ $this->auth = array(
+ 'user' => (string) $user,
+ 'password' => (string) $password,
+ 'type' => $type
+ );
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the HTTP client's cookie jar.
+ *
+ * A cookie jar is an object that holds and maintains cookies across HTTP requests
+ * and responses.
+ *
+ * @param Zend_Http_CookieJar|boolean $cookiejar Existing cookiejar object, true to create a new one, false to disable
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setCookieJar($cookiejar = true)
+ {
+ Zend_Loader::loadClass('Zend_Http_CookieJar');
+
+ if ($cookiejar instanceof Zend_Http_CookieJar) {
+ $this->cookiejar = $cookiejar;
+ } elseif ($cookiejar === true) {
+ $this->cookiejar = new Zend_Http_CookieJar();
+ } elseif (! $cookiejar) {
+ $this->cookiejar = null;
+ } else {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Invalid parameter type passed as CookieJar');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Return the current cookie jar or null if none.
+ *
+ * @return Zend_Http_CookieJar|null
+ */
+ public function getCookieJar()
+ {
+ return $this->cookiejar;
+ }
+
+ /**
+ * Add a cookie to the request. If the client has no Cookie Jar, the cookies
+ * will be added directly to the headers array as "Cookie" headers.
+ *
+ * @param Zend_Http_Cookie|string $cookie
+ * @param string|null $value If "cookie" is a string, this is the cookie value.
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setCookie($cookie, $value = null)
+ {
+ Zend_Loader::loadClass('Zend_Http_Cookie');
+
+ if (is_array($cookie)) {
+ foreach ($cookie as $c => $v) {
+ if (is_string($c)) {
+ $this->setCookie($c, $v);
+ } else {
+ $this->setCookie($v);
+ }
+ }
+
+ return $this;
+ }
+
+ if ($value !== null && $this->config['encodecookies']) {
+ $value = urlencode($value);
+ }
+
+ if (isset($this->cookiejar)) {
+ if ($cookie instanceof Zend_Http_Cookie) {
+ $this->cookiejar->addCookie($cookie);
+ } elseif (is_string($cookie) && $value !== null) {
+ $cookie = Zend_Http_Cookie::fromString("{$cookie}={$value}",
+ $this->uri,
+ $this->config['encodecookies']);
+ $this->cookiejar->addCookie($cookie);
+ }
+ } else {
+ if ($cookie instanceof Zend_Http_Cookie) {
+ $name = $cookie->getName();
+ $value = $cookie->getValue();
+ $cookie = $name;
+ }
+
+ if (preg_match("/[=,; \t\r\n\013\014]/", $cookie)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Cookie name cannot contain these characters: =,; \t\r\n\013\014 ({$cookie})");
+ }
+
+ $value = addslashes($value);
+
+ if (! isset($this->headers['cookie'])) {
+ $this->headers['cookie'] = array('Cookie', '');
+ }
+ $this->headers['cookie'][1] .= $cookie . '=' . $value . '; ';
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set a file to upload (using a POST request)
+ *
+ * Can be used in two ways:
+ *
+ * 1. $data is null (default): $filename is treated as the name if a local file which
+ * will be read and sent. Will try to guess the content type using mime_content_type().
+ * 2. $data is set - $filename is sent as the file name, but $data is sent as the file
+ * contents and no file is read from the file system. In this case, you need to
+ * manually set the Content-Type ($ctype) or it will default to
+ * application/octet-stream.
+ *
+ * @param string $filename Name of file to upload, or name to save as
+ * @param string $formname Name of form element to send as
+ * @param string $data Data to send (if null, $filename is read and sent)
+ * @param string $ctype Content type to use (if $data is set and $ctype is
+ * null, will be application/octet-stream)
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setFileUpload($filename, $formname, $data = null, $ctype = null)
+ {
+ if ($data === null) {
+ if (($data = @file_get_contents($filename)) === false) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Unable to read file '{$filename}' for upload");
+ }
+
+ if (! $ctype) {
+ $ctype = $this->_detectFileMimeType($filename);
+ }
+ }
+
+ // Force enctype to multipart/form-data
+ $this->setEncType(self::ENC_FORMDATA);
+
+ $this->files[] = array(
+ 'formname' => $formname,
+ 'filename' => basename($filename),
+ 'ctype' => $ctype,
+ 'data' => $data
+ );
+
+ return $this;
+ }
+
+ /**
+ * Set the encoding type for POST data
+ *
+ * @param string $enctype
+ * @return Zend_Http_Client
+ */
+ public function setEncType($enctype = self::ENC_URLENCODED)
+ {
+ $this->enctype = $enctype;
+
+ return $this;
+ }
+
+ /**
+ * Set the raw (already encoded) POST data.
+ *
+ * This function is here for two reasons:
+ * 1. For advanced user who would like to set their own data, already encoded
+ * 2. For backwards compatibilty: If someone uses the old post($data) method.
+ * this method will be used to set the encoded data.
+ *
+ * $data can also be stream (such as file) from which the data will be read.
+ *
+ * @param string|resource $data
+ * @param string $enctype
+ * @return Zend_Http_Client
+ */
+ public function setRawData($data, $enctype = null)
+ {
+ $this->raw_post_data = $data;
+ $this->setEncType($enctype);
+ if (is_resource($data)) {
+ // We've got stream data
+ $stat = @fstat($data);
+ if($stat) {
+ $this->setHeaders(self::CONTENT_LENGTH, $stat['size']);
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Clear all GET and POST parameters
+ *
+ * Should be used to reset the request parameters if the client is
+ * used for several concurrent requests.
+ *
+ * clearAll parameter controls if we clean just parameters or also
+ * headers and last_*
+ *
+ * @param bool $clearAll Should all data be cleared?
+ * @return Zend_Http_Client
+ */
+ public function resetParameters($clearAll = false)
+ {
+ // Reset parameter data
+ $this->paramsGet = array();
+ $this->paramsPost = array();
+ $this->files = array();
+ $this->raw_post_data = null;
+
+ if($clearAll) {
+ $this->headers = array();
+ $this->last_request = null;
+ $this->last_response = null;
+ } else {
+ // Clear outdated headers
+ if (isset($this->headers[strtolower(self::CONTENT_TYPE)])) {
+ unset($this->headers[strtolower(self::CONTENT_TYPE)]);
+ }
+ if (isset($this->headers[strtolower(self::CONTENT_LENGTH)])) {
+ unset($this->headers[strtolower(self::CONTENT_LENGTH)]);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the last HTTP request as string
+ *
+ * @return string
+ */
+ public function getLastRequest()
+ {
+ return $this->last_request;
+ }
+
+ /**
+ * Get the last HTTP response received by this client
+ *
+ * If $config['storeresponse'] is set to false, or no response was
+ * stored yet, will return null
+ *
+ * @return Zend_Http_Response or null if none
+ */
+ public function getLastResponse()
+ {
+ return $this->last_response;
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * While this method is not called more than one for a client, it is
+ * seperated from ->request() to preserve logic and readability
+ *
+ * @param Zend_Http_Client_Adapter_Interface|string $adapter
+ * @return null
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setAdapter($adapter)
+ {
+ if (is_string($adapter)) {
+ try {
+ Zend_Loader::loadClass($adapter);
+ } catch (Zend_Exception $e) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Unable to load adapter '$adapter': {$e->getMessage()}", 0, $e);
+ }
+
+ $adapter = new $adapter;
+ }
+
+ if (! $adapter instanceof Zend_Http_Client_Adapter_Interface) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Passed adapter is not a HTTP connection adapter');
+ }
+
+ $this->adapter = $adapter;
+ $config = $this->config;
+ unset($config['adapter']);
+ $this->adapter->setConfig($config);
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * @return Zend_Http_Client_Adapter_Interface $adapter
+ */
+ public function getAdapter()
+ {
+ return $this->adapter;
+ }
+
+ /**
+ * Set streaming for received data
+ *
+ * @param string|boolean $streamfile Stream file, true for temp file, false/null for no streaming
+ * @return Zend_Http_Client
+ */
+ public function setStream($streamfile = true)
+ {
+ $this->setConfig(array("output_stream" => $streamfile));
+ return $this;
+ }
+
+ /**
+ * Get status of streaming for received data
+ * @return boolean|string
+ */
+ public function getStream()
+ {
+ return $this->config["output_stream"];
+ }
+
+ /**
+ * Create temporary stream
+ *
+ * @return resource
+ */
+ protected function _openTempStream()
+ {
+ $this->_stream_name = $this->config['output_stream'];
+ if(!is_string($this->_stream_name)) {
+ // If name is not given, create temp name
+ $this->_stream_name = tempnam(isset($this->config['stream_tmp_dir'])?$this->config['stream_tmp_dir']:sys_get_temp_dir(),
+ 'Zend_Http_Client');
+ }
+
+ if (false === ($fp = @fopen($this->_stream_name, "w+b"))) {
+ if ($this->adapter instanceof Zend_Http_Client_Adapter_Interface) {
+ $this->adapter->close();
+ }
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Could not open temp file {$this->_stream_name}");
+ }
+
+ return $fp;
+ }
+
+ /**
+ * Send the HTTP request and return an HTTP response object
+ *
+ * @param string $method
+ * @return Zend_Http_Response
+ * @throws Zend_Http_Client_Exception
+ */
+ public function request($method = null)
+ {
+ if (! $this->uri instanceof Zend_Uri_Http) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('No valid URI has been passed to the client');
+ }
+
+ if ($method) {
+ $this->setMethod($method);
+ }
+ $this->redirectCounter = 0;
+ $response = null;
+
+ // Make sure the adapter is loaded
+ if ($this->adapter == null) {
+ $this->setAdapter($this->config['adapter']);
+ }
+
+ // Send the first request. If redirected, continue.
+ do {
+ // Clone the URI and add the additional GET parameters to it
+ $uri = clone $this->uri;
+ if (! empty($this->paramsGet)) {
+ $query = $uri->getQuery();
+ if (! empty($query)) {
+ $query .= '&';
+ }
+ $query .= http_build_query($this->paramsGet, null, '&');
+
+ $uri->setQuery($query);
+ }
+
+ $body = $this->_prepareBody();
+ $headers = $this->_prepareHeaders();
+
+ // check that adapter supports streaming before using it
+ if(is_resource($body) && !($this->adapter instanceof Zend_Http_Client_Adapter_Stream)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Adapter does not support streaming');
+ }
+
+ // Open the connection, send the request and read the response
+ $this->adapter->connect($uri->getHost(), $uri->getPort(),
+ ($uri->getScheme() == 'https' ? true : false));
+
+ if($this->config['output_stream']) {
+ if($this->adapter instanceof Zend_Http_Client_Adapter_Stream) {
+ $stream = $this->_openTempStream();
+ $this->adapter->setOutputStream($stream);
+ } else {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Adapter does not support streaming');
+ }
+ }
+
+ $this->last_request = $this->adapter->write($this->method,
+ $uri, $this->config['httpversion'], $headers, $body);
+
+ $response = $this->adapter->read();
+ if (! $response) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Unable to read response, or response is empty');
+ }
+
+ if($this->config['output_stream']) {
+ rewind($stream);
+ // cleanup the adapter
+ $this->adapter->setOutputStream(null);
+ $response = Zend_Http_Response_Stream::fromStream($response, $stream);
+ $response->setStreamName($this->_stream_name);
+ if(!is_string($this->config['output_stream'])) {
+ // we used temp name, will need to clean up
+ $response->setCleanup(true);
+ }
+ } else {
+ $response = Zend_Http_Response::fromString($response);
+ }
+
+ if ($this->config['storeresponse']) {
+ $this->last_response = $response;
+ }
+
+ // Load cookies into cookie jar
+ if (isset($this->cookiejar)) {
+ $this->cookiejar->addCookiesFromResponse($response, $uri);
+ }
+
+ // If we got redirected, look for the Location header
+ if ($response->isRedirect() && ($location = $response->getHeader('location'))) {
+
+ // Check whether we send the exact same request again, or drop the parameters
+ // and send a GET request
+ if ($response->getStatus() == 303 ||
+ ((! $this->config['strictredirects']) && ($response->getStatus() == 302 ||
+ $response->getStatus() == 301))) {
+
+ $this->resetParameters();
+ $this->setMethod(self::GET);
+ }
+
+ // If we got a well formed absolute URI
+ if (Zend_Uri_Http::check($location)) {
+ $this->setHeaders('host', null);
+ $this->setUri($location);
+
+ } else {
+
+ // Split into path and query and set the query
+ if (strpos($location, '?') !== false) {
+ list($location, $query) = explode('?', $location, 2);
+ } else {
+ $query = '';
+ }
+ $this->uri->setQuery($query);
+
+ // Else, if we got just an absolute path, set it
+ if(strpos($location, '/') === 0) {
+ $this->uri->setPath($location);
+
+ // Else, assume we have a relative path
+ } else {
+ // Get the current path directory, removing any trailing slashes
+ $path = $this->uri->getPath();
+ $path = rtrim(substr($path, 0, strrpos($path, '/')), "/");
+ $this->uri->setPath($path . '/' . $location);
+ }
+ }
+ ++$this->redirectCounter;
+
+ } else {
+ // If we didn't get any location, stop redirecting
+ break;
+ }
+
+ } while ($this->redirectCounter < $this->config['maxredirects']);
+
+ return $response;
+ }
+
+ /**
+ * Prepare the request headers
+ *
+ * @return array
+ */
+ protected function _prepareHeaders()
+ {
+ $headers = array();
+
+ // Set the host header
+ if (! isset($this->headers['host'])) {
+ $host = $this->uri->getHost();
+
+ // If the port is not default, add it
+ if (! (($this->uri->getScheme() == 'http' && $this->uri->getPort() == 80) ||
+ ($this->uri->getScheme() == 'https' && $this->uri->getPort() == 443))) {
+ $host .= ':' . $this->uri->getPort();
+ }
+
+ $headers[] = "Host: {$host}";
+ }
+
+ // Set the connection header
+ if (! isset($this->headers['connection'])) {
+ if (! $this->config['keepalive']) {
+ $headers[] = "Connection: close";
+ }
+ }
+
+ // Set the Accept-encoding header if not set - depending on whether
+ // zlib is available or not.
+ if (! isset($this->headers['accept-encoding'])) {
+ if (function_exists('gzinflate')) {
+ $headers[] = 'Accept-encoding: gzip, deflate';
+ } else {
+ $headers[] = 'Accept-encoding: identity';
+ }
+ }
+
+ // Set the Content-Type header
+ if ($this->method == self::POST &&
+ (! isset($this->headers[strtolower(self::CONTENT_TYPE)]) && isset($this->enctype))) {
+
+ $headers[] = self::CONTENT_TYPE . ': ' . $this->enctype;
+ }
+
+ // Set the user agent header
+ if (! isset($this->headers['user-agent']) && isset($this->config['useragent'])) {
+ $headers[] = "User-Agent: {$this->config['useragent']}";
+ }
+
+ // Set HTTP authentication if needed
+ if (is_array($this->auth)) {
+ $auth = self::encodeAuthHeader($this->auth['user'], $this->auth['password'], $this->auth['type']);
+ $headers[] = "Authorization: {$auth}";
+ }
+
+ // Load cookies from cookie jar
+ if (isset($this->cookiejar)) {
+ $cookstr = $this->cookiejar->getMatchingCookies($this->uri,
+ true, Zend_Http_CookieJar::COOKIE_STRING_CONCAT);
+
+ if ($cookstr) {
+ $headers[] = "Cookie: {$cookstr}";
+ }
+ }
+
+ // Add all other user defined headers
+ foreach ($this->headers as $header) {
+ list($name, $value) = $header;
+ if (is_array($value)) {
+ $value = implode(', ', $value);
+ }
+
+ $headers[] = "$name: $value";
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Prepare the request body (for POST and PUT requests)
+ *
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ protected function _prepareBody()
+ {
+ // According to RFC2616, a TRACE request should not have a body.
+ if ($this->method == self::TRACE) {
+ return '';
+ }
+
+ if (isset($this->raw_post_data) && is_resource($this->raw_post_data)) {
+ return $this->raw_post_data;
+ }
+ // If mbstring overloads substr and strlen functions, we have to
+ // override it's internal encoding
+ if (function_exists('mb_internal_encoding') &&
+ ((int) ini_get('mbstring.func_overload')) & 2) {
+
+ $mbIntEnc = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+
+ // If we have raw_post_data set, just use it as the body.
+ if (isset($this->raw_post_data)) {
+ $this->setHeaders(self::CONTENT_LENGTH, strlen($this->raw_post_data));
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ return $this->raw_post_data;
+ }
+
+ $body = '';
+
+ // If we have files to upload, force enctype to multipart/form-data
+ if (count ($this->files) > 0) {
+ $this->setEncType(self::ENC_FORMDATA);
+ }
+
+ // If we have POST parameters or files, encode and add them to the body
+ if (count($this->paramsPost) > 0 || count($this->files) > 0) {
+ switch($this->enctype) {
+ case self::ENC_FORMDATA:
+ // Encode body as multipart/form-data
+ $boundary = '---ZENDHTTPCLIENT-' . md5(microtime());
+ $this->setHeaders(self::CONTENT_TYPE, self::ENC_FORMDATA . "; boundary={$boundary}");
+
+ // Get POST parameters and encode them
+ $params = self::_flattenParametersArray($this->paramsPost);
+ foreach ($params as $pp) {
+ $body .= self::encodeFormData($boundary, $pp[0], $pp[1]);
+ }
+
+ // Encode files
+ foreach ($this->files as $file) {
+ $fhead = array(self::CONTENT_TYPE => $file['ctype']);
+ $body .= self::encodeFormData($boundary, $file['formname'], $file['data'], $file['filename'], $fhead);
+ }
+
+ $body .= "--{$boundary}--\r\n";
+ break;
+
+ case self::ENC_URLENCODED:
+ // Encode body as application/x-www-form-urlencoded
+ $this->setHeaders(self::CONTENT_TYPE, self::ENC_URLENCODED);
+ $body = http_build_query($this->paramsPost, '', '&');
+ break;
+
+ default:
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Cannot handle content type '{$this->enctype}' automatically." .
+ " Please use Zend_Http_Client::setRawData to send this kind of content.");
+ break;
+ }
+ }
+
+ // Set the Content-Length if we have a body or if request is POST/PUT
+ if ($body || $this->method == self::POST || $this->method == self::PUT) {
+ $this->setHeaders(self::CONTENT_LENGTH, strlen($body));
+ }
+
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ return $body;
+ }
+
+ /**
+ * Helper method that gets a possibly multi-level parameters array (get or
+ * post) and flattens it.
+ *
+ * The method returns an array of (key, value) pairs (because keys are not
+ * necessarily unique. If one of the parameters in as array, it will also
+ * add a [] suffix to the key.
+ *
+ * This method is deprecated since Zend Framework 1.9 in favour of
+ * self::_flattenParametersArray() and will be dropped in 2.0
+ *
+ * @deprecated since 1.9
+ *
+ * @param array $parray The parameters array
+ * @param bool $urlencode Whether to urlencode the name and value
+ * @return array
+ */
+ protected function _getParametersRecursive($parray, $urlencode = false)
+ {
+ // Issue a deprecated notice
+ trigger_error("The " . __METHOD__ . " method is deprecated and will be dropped in 2.0.",
+ E_USER_NOTICE);
+
+ if (! is_array($parray)) {
+ return $parray;
+ }
+ $parameters = array();
+
+ foreach ($parray as $name => $value) {
+ if ($urlencode) {
+ $name = urlencode($name);
+ }
+
+ // If $value is an array, iterate over it
+ if (is_array($value)) {
+ $name .= ($urlencode ? '%5B%5D' : '[]');
+ foreach ($value as $subval) {
+ if ($urlencode) {
+ $subval = urlencode($subval);
+ }
+ $parameters[] = array($name, $subval);
+ }
+ } else {
+ if ($urlencode) {
+ $value = urlencode($value);
+ }
+ $parameters[] = array($name, $value);
+ }
+ }
+
+ return $parameters;
+ }
+
+ /**
+ * Attempt to detect the MIME type of a file using available extensions
+ *
+ * This method will try to detect the MIME type of a file. If the fileinfo
+ * extension is available, it will be used. If not, the mime_magic
+ * extension which is deprected but is still available in many PHP setups
+ * will be tried.
+ *
+ * If neither extension is available, the default application/octet-stream
+ * MIME type will be returned
+ *
+ * @param string $file File path
+ * @return string MIME type
+ */
+ protected function _detectFileMimeType($file)
+ {
+ $type = null;
+
+ // First try with fileinfo functions
+ if (function_exists('finfo_open')) {
+ if (self::$_fileInfoDb === null) {
+ self::$_fileInfoDb = @finfo_open(FILEINFO_MIME);
+ }
+
+ if (self::$_fileInfoDb) {
+ $type = finfo_file(self::$_fileInfoDb, $file);
+ }
+
+ } elseif (function_exists('mime_content_type')) {
+ $type = mime_content_type($file);
+ }
+
+ // Fallback to the default application/octet-stream
+ if (! $type) {
+ $type = 'application/octet-stream';
+ }
+
+ return $type;
+ }
+
+ /**
+ * Encode data to a multipart/form-data part suitable for a POST request.
+ *
+ * @param string $boundary
+ * @param string $name
+ * @param mixed $value
+ * @param string $filename
+ * @param array $headers Associative array of optional headers @example ("Content-Transfer-Encoding" => "binary")
+ * @return string
+ */
+ public static function encodeFormData($boundary, $name, $value, $filename = null, $headers = array()) {
+ $ret = "--{$boundary}\r\n" .
+ 'Content-Disposition: form-data; name="' . $name .'"';
+
+ if ($filename) {
+ $ret .= '; filename="' . $filename . '"';
+ }
+ $ret .= "\r\n";
+
+ foreach ($headers as $hname => $hvalue) {
+ $ret .= "{$hname}: {$hvalue}\r\n";
+ }
+ $ret .= "\r\n";
+
+ $ret .= "{$value}\r\n";
+
+ return $ret;
+ }
+
+ /**
+ * Create a HTTP authentication "Authorization:" header according to the
+ * specified user, password and authentication method.
+ *
+ * @see http://www.faqs.org/rfcs/rfc2617.html
+ * @param string $user
+ * @param string $password
+ * @param string $type
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ public static function encodeAuthHeader($user, $password, $type = self::AUTH_BASIC)
+ {
+ $authHeader = null;
+
+ switch ($type) {
+ case self::AUTH_BASIC:
+ // In basic authentication, the user name cannot contain ":"
+ if (strpos($user, ':') !== false) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("The user name cannot contain ':' in 'Basic' HTTP authentication");
+ }
+
+ $authHeader = 'Basic ' . base64_encode($user . ':' . $password);
+ break;
+
+ //case self::AUTH_DIGEST:
+ /**
+ * @todo Implement digest authentication
+ */
+ // break;
+
+ default:
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Not a supported HTTP authentication type: '$type'");
+ }
+
+ return $authHeader;
+ }
+
+ /**
+ * Convert an array of parameters into a flat array of (key, value) pairs
+ *
+ * Will flatten a potentially multi-dimentional array of parameters (such
+ * as POST parameters) into a flat array of (key, value) paris. In case
+ * of multi-dimentional arrays, square brackets ([]) will be added to the
+ * key to indicate an array.
+ *
+ * @since 1.9
+ *
+ * @param array $parray
+ * @param string $prefix
+ * @return array
+ */
+ static protected function _flattenParametersArray($parray, $prefix = null)
+ {
+ if (! is_array($parray)) {
+ return $parray;
+ }
+
+ $parameters = array();
+
+ foreach($parray as $name => $value) {
+
+ // Calculate array key
+ if ($prefix) {
+ if (is_int($name)) {
+ $key = $prefix . '[]';
+ } else {
+ $key = $prefix . "[$name]";
+ }
+ } else {
+ $key = $name;
+ }
+
+ if (is_array($value)) {
+ $parameters = array_merge($parameters, self::_flattenParametersArray($value, $key));
+
+ } else {
+ $parameters[] = array($key, $value);
+ }
+ }
+
+ return $parameters;
+ }
+
+}
diff --git a/Zend/Http/Client/Adapter/Curl.php b/Zend/Http/Client/Adapter/Curl.php
new file mode 100644
index 00000000..617bc643
--- /dev/null
+++ b/Zend/Http/Client/Adapter/Curl.php
@@ -0,0 +1,507 @@
+_invalidOverwritableCurlOptions = array(
+ CURLOPT_HTTPGET,
+ CURLOPT_POST,
+ CURLOPT_PUT,
+ CURLOPT_CUSTOMREQUEST,
+ CURLOPT_HEADER,
+ CURLOPT_RETURNTRANSFER,
+ CURLOPT_HTTPHEADER,
+ CURLOPT_POSTFIELDS,
+ CURLOPT_INFILE,
+ CURLOPT_INFILESIZE,
+ CURLOPT_PORT,
+ CURLOPT_MAXREDIRS,
+ CURLOPT_CONNECTTIMEOUT,
+ CURL_HTTP_VERSION_1_1,
+ CURL_HTTP_VERSION_1_0,
+ );
+ }
+
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @throws Zend_Http_Client_Adapter_Exception
+ * @param Zend_Config | array $config
+ * @return Zend_Http_Client_Adapter_Curl
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Array or Zend_Config object expected, got ' . gettype($config)
+ );
+ }
+
+ if(isset($config['proxy_user']) && isset($config['proxy_pass'])) {
+ $this->setCurlOption(CURLOPT_PROXYUSERPWD, $config['proxy_user'].":".$config['proxy_pass']);
+ unset($config['proxy_user'], $config['proxy_pass']);
+ }
+
+ foreach ($config as $k => $v) {
+ $option = strtolower($k);
+ switch($option) {
+ case 'proxy_host':
+ $this->setCurlOption(CURLOPT_PROXY, $v);
+ break;
+ case 'proxy_port':
+ $this->setCurlOption(CURLOPT_PROXYPORT, $v);
+ break;
+ default:
+ $this->_config[$option] = $v;
+ break;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Retrieve the array of all configuration options
+ *
+ * @return array
+ */
+ public function getConfig()
+ {
+ return $this->_config;
+ }
+
+ /**
+ * Direct setter for cURL adapter related options.
+ *
+ * @param string|int $option
+ * @param mixed $value
+ * @return Zend_Http_Adapter_Curl
+ */
+ public function setCurlOption($option, $value)
+ {
+ if (!isset($this->_config['curloptions'])) {
+ $this->_config['curloptions'] = array();
+ }
+ $this->_config['curloptions'][$option] = $value;
+ return $this;
+ }
+
+ /**
+ * Initialize curl
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ * @return void
+ * @throws Zend_Http_Client_Adapter_Exception if unable to connect
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ // If we're already connected, disconnect first
+ if ($this->_curl) {
+ $this->close();
+ }
+
+ // If we are connected to a different server or port, disconnect first
+ if ($this->_curl
+ && is_array($this->_connected_to)
+ && ($this->_connected_to[0] != $host
+ || $this->_connected_to[1] != $port)
+ ) {
+ $this->close();
+ }
+
+ // Do the actual connection
+ $this->_curl = curl_init();
+ if ($port != 80) {
+ curl_setopt($this->_curl, CURLOPT_PORT, intval($port));
+ }
+
+ // Set timeout
+ curl_setopt($this->_curl, CURLOPT_CONNECTTIMEOUT, $this->_config['timeout']);
+
+ // Set Max redirects
+ curl_setopt($this->_curl, CURLOPT_MAXREDIRS, $this->_config['maxredirects']);
+
+ if (!$this->_curl) {
+ $this->close();
+
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to Connect to ' . $host . ':' . $port);
+ }
+
+ if ($secure !== false) {
+ // Behave the same like Zend_Http_Adapter_Socket on SSL options.
+ if (isset($this->_config['sslcert'])) {
+ curl_setopt($this->_curl, CURLOPT_SSLCERT, $this->_config['sslcert']);
+ }
+ if (isset($this->_config['sslpassphrase'])) {
+ curl_setopt($this->_curl, CURLOPT_SSLCERTPASSWD, $this->_config['sslpassphrase']);
+ }
+ }
+
+ // Update connected_to
+ $this->_connected_to = array($host, $port);
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param float $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string $request
+ * @throws Zend_Http_Client_Adapter_Exception If connection fails, connected to wrong host, no PUT file defined, unsupported method, or unsupported cURL option
+ */
+ public function write($method, $uri, $httpVersion = 1.1, $headers = array(), $body = '')
+ {
+ // Make sure we're properly connected
+ if (!$this->_curl) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Trying to write but we are not connected");
+ }
+
+ if ($this->_connected_to[0] != $uri->getHost() || $this->_connected_to[1] != $uri->getPort()) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Trying to write but we are connected to the wrong host");
+ }
+
+ // set URL
+ curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
+
+ // ensure correct curl call
+ $curlValue = true;
+ switch ($method) {
+ case Zend_Http_Client::GET:
+ $curlMethod = CURLOPT_HTTPGET;
+ break;
+
+ case Zend_Http_Client::POST:
+ $curlMethod = CURLOPT_POST;
+ break;
+
+ case Zend_Http_Client::PUT:
+ // There are two different types of PUT request, either a Raw Data string has been set
+ // or CURLOPT_INFILE and CURLOPT_INFILESIZE are used.
+ if(is_resource($body)) {
+ $this->_config['curloptions'][CURLOPT_INFILE] = $body;
+ }
+ if (isset($this->_config['curloptions'][CURLOPT_INFILE])) {
+ // Now we will probably already have Content-Length set, so that we have to delete it
+ // from $headers at this point:
+ foreach ($headers AS $k => $header) {
+ if (preg_match('/Content-Length:\s*(\d+)/i', $header, $m)) {
+ if(is_resource($body)) {
+ $this->_config['curloptions'][CURLOPT_INFILESIZE] = (int)$m[1];
+ }
+ unset($headers[$k]);
+ }
+ }
+
+ if (!isset($this->_config['curloptions'][CURLOPT_INFILESIZE])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Cannot set a file-handle for cURL option CURLOPT_INFILE without also setting its size in CURLOPT_INFILESIZE.");
+ }
+
+ if(is_resource($body)) {
+ $body = '';
+ }
+
+ $curlMethod = CURLOPT_PUT;
+ } else {
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "PUT";
+ }
+ break;
+
+ case Zend_Http_Client::DELETE:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "DELETE";
+ break;
+
+ case Zend_Http_Client::OPTIONS:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "OPTIONS";
+ break;
+
+ case Zend_Http_Client::TRACE:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "TRACE";
+ break;
+
+ case Zend_Http_Client::HEAD:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "HEAD";
+ break;
+
+ default:
+ // For now, through an exception for unsupported request methods
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Method currently not supported");
+ }
+
+ if(is_resource($body) && $curlMethod != CURLOPT_PUT) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Streaming requests are allowed only with PUT");
+ }
+
+ // get http version to use
+ $curlHttp = ($httpVersion == 1.1) ? CURL_HTTP_VERSION_1_1 : CURL_HTTP_VERSION_1_0;
+
+ // mark as HTTP request and set HTTP method
+ curl_setopt($this->_curl, $curlHttp, true);
+ curl_setopt($this->_curl, $curlMethod, $curlValue);
+
+ if($this->out_stream) {
+ // headers will be read into the response
+ curl_setopt($this->_curl, CURLOPT_HEADER, false);
+ curl_setopt($this->_curl, CURLOPT_HEADERFUNCTION, array($this, "readHeader"));
+ // and data will be written into the file
+ curl_setopt($this->_curl, CURLOPT_FILE, $this->out_stream);
+ } else {
+ // ensure headers are also returned
+ curl_setopt($this->_curl, CURLOPT_HEADER, true);
+
+ // ensure actual response is returned
+ curl_setopt($this->_curl, CURLOPT_RETURNTRANSFER, true);
+ }
+
+ // set additional headers
+ $headers['Accept'] = '';
+ curl_setopt($this->_curl, CURLOPT_HTTPHEADER, $headers);
+
+ /**
+ * Make sure POSTFIELDS is set after $curlMethod is set:
+ * @link http://de2.php.net/manual/en/function.curl-setopt.php#81161
+ */
+ if ($method == Zend_Http_Client::POST) {
+ curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $body);
+ } elseif ($curlMethod == CURLOPT_PUT) {
+ // this covers a PUT by file-handle:
+ // Make the setting of this options explicit (rather than setting it through the loop following a bit lower)
+ // to group common functionality together.
+ curl_setopt($this->_curl, CURLOPT_INFILE, $this->_config['curloptions'][CURLOPT_INFILE]);
+ curl_setopt($this->_curl, CURLOPT_INFILESIZE, $this->_config['curloptions'][CURLOPT_INFILESIZE]);
+ unset($this->_config['curloptions'][CURLOPT_INFILE]);
+ unset($this->_config['curloptions'][CURLOPT_INFILESIZE]);
+ } elseif ($method == Zend_Http_Client::PUT) {
+ // This is a PUT by a setRawData string, not by file-handle
+ curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $body);
+ }
+
+ // set additional curl options
+ if (isset($this->_config['curloptions'])) {
+ foreach ((array)$this->_config['curloptions'] as $k => $v) {
+ if (!in_array($k, $this->_invalidOverwritableCurlOptions)) {
+ if (curl_setopt($this->_curl, $k, $v) == false) {
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception(sprintf("Unknown or erroreous cURL option '%s' set", $k));
+ }
+ }
+ }
+ }
+
+ // send the request
+ $response = curl_exec($this->_curl);
+
+ // if we used streaming, headers are already there
+ if(!is_resource($this->out_stream)) {
+ $this->_response = $response;
+ }
+
+ $request = curl_getinfo($this->_curl, CURLINFO_HEADER_OUT);
+ $request .= $body;
+
+ if (empty($this->_response)) {
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Error in cURL request: " . curl_error($this->_curl));
+ }
+
+ // cURL automatically decodes chunked-messages, this means we have to disallow the Zend_Http_Response to do it again
+ if (stripos($this->_response, "Transfer-Encoding: chunked\r\n")) {
+ $this->_response = str_ireplace("Transfer-Encoding: chunked\r\n", '', $this->_response);
+ }
+
+ // Eliminate multiple HTTP responses.
+ do {
+ $parts = preg_split('|(?:\r?\n){2}|m', $this->_response, 2);
+ $again = false;
+
+ if (isset($parts[1]) && preg_match("|^HTTP/1\.[01](.*?)\r\n|mi", $parts[1])) {
+ $this->_response = $parts[1];
+ $again = true;
+ }
+ } while ($again);
+
+ // cURL automatically handles Proxy rewrites, remove the "HTTP/1.0 200 Connection established" string:
+ if (stripos($this->_response, "HTTP/1.0 200 Connection established\r\n\r\n") !== false) {
+ $this->_response = str_ireplace("HTTP/1.0 200 Connection established\r\n\r\n", '', $this->_response);
+ }
+
+ return $request;
+ }
+
+ /**
+ * Return read response from server
+ *
+ * @return string
+ */
+ public function read()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ if(is_resource($this->_curl)) {
+ curl_close($this->_curl);
+ }
+ $this->_curl = null;
+ $this->_connected_to = array(null, null);
+ }
+
+ /**
+ * Get cUrl Handle
+ *
+ * @return resource
+ */
+ public function getHandle()
+ {
+ return $this->_curl;
+ }
+
+ /**
+ * Set output stream for the response
+ *
+ * @param resource $stream
+ * @return Zend_Http_Client_Adapter_Socket
+ */
+ public function setOutputStream($stream)
+ {
+ $this->out_stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Header reader function for CURL
+ *
+ * @param resource $curl
+ * @param string $header
+ * @return int
+ */
+ public function readHeader($curl, $header)
+ {
+ $this->_response .= $header;
+ return strlen($header);
+ }
+}
diff --git a/Zend/Http/Client/Adapter/Exception.php b/Zend/Http/Client/Adapter/Exception.php
new file mode 100644
index 00000000..c278cb4f
--- /dev/null
+++ b/Zend/Http/Client/Adapter/Exception.php
@@ -0,0 +1,38 @@
+ 'ssl',
+ 'sslcert' => null,
+ 'sslpassphrase' => null,
+ 'sslusecontext' => false,
+ 'proxy_host' => '',
+ 'proxy_port' => 8080,
+ 'proxy_user' => '',
+ 'proxy_pass' => '',
+ 'proxy_auth' => Zend_Http_Client::AUTH_BASIC,
+ 'persistent' => false
+ );
+
+ /**
+ * Whether HTTPS CONNECT was already negotiated with the proxy or not
+ *
+ * @var boolean
+ */
+ protected $negotiated = false;
+
+ /**
+ * Connect to the remote server
+ *
+ * Will try to connect to the proxy server. If no proxy was set, will
+ * fall back to the target server (behave like regular Socket adapter)
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ // If no proxy is set, fall back to Socket adapter
+ if (! $this->config['proxy_host']) {
+ return parent::connect($host, $port, $secure);
+ }
+
+ /* Url might require stream context even if proxy connection doesn't */
+ if ($secure) {
+ $this->config['sslusecontext'] = true;
+ }
+
+ // Connect (a non-secure connection) to the proxy server
+ return parent::connect(
+ $this->config['proxy_host'],
+ $this->config['proxy_port'],
+ false
+ );
+ }
+
+ /**
+ * Send request to the proxy server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ // If no proxy is set, fall back to default Socket adapter
+ if (! $this->config['proxy_host']) return parent::write($method, $uri, $http_ver, $headers, $body);
+
+ // Make sure we're properly connected
+ if (! $this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Trying to write but we are not connected");
+ }
+
+ $host = $this->config['proxy_host'];
+ $port = $this->config['proxy_port'];
+
+ if ($this->connected_to[0] != "tcp://$host" || $this->connected_to[1] != $port) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Trying to write but we are connected to the wrong proxy server");
+ }
+
+ // Add Proxy-Authorization header
+ if ($this->config['proxy_user'] && ! isset($headers['proxy-authorization'])) {
+ $headers['proxy-authorization'] = Zend_Http_Client::encodeAuthHeader(
+ $this->config['proxy_user'], $this->config['proxy_pass'], $this->config['proxy_auth']
+ );
+ }
+
+ // if we are proxying HTTPS, preform CONNECT handshake with the proxy
+ if ($uri->getScheme() == 'https' && (! $this->negotiated)) {
+ $this->connectHandshake($uri->getHost(), $uri->getPort(), $http_ver, $headers);
+ $this->negotiated = true;
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ if ($this->negotiated) {
+ $path = $uri->getPath();
+ if ($uri->getQuery()) {
+ $path .= '?' . $uri->getQuery();
+ }
+ $request = "$method $path HTTP/$http_ver\r\n";
+ } else {
+ $request = "$method $uri HTTP/$http_ver\r\n";
+ }
+
+ // Add all headers to the request string
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = "$k: $v";
+ $request .= "$v\r\n";
+ }
+
+ if(is_resource($body)) {
+ $request .= "\r\n";
+ } else {
+ // Add the request body
+ $request .= "\r\n" . $body;
+ }
+
+ // Send the request
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Error writing request to proxy server");
+ }
+
+ if(is_resource($body)) {
+ if(stream_copy_to_stream($body, $this->socket) == 0) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Error writing request to server');
+ }
+ }
+
+ return $request;
+ }
+
+ /**
+ * Preform handshaking with HTTPS proxy using CONNECT method
+ *
+ * @param string $host
+ * @param integer $port
+ * @param string $http_ver
+ * @param array $headers
+ */
+ protected function connectHandshake($host, $port = 443, $http_ver = '1.1', array &$headers = array())
+ {
+ $request = "CONNECT $host:$port HTTP/$http_ver\r\n" .
+ "Host: " . $this->config['proxy_host'] . "\r\n";
+
+ // Add the user-agent header
+ if (isset($this->config['useragent'])) {
+ $request .= "User-agent: " . $this->config['useragent'] . "\r\n";
+ }
+
+ // If the proxy-authorization header is set, send it to proxy but remove
+ // it from headers sent to target host
+ if (isset($headers['proxy-authorization'])) {
+ $request .= "Proxy-authorization: " . $headers['proxy-authorization'] . "\r\n";
+ unset($headers['proxy-authorization']);
+ }
+
+ $request .= "\r\n";
+
+ // Send the request
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Error writing request to proxy server");
+ }
+
+ // Read response headers only
+ $response = '';
+ $gotStatus = false;
+ while ($line = @fgets($this->socket)) {
+ $gotStatus = $gotStatus || (strpos($line, 'HTTP') !== false);
+ if ($gotStatus) {
+ $response .= $line;
+ if (!chop($line)) break;
+ }
+ }
+
+ // Check that the response from the proxy is 200
+ if (Zend_Http_Response::extractCode($response) != 200) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Unable to connect to HTTPS proxy. Server response: " . $response);
+ }
+
+ // If all is good, switch socket to secure mode. We have to fall back
+ // through the different modes
+ $modes = array(
+ STREAM_CRYPTO_METHOD_TLS_CLIENT,
+ STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
+ STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
+ STREAM_CRYPTO_METHOD_SSLv2_CLIENT
+ );
+
+ $success = false;
+ foreach($modes as $mode) {
+ $success = stream_socket_enable_crypto($this->socket, true, $mode);
+ if ($success) break;
+ }
+
+ if (! $success) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Unable to connect to" .
+ " HTTPS server through proxy: could not negotiate secure connection.");
+ }
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ parent::close();
+ $this->negotiated = false;
+ }
+
+ /**
+ * Destructor: make sure the socket is disconnected
+ *
+ */
+ public function __destruct()
+ {
+ if ($this->socket) $this->close();
+ }
+}
diff --git a/Zend/Http/Client/Adapter/Socket.php b/Zend/Http/Client/Adapter/Socket.php
new file mode 100644
index 00000000..5ec334c6
--- /dev/null
+++ b/Zend/Http/Client/Adapter/Socket.php
@@ -0,0 +1,544 @@
+ false,
+ 'ssltransport' => 'ssl',
+ 'sslcert' => null,
+ 'sslpassphrase' => null,
+ 'sslusecontext' => false
+ );
+
+ /**
+ * Request method - will be set by write() and might be used by read()
+ *
+ * @var string
+ */
+ protected $method = null;
+
+ /**
+ * Stream context
+ *
+ * @var resource
+ */
+ protected $_context = null;
+
+ /**
+ * Adapter constructor, currently empty. Config is set using setConfig()
+ *
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @param Zend_Config | array $config
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Array or Zend_Config object expected, got ' . gettype($config)
+ );
+ }
+
+ foreach ($config as $k => $v) {
+ $this->config[strtolower($k)] = $v;
+ }
+ }
+
+ /**
+ * Retrieve the array of all configuration options
+ *
+ * @return array
+ */
+ public function getConfig()
+ {
+ return $this->config;
+ }
+
+ /**
+ * Set the stream context for the TCP connection to the server
+ *
+ * Can accept either a pre-existing stream context resource, or an array
+ * of stream options, similar to the options array passed to the
+ * stream_context_create() PHP function. In such case a new stream context
+ * will be created using the passed options.
+ *
+ * @since Zend Framework 1.9
+ *
+ * @param mixed $context Stream context or array of context options
+ * @return Zend_Http_Client_Adapter_Socket
+ */
+ public function setStreamContext($context)
+ {
+ if (is_resource($context) && get_resource_type($context) == 'stream-context') {
+ $this->_context = $context;
+
+ } elseif (is_array($context)) {
+ $this->_context = stream_context_create($context);
+
+ } else {
+ // Invalid parameter
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ "Expecting either a stream context resource or array, got " . gettype($context)
+ );
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the stream context for the TCP connection to the server.
+ *
+ * If no stream context is set, will create a default one.
+ *
+ * @return resource
+ */
+ public function getStreamContext()
+ {
+ if (! $this->_context) {
+ $this->_context = stream_context_create();
+ }
+
+ return $this->_context;
+ }
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ // If the URI should be accessed via SSL, prepend the Hostname with ssl://
+ $host = ($secure ? $this->config['ssltransport'] : 'tcp') . '://' . $host;
+
+ // If we are connected to the wrong host, disconnect first
+ if (($this->connected_to[0] != $host || $this->connected_to[1] != $port)) {
+ if (is_resource($this->socket)) $this->close();
+ }
+
+ // Now, if we are not connected, connect
+ if (! is_resource($this->socket) || ! $this->config['keepalive']) {
+ $context = $this->getStreamContext();
+ if ($secure || $this->config['sslusecontext']) {
+ if ($this->config['sslcert'] !== null) {
+ if (! stream_context_set_option($context, 'ssl', 'local_cert',
+ $this->config['sslcert'])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to set sslcert option');
+ }
+ }
+ if ($this->config['sslpassphrase'] !== null) {
+ if (! stream_context_set_option($context, 'ssl', 'passphrase',
+ $this->config['sslpassphrase'])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to set sslpassphrase option');
+ }
+ }
+ }
+
+ $flags = STREAM_CLIENT_CONNECT;
+ if ($this->config['persistent']) $flags |= STREAM_CLIENT_PERSISTENT;
+
+ $this->socket = @stream_socket_client($host . ':' . $port,
+ $errno,
+ $errstr,
+ (int) $this->config['timeout'],
+ $flags,
+ $context);
+
+ if (! $this->socket) {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Unable to Connect to ' . $host . ':' . $port . '. Error #' . $errno . ': ' . $errstr);
+ }
+
+ // Set the stream timeout
+ if (! stream_set_timeout($this->socket, (int) $this->config['timeout'])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to set the connection timeout');
+ }
+
+ // Update connected_to
+ $this->connected_to = array($host, $port);
+ }
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ // Make sure we're properly connected
+ if (! $this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Trying to write but we are not connected');
+ }
+
+ $host = $uri->getHost();
+ $host = (strtolower($uri->getScheme()) == 'https' ? $this->config['ssltransport'] : 'tcp') . '://' . $host;
+ if ($this->connected_to[0] != $host || $this->connected_to[1] != $uri->getPort()) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Trying to write but we are connected to the wrong host');
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ $path = $uri->getPath();
+ if ($uri->getQuery()) $path .= '?' . $uri->getQuery();
+ $request = "{$method} {$path} HTTP/{$http_ver}\r\n";
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = ucfirst($k) . ": $v";
+ $request .= "$v\r\n";
+ }
+
+ if(is_resource($body)) {
+ $request .= "\r\n";
+ } else {
+ // Add the request body
+ $request .= "\r\n" . $body;
+ }
+
+ // Send the request
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Error writing request to server');
+ }
+
+ if(is_resource($body)) {
+ if(stream_copy_to_stream($body, $this->socket) == 0) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Error writing request to server');
+ }
+ }
+
+ return $request;
+ }
+
+ /**
+ * Read response from server
+ *
+ * @return string
+ */
+ public function read()
+ {
+ // First, read headers only
+ $response = '';
+ $gotStatus = false;
+ $stream = !empty($this->config['stream']);
+
+ while (($line = @fgets($this->socket)) !== false) {
+ $gotStatus = $gotStatus || (strpos($line, 'HTTP') !== false);
+ if ($gotStatus) {
+ $response .= $line;
+ if (rtrim($line) === '') break;
+ }
+ }
+
+ $this->_checkSocketReadTimeout();
+
+ $statusCode = Zend_Http_Response::extractCode($response);
+
+ // Handle 100 and 101 responses internally by restarting the read again
+ if ($statusCode == 100 || $statusCode == 101) return $this->read();
+
+ // Check headers to see what kind of connection / transfer encoding we have
+ $headers = Zend_Http_Response::extractHeaders($response);
+
+ /**
+ * Responses to HEAD requests and 204 or 304 responses are not expected
+ * to have a body - stop reading here
+ */
+ if ($statusCode == 304 || $statusCode == 204 ||
+ $this->method == Zend_Http_Client::HEAD) {
+
+ // Close the connection if requested to do so by the server
+ if (isset($headers['connection']) && $headers['connection'] == 'close') {
+ $this->close();
+ }
+ return $response;
+ }
+
+ // If we got a 'transfer-encoding: chunked' header
+ if (isset($headers['transfer-encoding'])) {
+
+ if (strtolower($headers['transfer-encoding']) == 'chunked') {
+
+ do {
+ $line = @fgets($this->socket);
+ $this->_checkSocketReadTimeout();
+
+ $chunk = $line;
+
+ // Figure out the next chunk size
+ $chunksize = trim($line);
+ if (! ctype_xdigit($chunksize)) {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Invalid chunk size "' .
+ $chunksize . '" unable to read chunked body');
+ }
+
+ // Convert the hexadecimal value to plain integer
+ $chunksize = hexdec($chunksize);
+
+ // Read next chunk
+ $read_to = ftell($this->socket) + $chunksize;
+
+ do {
+ $current_pos = ftell($this->socket);
+ if ($current_pos >= $read_to) break;
+
+ if($this->out_stream) {
+ if(stream_copy_to_stream($this->socket, $this->out_stream, $read_to - $current_pos) == 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ } else {
+ $line = @fread($this->socket, $read_to - $current_pos);
+ if ($line === false || strlen($line) === 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ $chunk .= $line;
+ }
+ } while (! feof($this->socket));
+
+ $chunk .= @fgets($this->socket);
+ $this->_checkSocketReadTimeout();
+
+ if(!$this->out_stream) {
+ $response .= $chunk;
+ }
+ } while ($chunksize > 0);
+ } else {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Cannot handle "' .
+ $headers['transfer-encoding'] . '" transfer encoding');
+ }
+
+ // We automatically decode chunked-messages when writing to a stream
+ // this means we have to disallow the Zend_Http_Response to do it again
+ if ($this->out_stream) {
+ $response = str_ireplace("Transfer-Encoding: chunked\r\n", '', $response);
+ }
+ // Else, if we got the content-length header, read this number of bytes
+ } elseif (isset($headers['content-length'])) {
+
+ // If we got more than one Content-Length header (see ZF-9404) use
+ // the last value sent
+ if (is_array($headers['content-length'])) {
+ $contentLength = $headers['content-length'][count($headers['content-length']) - 1];
+ } else {
+ $contentLength = $headers['content-length'];
+ }
+
+ $current_pos = ftell($this->socket);
+ $chunk = '';
+
+ for ($read_to = $current_pos + $contentLength;
+ $read_to > $current_pos;
+ $current_pos = ftell($this->socket)) {
+
+ if($this->out_stream) {
+ if(@stream_copy_to_stream($this->socket, $this->out_stream, $read_to - $current_pos) == 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ } else {
+ $chunk = @fread($this->socket, $read_to - $current_pos);
+ if ($chunk === false || strlen($chunk) === 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+
+ $response .= $chunk;
+ }
+
+ // Break if the connection ended prematurely
+ if (feof($this->socket)) break;
+ }
+
+ // Fallback: just read the response until EOF
+ } else {
+
+ do {
+ if($this->out_stream) {
+ if(@stream_copy_to_stream($this->socket, $this->out_stream) == 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ } else {
+ $buff = @fread($this->socket, 8192);
+ if ($buff === false || strlen($buff) === 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ } else {
+ $response .= $buff;
+ }
+ }
+
+ } while (feof($this->socket) === false);
+
+ $this->close();
+ }
+
+ // Close the connection if requested to do so by the server
+ if (isset($headers['connection']) && $headers['connection'] == 'close') {
+ $this->close();
+ }
+
+ return $response;
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ if (is_resource($this->socket)) @fclose($this->socket);
+ $this->socket = null;
+ $this->connected_to = array(null, null);
+ }
+
+ /**
+ * Check if the socket has timed out - if so close connection and throw
+ * an exception
+ *
+ * @throws Zend_Http_Client_Adapter_Exception with READ_TIMEOUT code
+ */
+ protected function _checkSocketReadTimeout()
+ {
+ if ($this->socket) {
+ $info = stream_get_meta_data($this->socket);
+ $timedout = $info['timed_out'];
+ if ($timedout) {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ "Read timed out after {$this->config['timeout']} seconds",
+ Zend_Http_Client_Adapter_Exception::READ_TIMEOUT
+ );
+ }
+ }
+ }
+
+ /**
+ * Set output stream for the response
+ *
+ * @param resource $stream
+ * @return Zend_Http_Client_Adapter_Socket
+ */
+ public function setOutputStream($stream)
+ {
+ $this->out_stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Destructor: make sure the socket is disconnected
+ *
+ * If we are in persistent TCP mode, will not close the connection
+ *
+ */
+ public function __destruct()
+ {
+ if (! $this->config['persistent']) {
+ if ($this->socket) $this->close();
+ }
+ }
+}
diff --git a/Zend/Http/Client/Adapter/Stream.php b/Zend/Http/Client/Adapter/Stream.php
new file mode 100644
index 00000000..5ca86aa7
--- /dev/null
+++ b/Zend/Http/Client/Adapter/Stream.php
@@ -0,0 +1,46 @@
+_nextRequestWillFail = (bool) $flag;
+
+ return $this;
+ }
+
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @param Zend_Config | array $config
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Array or Zend_Config object expected, got ' . gettype($config)
+ );
+ }
+
+ foreach ($config as $k => $v) {
+ $this->config[strtolower($k)] = $v;
+ }
+ }
+
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ * @param int $timeout
+ * @throws Zend_Http_Client_Adapter_Exception
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ if ($this->_nextRequestWillFail) {
+ $this->_nextRequestWillFail = false;
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Request failed');
+ }
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ $host = $uri->getHost();
+ $host = (strtolower($uri->getScheme()) == 'https' ? 'sslv2://' . $host : $host);
+
+ // Build request headers
+ $path = $uri->getPath();
+ if ($uri->getQuery()) $path .= '?' . $uri->getQuery();
+ $request = "{$method} {$path} HTTP/{$http_ver}\r\n";
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = ucfirst($k) . ": $v";
+ $request .= "$v\r\n";
+ }
+
+ // Add the request body
+ $request .= "\r\n" . $body;
+
+ // Do nothing - just return the request as string
+
+ return $request;
+ }
+
+ /**
+ * Return the response set in $this->setResponse()
+ *
+ * @return string
+ */
+ public function read()
+ {
+ if ($this->responseIndex >= count($this->responses)) {
+ $this->responseIndex = 0;
+ }
+ return $this->responses[$this->responseIndex++];
+ }
+
+ /**
+ * Close the connection (dummy)
+ *
+ */
+ public function close()
+ { }
+
+ /**
+ * Set the HTTP response(s) to be returned by this adapter
+ *
+ * @param Zend_Http_Response|array|string $response
+ */
+ public function setResponse($response)
+ {
+ if ($response instanceof Zend_Http_Response) {
+ $response = $response->asString("\r\n");
+ }
+
+ $this->responses = (array)$response;
+ $this->responseIndex = 0;
+ }
+
+ /**
+ * Add another response to the response buffer.
+ *
+ * @param string Zend_Http_Response|$response
+ */
+ public function addResponse($response)
+ {
+ if ($response instanceof Zend_Http_Response) {
+ $response = $response->asString("\r\n");
+ }
+
+ $this->responses[] = $response;
+ }
+
+ /**
+ * Sets the position of the response buffer. Selects which
+ * response will be returned on the next call to read().
+ *
+ * @param integer $index
+ */
+ public function setResponseIndex($index)
+ {
+ if ($index < 0 || $index >= count($this->responses)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Index out of range of response buffer size');
+ }
+ $this->responseIndex = $index;
+ }
+}
diff --git a/Zend/Http/Client/Exception.php b/Zend/Http/Client/Exception.php
new file mode 100644
index 00000000..b1d5ccc8
--- /dev/null
+++ b/Zend/Http/Client/Exception.php
@@ -0,0 +1,36 @@
+ 'Continue',
+ 101 => 'Switching Protocols',
+
+ // Success 2xx
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 204 => 'No Content',
+ 205 => 'Reset Content',
+ 206 => 'Partial Content',
+
+ // Redirection 3xx
+ 300 => 'Multiple Choices',
+ 301 => 'Moved Permanently',
+ 302 => 'Found', // 1.1
+ 303 => 'See Other',
+ 304 => 'Not Modified',
+ 305 => 'Use Proxy',
+ // 306 is deprecated but reserved
+ 307 => 'Temporary Redirect',
+
+ // Client Error 4xx
+ 400 => 'Bad Request',
+ 401 => 'Unauthorized',
+ 402 => 'Payment Required',
+ 403 => 'Forbidden',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Long',
+ 415 => 'Unsupported Media Type',
+ 416 => 'Requested Range Not Satisfiable',
+ 417 => 'Expectation Failed',
+
+ // Server Error 5xx
+ 500 => 'Internal Server Error',
+ 501 => 'Not Implemented',
+ 502 => 'Bad Gateway',
+ 503 => 'Service Unavailable',
+ 504 => 'Gateway Timeout',
+ 505 => 'HTTP Version Not Supported',
+ 509 => 'Bandwidth Limit Exceeded'
+ );
+
+ /**
+ * The HTTP version (1.0, 1.1)
+ *
+ * @var string
+ */
+ protected $version;
+
+ /**
+ * The HTTP response code
+ *
+ * @var int
+ */
+ protected $code;
+
+ /**
+ * The HTTP response code as string
+ * (e.g. 'Not Found' for 404 or 'Internal Server Error' for 500)
+ *
+ * @var string
+ */
+ protected $message;
+
+ /**
+ * The HTTP response headers array
+ *
+ * @var array
+ */
+ protected $headers = array();
+
+ /**
+ * The HTTP response body
+ *
+ * @var string
+ */
+ protected $body;
+
+ /**
+ * HTTP response constructor
+ *
+ * In most cases, you would use Zend_Http_Response::fromString to parse an HTTP
+ * response string and create a new Zend_Http_Response object.
+ *
+ * NOTE: The constructor no longer accepts nulls or empty values for the code and
+ * headers and will throw an exception if the passed values do not form a valid HTTP
+ * responses.
+ *
+ * If no message is passed, the message will be guessed according to the response code.
+ *
+ * @param int $code Response code (200, 404, ...)
+ * @param array $headers Headers array
+ * @param string $body Response body
+ * @param string $version HTTP version
+ * @param string $message Response code as text
+ * @throws Zend_Http_Exception
+ */
+ public function __construct($code, array $headers, $body = null, $version = '1.1', $message = null)
+ {
+ // Make sure the response code is valid and set it
+ if (self::responseCodeAsText($code) === null) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("{$code} is not a valid HTTP response code");
+ }
+
+ $this->code = $code;
+
+ foreach ($headers as $name => $value) {
+ if (is_int($name)) {
+ $header = explode(":", $value, 2);
+ if (count($header) != 2) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("'{$value}' is not a valid HTTP header");
+ }
+
+ $name = trim($header[0]);
+ $value = trim($header[1]);
+ }
+
+ $this->headers[ucwords(strtolower($name))] = $value;
+ }
+
+ // Set the body
+ $this->body = $body;
+
+ // Set the HTTP version
+ if (! preg_match('|^\d\.\d$|', $version)) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("Invalid HTTP response version: $version");
+ }
+
+ $this->version = $version;
+
+ // If we got the response message, set it. Else, set it according to
+ // the response code
+ if (is_string($message)) {
+ $this->message = $message;
+ } else {
+ $this->message = self::responseCodeAsText($code);
+ }
+ }
+
+ /**
+ * Check whether the response is an error
+ *
+ * @return boolean
+ */
+ public function isError()
+ {
+ $restype = floor($this->code / 100);
+ if ($restype == 4 || $restype == 5) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check whether the response in successful
+ *
+ * @return boolean
+ */
+ public function isSuccessful()
+ {
+ $restype = floor($this->code / 100);
+ if ($restype == 2 || $restype == 1) { // Shouldn't 3xx count as success as well ???
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check whether the response is a redirection
+ *
+ * @return boolean
+ */
+ public function isRedirect()
+ {
+ $restype = floor($this->code / 100);
+ if ($restype == 3) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the response body as string
+ *
+ * This method returns the body of the HTTP response (the content), as it
+ * should be in it's readable version - that is, after decoding it (if it
+ * was decoded), deflating it (if it was gzip compressed), etc.
+ *
+ * If you want to get the raw body (as transfered on wire) use
+ * $this->getRawBody() instead.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ $body = '';
+
+ // Decode the body if it was transfer-encoded
+ switch (strtolower($this->getHeader('transfer-encoding'))) {
+
+ // Handle chunked body
+ case 'chunked':
+ $body = self::decodeChunkedBody($this->body);
+ break;
+
+ // No transfer encoding, or unknown encoding extension:
+ // return body as is
+ default:
+ $body = $this->body;
+ break;
+ }
+
+ // Decode any content-encoding (gzip or deflate) if needed
+ switch (strtolower($this->getHeader('content-encoding'))) {
+
+ // Handle gzip encoding
+ case 'gzip':
+ $body = self::decodeGzip($body);
+ break;
+
+ // Handle deflate encoding
+ case 'deflate':
+ $body = self::decodeDeflate($body);
+ break;
+
+ default:
+ break;
+ }
+
+ return $body;
+ }
+
+ /**
+ * Get the raw response body (as transfered "on wire") as string
+ *
+ * If the body is encoded (with Transfer-Encoding, not content-encoding -
+ * IE "chunked" body), gzip compressed, etc. it will not be decoded.
+ *
+ * @return string
+ */
+ public function getRawBody()
+ {
+ return $this->body;
+ }
+
+ /**
+ * Get the HTTP version of the response
+ *
+ * @return string
+ */
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * Get the HTTP response status code
+ *
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->code;
+ }
+
+ /**
+ * Return a message describing the HTTP response code
+ * (Eg. "OK", "Not Found", "Moved Permanently")
+ *
+ * @return string
+ */
+ public function getMessage()
+ {
+ return $this->message;
+ }
+
+ /**
+ * Get the response headers
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->headers;
+ }
+
+ /**
+ * Get a specific header as string, or null if it is not set
+ *
+ * @param string$header
+ * @return string|array|null
+ */
+ public function getHeader($header)
+ {
+ $header = ucwords(strtolower($header));
+ if (! is_string($header) || ! isset($this->headers[$header])) return null;
+
+ return $this->headers[$header];
+ }
+
+ /**
+ * Get all headers as string
+ *
+ * @param boolean $status_line Whether to return the first status line (IE "HTTP 200 OK")
+ * @param string $br Line breaks (eg. "\n", "\r\n", " ")
+ * @return string
+ */
+ public function getHeadersAsString($status_line = true, $br = "\n")
+ {
+ $str = '';
+
+ if ($status_line) {
+ $str = "HTTP/{$this->version} {$this->code} {$this->message}{$br}";
+ }
+
+ // Iterate over the headers and stringify them
+ foreach ($this->headers as $name => $value)
+ {
+ if (is_string($value))
+ $str .= "{$name}: {$value}{$br}";
+
+ elseif (is_array($value)) {
+ foreach ($value as $subval) {
+ $str .= "{$name}: {$subval}{$br}";
+ }
+ }
+ }
+
+ return $str;
+ }
+
+ /**
+ * Get the entire response as string
+ *
+ * @param string $br Line breaks (eg. "\n", "\r\n", " ")
+ * @return string
+ */
+ public function asString($br = "\n")
+ {
+ return $this->getHeadersAsString(true, $br) . $br . $this->getRawBody();
+ }
+
+ /**
+ * Implements magic __toString()
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->asString();
+ }
+
+ /**
+ * A convenience function that returns a text representation of
+ * HTTP response codes. Returns 'Unknown' for unknown codes.
+ * Returns array of all codes, if $code is not specified.
+ *
+ * Conforms to HTTP/1.1 as defined in RFC 2616 (except for 'Unknown')
+ * See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 for reference
+ *
+ * @param int $code HTTP response code
+ * @param boolean $http11 Use HTTP version 1.1
+ * @return string
+ */
+ public static function responseCodeAsText($code = null, $http11 = true)
+ {
+ $messages = self::$messages;
+ if (! $http11) $messages[302] = 'Moved Temporarily';
+
+ if ($code === null) {
+ return $messages;
+ } elseif (isset($messages[$code])) {
+ return $messages[$code];
+ } else {
+ return 'Unknown';
+ }
+ }
+
+ /**
+ * Extract the response code from a response string
+ *
+ * @param string $response_str
+ * @return int
+ */
+ public static function extractCode($response_str)
+ {
+ preg_match("|^HTTP/[\d\.x]+ (\d+)|", $response_str, $m);
+
+ if (isset($m[1])) {
+ return (int) $m[1];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Extract the HTTP message from a response
+ *
+ * @param string $response_str
+ * @return string
+ */
+ public static function extractMessage($response_str)
+ {
+ preg_match("|^HTTP/[\d\.x]+ \d+ ([^\r\n]+)|", $response_str, $m);
+
+ if (isset($m[1])) {
+ return $m[1];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Extract the HTTP version from a response
+ *
+ * @param string $response_str
+ * @return string
+ */
+ public static function extractVersion($response_str)
+ {
+ preg_match("|^HTTP/([\d\.x]+) \d+|", $response_str, $m);
+
+ if (isset($m[1])) {
+ return $m[1];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Extract the headers from a response string
+ *
+ * @param string $response_str
+ * @return array
+ */
+ public static function extractHeaders($response_str)
+ {
+ $headers = array();
+
+ // First, split body and headers
+ $parts = preg_split('|(?:\r?\n){2}|m', $response_str, 2);
+ if (! $parts[0]) return $headers;
+
+ // Split headers part to lines
+ $lines = explode("\n", $parts[0]);
+ unset($parts);
+ $last_header = null;
+
+ foreach($lines as $line) {
+ $line = trim($line, "\r\n");
+ if ($line == "") break;
+
+ // Locate headers like 'Location: ...' and 'Location:...' (note the missing space)
+ if (preg_match("|^([\w-]+):\s*(.+)|", $line, $m)) {
+ unset($last_header);
+ $h_name = strtolower($m[1]);
+ $h_value = $m[2];
+
+ if (isset($headers[$h_name])) {
+ if (! is_array($headers[$h_name])) {
+ $headers[$h_name] = array($headers[$h_name]);
+ }
+
+ $headers[$h_name][] = $h_value;
+ } else {
+ $headers[$h_name] = $h_value;
+ }
+ $last_header = $h_name;
+ } elseif (preg_match("|^\s+(.+)$|", $line, $m) && $last_header !== null) {
+ if (is_array($headers[$last_header])) {
+ end($headers[$last_header]);
+ $last_header_key = key($headers[$last_header]);
+ $headers[$last_header][$last_header_key] .= $m[1];
+ } else {
+ $headers[$last_header] .= $m[1];
+ }
+ }
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Extract the body from a response string
+ *
+ * @param string $response_str
+ * @return string
+ */
+ public static function extractBody($response_str)
+ {
+ $parts = preg_split('|(?:\r?\n){2}|m', $response_str, 2);
+ if (isset($parts[1])) {
+ return $parts[1];
+ }
+ return '';
+ }
+
+ /**
+ * Decode a "chunked" transfer-encoded body and return the decoded text
+ *
+ * @param string $body
+ * @return string
+ */
+ public static function decodeChunkedBody($body)
+ {
+ $decBody = '';
+
+ // If mbstring overloads substr and strlen functions, we have to
+ // override it's internal encoding
+ if (function_exists('mb_internal_encoding') &&
+ ((int) ini_get('mbstring.func_overload')) & 2) {
+
+ $mbIntEnc = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+
+ while (trim($body)) {
+ if (! preg_match("/^([\da-fA-F]+)[^\r\n]*\r\n/sm", $body, $m)) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("Error parsing body - doesn't seem to be a chunked message");
+ }
+
+ $length = hexdec(trim($m[1]));
+ $cut = strlen($m[0]);
+ $decBody .= substr($body, $cut, $length);
+ $body = substr($body, $cut + $length + 2);
+ }
+
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ return $decBody;
+ }
+
+ /**
+ * Decode a gzip encoded message (when Content-encoding = gzip)
+ *
+ * Currently requires PHP with zlib support
+ *
+ * @param string $body
+ * @return string
+ */
+ public static function decodeGzip($body)
+ {
+ if (! function_exists('gzinflate')) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception(
+ 'zlib extension is required in order to decode "gzip" encoding'
+ );
+ }
+
+ return gzinflate(substr($body, 10));
+ }
+
+ /**
+ * Decode a zlib deflated message (when Content-encoding = deflate)
+ *
+ * Currently requires PHP with zlib support
+ *
+ * @param string $body
+ * @return string
+ */
+ public static function decodeDeflate($body)
+ {
+ if (! function_exists('gzuncompress')) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception(
+ 'zlib extension is required in order to decode "deflate" encoding'
+ );
+ }
+
+ /**
+ * Some servers (IIS ?) send a broken deflate response, without the
+ * RFC-required zlib header.
+ *
+ * We try to detect the zlib header, and if it does not exsit we
+ * teat the body is plain DEFLATE content.
+ *
+ * This method was adapted from PEAR HTTP_Request2 by (c) Alexey Borzov
+ *
+ * @link http://framework.zend.com/issues/browse/ZF-6040
+ */
+ $zlibHeader = unpack('n', substr($body, 0, 2));
+ if ($zlibHeader[1] % 31 == 0) {
+ return gzuncompress($body);
+ } else {
+ return gzinflate($body);
+ }
+ }
+
+ /**
+ * Create a new Zend_Http_Response object from a string
+ *
+ * @param string $response_str
+ * @return Zend_Http_Response
+ */
+ public static function fromString($response_str)
+ {
+ $code = self::extractCode($response_str);
+ $headers = self::extractHeaders($response_str);
+ $body = self::extractBody($response_str);
+ $version = self::extractVersion($response_str);
+ $message = self::extractMessage($response_str);
+
+ return new Zend_Http_Response($code, $headers, $body, $version, $message);
+ }
+}
diff --git a/Zend/Http/Response/Stream.php b/Zend/Http/Response/Stream.php
new file mode 100644
index 00000000..63758158
--- /dev/null
+++ b/Zend/Http/Response/Stream.php
@@ -0,0 +1,235 @@
+stream;
+ }
+
+ /**
+ * Set the response stream
+ *
+ * @param resourse $stream
+ * @return Zend_Http_Response_Stream
+ */
+ public function setStream($stream)
+ {
+ $this->stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Get the cleanup trigger
+ *
+ * @return boolean
+ */
+ public function getCleanup() {
+ return $this->_cleanup;
+ }
+
+ /**
+ * Set the cleanup trigger
+ *
+ * @param $cleanup Set cleanup trigger
+ */
+ public function setCleanup($cleanup = true) {
+ $this->_cleanup = $cleanup;
+ }
+
+ /**
+ * Get file name associated with the stream
+ *
+ * @return string
+ */
+ public function getStreamName() {
+ return $this->stream_name;
+ }
+
+ /**
+ * Set file name associated with the stream
+ *
+ * @param string $stream_name Name to set
+ * @return Zend_Http_Response_Stream
+ */
+ public function setStreamName($stream_name) {
+ $this->stream_name = $stream_name;
+ return $this;
+ }
+
+
+ /**
+ * HTTP response constructor
+ *
+ * In most cases, you would use Zend_Http_Response::fromString to parse an HTTP
+ * response string and create a new Zend_Http_Response object.
+ *
+ * NOTE: The constructor no longer accepts nulls or empty values for the code and
+ * headers and will throw an exception if the passed values do not form a valid HTTP
+ * responses.
+ *
+ * If no message is passed, the message will be guessed according to the response code.
+ *
+ * @param int $code Response code (200, 404, ...)
+ * @param array $headers Headers array
+ * @param string $body Response body
+ * @param string $version HTTP version
+ * @param string $message Response code as text
+ * @throws Zend_Http_Exception
+ */
+ public function __construct($code, $headers, $body = null, $version = '1.1', $message = null)
+ {
+
+ if(is_resource($body)) {
+ $this->setStream($body);
+ $body = '';
+ }
+ parent::__construct($code, $headers, $body, $version, $message);
+ }
+
+ /**
+ * Create a new Zend_Http_Response_Stream object from a string
+ *
+ * @param string $response_str
+ * @param resource $stream
+ * @return Zend_Http_Response_Stream
+ */
+ public static function fromStream($response_str, $stream)
+ {
+ $code = self::extractCode($response_str);
+ $headers = self::extractHeaders($response_str);
+ $version = self::extractVersion($response_str);
+ $message = self::extractMessage($response_str);
+
+ return new self($code, $headers, $stream, $version, $message);
+ }
+
+ /**
+ * Get the response body as string
+ *
+ * This method returns the body of the HTTP response (the content), as it
+ * should be in it's readable version - that is, after decoding it (if it
+ * was decoded), deflating it (if it was gzip compressed), etc.
+ *
+ * If you want to get the raw body (as transfered on wire) use
+ * $this->getRawBody() instead.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ if($this->stream != null) {
+ $this->readStream();
+ }
+ return parent::getBody();
+ }
+
+ /**
+ * Get the raw response body (as transfered "on wire") as string
+ *
+ * If the body is encoded (with Transfer-Encoding, not content-encoding -
+ * IE "chunked" body), gzip compressed, etc. it will not be decoded.
+ *
+ * @return string
+ */
+ public function getRawBody()
+ {
+ if($this->stream) {
+ $this->readStream();
+ }
+ return $this->body;
+ }
+
+ /**
+ * Read stream content and return it as string
+ *
+ * Function reads the remainder of the body from the stream and closes the stream.
+ *
+ * @return string
+ */
+ protected function readStream()
+ {
+ if(!is_resource($this->stream)) {
+ return '';
+ }
+
+ if(isset($headers['content-length'])) {
+ $this->body = stream_get_contents($this->stream, $headers['content-length']);
+ } else {
+ $this->body = stream_get_contents($this->stream);
+ }
+ fclose($this->stream);
+ $this->stream = null;
+ }
+
+ public function __destruct()
+ {
+ if(is_resource($this->stream)) {
+ fclose($this->stream);
+ $this->stream = null;
+ }
+ if($this->_cleanup) {
+ @unlink($this->stream_name);
+ }
+ }
+
+}
diff --git a/Zend/Loader.php b/Zend/Loader.php
new file mode 100644
index 00000000..2fc35d61
--- /dev/null
+++ b/Zend/Loader.php
@@ -0,0 +1,329 @@
+ $dir) {
+ if ($dir == '.') {
+ $dirs[$key] = $dirPath;
+ } else {
+ $dir = rtrim($dir, '\\/');
+ $dirs[$key] = $dir . DIRECTORY_SEPARATOR . $dirPath;
+ }
+ }
+ $file = basename($file);
+ self::loadFile($file, $dirs, true);
+ } else {
+ self::loadFile($file, null, true);
+ }
+
+ if (!class_exists($class, false) && !interface_exists($class, false)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("File \"$file\" does not exist or class \"$class\" was not found in the file");
+ }
+ }
+
+ /**
+ * Loads a PHP file. This is a wrapper for PHP's include() function.
+ *
+ * $filename must be the complete filename, including any
+ * extension such as ".php". Note that a security check is performed that
+ * does not permit extended characters in the filename. This method is
+ * intended for loading Zend Framework files.
+ *
+ * If $dirs is a string or an array, it will search the directories
+ * in the order supplied, and attempt to load the first matching file.
+ *
+ * If the file was not found in the $dirs, or if no $dirs were specified,
+ * it will attempt to load it from PHP's include_path.
+ *
+ * If $once is TRUE, it will use include_once() instead of include().
+ *
+ * @param string $filename
+ * @param string|array $dirs - OPTIONAL either a path or array of paths
+ * to search.
+ * @param boolean $once
+ * @return boolean
+ * @throws Zend_Exception
+ */
+ public static function loadFile($filename, $dirs = null, $once = false)
+ {
+ self::_securityCheck($filename);
+
+ /**
+ * Search in provided directories, as well as include_path
+ */
+ $incPath = false;
+ if (!empty($dirs) && (is_array($dirs) || is_string($dirs))) {
+ if (is_array($dirs)) {
+ $dirs = implode(PATH_SEPARATOR, $dirs);
+ }
+ $incPath = get_include_path();
+ set_include_path($dirs . PATH_SEPARATOR . $incPath);
+ }
+
+ /**
+ * Try finding for the plain filename in the include_path.
+ */
+ if ($once) {
+ include_once $filename;
+ } else {
+ include $filename;
+ }
+
+ /**
+ * If searching in directories, reset include_path
+ */
+ if ($incPath) {
+ set_include_path($incPath);
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns TRUE if the $filename is readable, or FALSE otherwise.
+ * This function uses the PHP include_path, where PHP's is_readable()
+ * does not.
+ *
+ * Note from ZF-2900:
+ * If you use custom error handler, please check whether return value
+ * from error_reporting() is zero or not.
+ * At mark of fopen() can not suppress warning if the handler is used.
+ *
+ * @param string $filename
+ * @return boolean
+ */
+ public static function isReadable($filename)
+ {
+ if (is_readable($filename)) {
+ // Return early if the filename is readable without needing the
+ // include_path
+ return true;
+ }
+
+ if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'
+ && preg_match('/^[a-z]:/i', $filename)
+ ) {
+ // If on windows, and path provided is clearly an absolute path,
+ // return false immediately
+ return false;
+ }
+
+ foreach (self::explodeIncludePath() as $path) {
+ if ($path == '.') {
+ if (is_readable($filename)) {
+ return true;
+ }
+ continue;
+ }
+ $file = $path . '/' . $filename;
+ if (is_readable($file)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Explode an include path into an array
+ *
+ * If no path provided, uses current include_path. Works around issues that
+ * occur when the path includes stream schemas.
+ *
+ * @param string|null $path
+ * @return array
+ */
+ public static function explodeIncludePath($path = null)
+ {
+ if (null === $path) {
+ $path = get_include_path();
+ }
+
+ if (PATH_SEPARATOR == ':') {
+ // On *nix systems, include_paths which include paths with a stream
+ // schema cannot be safely explode'd, so we have to be a bit more
+ // intelligent in the approach.
+ $paths = preg_split('#:(?!//)#', $path);
+ } else {
+ $paths = explode(PATH_SEPARATOR, $path);
+ }
+ return $paths;
+ }
+
+ /**
+ * spl_autoload() suitable implementation for supporting class autoloading.
+ *
+ * Attach to spl_autoload() using the following:
+ *
+ * spl_autoload_register(array('Zend_Loader', 'autoload'));
+ *
+ *
+ * @deprecated Since 1.8.0
+ * @param string $class
+ * @return string|false Class name on success; false on failure
+ */
+ public static function autoload($class)
+ {
+ trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead', E_USER_NOTICE);
+ try {
+ @self::loadClass($class);
+ return $class;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Register {@link autoload()} with spl_autoload()
+ *
+ * @deprecated Since 1.8.0
+ * @param string $class (optional)
+ * @param boolean $enabled (optional)
+ * @return void
+ * @throws Zend_Exception if spl_autoload() is not found
+ * or if the specified class does not have an autoload() method.
+ */
+ public static function registerAutoload($class = 'Zend_Loader', $enabled = true)
+ {
+ trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead', E_USER_NOTICE);
+ require_once 'Zend/Loader/Autoloader.php';
+ $autoloader = Zend_Loader_Autoloader::getInstance();
+ $autoloader->setFallbackAutoloader(true);
+
+ if ('Zend_Loader' != $class) {
+ self::loadClass($class);
+ $methods = get_class_methods($class);
+ if (!in_array('autoload', (array) $methods)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("The class \"$class\" does not have an autoload() method");
+ }
+
+ $callback = array($class, 'autoload');
+
+ if ($enabled) {
+ $autoloader->pushAutoloader($callback);
+ } else {
+ $autoloader->removeAutoloader($callback);
+ }
+ }
+ }
+
+ /**
+ * Ensure that filename does not contain exploits
+ *
+ * @param string $filename
+ * @return void
+ * @throws Zend_Exception
+ */
+ protected static function _securityCheck($filename)
+ {
+ /**
+ * Security check
+ */
+ if (preg_match('/[^a-z0-9\\/\\\\_.:-]/i', $filename)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception('Security check: Illegal character in filename');
+ }
+ }
+
+ /**
+ * Attempt to include() the file.
+ *
+ * include() is not prefixed with the @ operator because if
+ * the file is loaded and contains a parse error, execution
+ * will halt silently and this is difficult to debug.
+ *
+ * Always set display_errors = Off on production servers!
+ *
+ * @param string $filespec
+ * @param boolean $once
+ * @return boolean
+ * @deprecated Since 1.5.0; use loadFile() instead
+ */
+ protected static function _includeFile($filespec, $once = false)
+ {
+ if ($once) {
+ return include_once $filespec;
+ } else {
+ return include $filespec ;
+ }
+ }
+}
diff --git a/Zend/Oauth.php b/Zend/Oauth.php
new file mode 100644
index 00000000..6bc33b58
--- /dev/null
+++ b/Zend/Oauth.php
@@ -0,0 +1,89 @@
+setHeaders('Authorization', null);
+ self::$httpClient->resetParameters();
+ }
+ return self::$httpClient;
+ }
+
+ /**
+ * Simple mechanism to delete the entire singleton HTTP Client instance
+ * which forces an new instantiation for subsequent requests.
+ *
+ * @return void
+ */
+ public static function clearHttpClient()
+ {
+ self::$httpClient = null;
+ }
+}
diff --git a/Zend/Oauth/Client.php b/Zend/Oauth/Client.php
new file mode 100644
index 00000000..7390693b
--- /dev/null
+++ b/Zend/Oauth/Client.php
@@ -0,0 +1,336 @@
+_config = new Zend_Oauth_Config;
+ if ($oauthOptions !== null) {
+ if ($oauthOptions instanceof Zend_Config) {
+ $oauthOptions = $oauthOptions->toArray();
+ }
+ $this->_config->setOptions($oauthOptions);
+ }
+ }
+
+ /**
+ * Return the current connection adapter
+ *
+ * @return Zend_Http_Client_Adapter_Interface|string $adapter
+ */
+ public function getAdapter()
+ {
+ return $this->adapter;
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * @param Zend_Http_Client_Adapter_Interface $adapter
+ * @return void
+ */
+ public function setAdapter($adapter)
+ {
+ if ($adapter == null) {
+ $this->adapter = $adapter;
+ } else {
+ parent::setAdapter($adapter);
+ }
+ }
+
+ /**
+ * Set the streamingRequest variable which controls whether we are
+ * sending the raw (already encoded) POST data from a stream source.
+ *
+ * @param boolean $value The value to set.
+ * @return void
+ */
+ public function setStreamingRequest($value)
+ {
+ $this->_streamingRequest = $value;
+ }
+
+ /**
+ * Check whether the client is set to perform streaming requests.
+ *
+ * @return boolean True if yes, false otherwise.
+ */
+ public function getStreamingRequest()
+ {
+ if ($this->_streamingRequest) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Prepare the request body (for POST and PUT requests)
+ *
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ protected function _prepareBody()
+ {
+ if($this->_streamingRequest) {
+ $this->setHeaders(self::CONTENT_LENGTH,
+ $this->raw_post_data->getTotalSize());
+ return $this->raw_post_data;
+ }
+ else {
+ return parent::_prepareBody();
+ }
+ }
+
+ /**
+ * Clear all custom parameters we set.
+ *
+ * @return Zend_Http_Client
+ */
+ public function resetParameters($clearAll = false)
+ {
+ $this->_streamingRequest = false;
+ return parent::resetParameters($clearAll);
+ }
+
+ /**
+ * Set the raw (already encoded) POST data from a stream source.
+ *
+ * This is used to support POSTing from open file handles without
+ * caching the entire body into memory. It is a wrapper around
+ * Zend_Http_Client::setRawData().
+ *
+ * @param string $data The request data
+ * @param string $enctype The encoding type
+ * @return Zend_Http_Client
+ */
+ public function setRawDataStream($data, $enctype = null)
+ {
+ $this->_streamingRequest = true;
+ return $this->setRawData($data, $enctype);
+ }
+
+ /**
+ * Same as Zend_Http_Client::setMethod() except it also creates an
+ * Oauth specific reference to the method type.
+ * Might be defunct and removed in a later iteration.
+ *
+ * @param string $method
+ * @return Zend_Http_Client
+ */
+ public function setMethod($method = self::GET)
+ {
+ if ($method == self::GET) {
+ $this->setRequestMethod(self::GET);
+ } elseif($method == self::POST) {
+ $this->setRequestMethod(self::POST);
+ } elseif($method == self::PUT) {
+ $this->setRequestMethod(self::PUT);
+ } elseif($method == self::DELETE) {
+ $this->setRequestMethod(self::DELETE);
+ } elseif($method == self::HEAD) {
+ $this->setRequestMethod(self::HEAD);
+ }
+ return parent::setMethod($method);
+ }
+
+ /**
+ * Same as Zend_Http_Client::request() except just before the request is
+ * executed, we automatically append any necessary OAuth parameters and
+ * sign the request using the relevant signature method.
+ *
+ * @param string $method
+ * @return Zend_Http_Response
+ */
+ public function request($method = null)
+ {
+ if ($method !== null) {
+ $this->setMethod($method);
+ }
+ $this->prepareOauth();
+ return parent::request();
+ }
+
+ /**
+ * Performs OAuth preparation on the request before sending.
+ *
+ * This primarily means taking a request, correctly encoding and signing
+ * all parameters, and applying the correct OAuth scheme to the method
+ * being used.
+ *
+ * @return void
+ * @throws Zend_Oauth_Exception If POSTBODY scheme requested, but GET request method used; or if invalid request scheme provided
+ */
+ public function prepareOauth()
+ {
+ $requestScheme = $this->getRequestScheme();
+ $requestMethod = $this->getRequestMethod();
+ $query = null;
+ if ($requestScheme == Zend_Oauth::REQUEST_SCHEME_HEADER) {
+ $oauthHeaderValue = $this->getToken()->toHeader(
+ $this->getUri(true),
+ $this->_config,
+ $this->_getSignableParametersAsQueryString()
+ );
+ $this->setHeaders('Authorization', $oauthHeaderValue);
+ } elseif ($requestScheme == Zend_Oauth::REQUEST_SCHEME_POSTBODY) {
+ if ($requestMethod == self::GET) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ 'The client is configured to'
+ . ' pass OAuth parameters through a POST body but request method'
+ . ' is set to GET'
+ );
+ }
+ $raw = $this->getToken()->toQueryString(
+ $this->getUri(true),
+ $this->_config,
+ $this->_getSignableParametersAsQueryString()
+ );
+ $this->setRawData($raw);
+ $this->paramsPost = array();
+ } elseif ($requestScheme == Zend_Oauth::REQUEST_SCHEME_QUERYSTRING) {
+ $params = array();
+ $query = $this->getUri()->getQuery();
+ if ($query) {
+ $queryParts = explode('&', $this->getUri()->getQuery());
+ foreach ($queryParts as $queryPart) {
+ $kvTuple = explode('=', $queryPart);
+ $params[$kvTuple[0]] =
+ (array_key_exists(1, $kvTuple) ? $kvTuple[1] : NULL);
+ }
+ }
+ if (!empty($this->paramsPost)) {
+ $params = array_merge($params, $this->paramsPost);
+ $query = $this->getToken()->toQueryString(
+ $this->getUri(true), $this->_config, $params
+ );
+ }
+ $query = $this->getToken()->toQueryString(
+ $this->getUri(true), $this->_config, $params
+ );
+ $this->getUri()->setQuery($query);
+ $this->paramsGet = array();
+ } else {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Invalid request scheme: ' . $requestScheme);
+ }
+ }
+
+ /**
+ * Collect all signable parameters into a single array across query string
+ * and POST body. These are returned as a properly formatted single
+ * query string.
+ *
+ * @return string
+ */
+ protected function _getSignableParametersAsQueryString()
+ {
+ $params = array();
+ if (!empty($this->paramsGet)) {
+ $params = array_merge($params, $this->paramsGet);
+ $query = $this->getToken()->toQueryString(
+ $this->getUri(true), $this->_config, $params
+ );
+ }
+ if (!empty($this->paramsPost)) {
+ $params = array_merge($params, $this->paramsPost);
+ $query = $this->getToken()->toQueryString(
+ $this->getUri(true), $this->_config, $params
+ );
+ }
+ return $params;
+ }
+
+ /**
+ * Simple Proxy to the current Zend_Oauth_Config method. It's that instance
+ * which holds all configuration methods and values this object also presents
+ * as it's API.
+ *
+ * @param string $method
+ * @param array $args
+ * @return mixed
+ * @throws Zend_Oauth_Exception if method does not exist in config object
+ */
+ public function __call($method, array $args)
+ {
+ if (!method_exists($this->_config, $method)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Method does not exist: ' . $method);
+ }
+ return call_user_func_array(array($this->_config,$method), $args);
+ }
+}
diff --git a/Zend/Oauth/Config.php b/Zend/Oauth/Config.php
new file mode 100644
index 00000000..be708ebe
--- /dev/null
+++ b/Zend/Oauth/Config.php
@@ -0,0 +1,658 @@
+toArray();
+ }
+ $this->setOptions($options);
+ }
+ }
+
+ /**
+ * Parse option array or Zend_Config instance and setup options using their
+ * relevant mutators.
+ *
+ * @param array|Zend_Config $options
+ * @return Zend_Oauth_Config
+ */
+ public function setOptions(array $options)
+ {
+ foreach ($options as $key => $value) {
+ switch ($key) {
+ case 'consumerKey':
+ $this->setConsumerKey($value);
+ break;
+ case 'consumerSecret':
+ $this->setConsumerSecret($value);
+ break;
+ case 'signatureMethod':
+ $this->setSignatureMethod($value);
+ break;
+ case 'version':
+ $this->setVersion($value);
+ break;
+ case 'callbackUrl':
+ $this->setCallbackUrl($value);
+ break;
+ case 'siteUrl':
+ $this->setSiteUrl($value);
+ break;
+ case 'requestTokenUrl':
+ $this->setRequestTokenUrl($value);
+ break;
+ case 'accessTokenUrl':
+ $this->setAccessTokenUrl($value);
+ break;
+ case 'userAuthorizationUrl':
+ $this->setUserAuthorizationUrl($value);
+ break;
+ case 'authorizeUrl':
+ $this->setAuthorizeUrl($value);
+ break;
+ case 'requestMethod':
+ $this->setRequestMethod($value);
+ break;
+ case 'rsaPrivateKey':
+ $this->setRsaPrivateKey($value);
+ break;
+ case 'rsaPublicKey':
+ $this->setRsaPublicKey($value);
+ break;
+ }
+ }
+ if (isset($options['requestScheme'])) {
+ $this->setRequestScheme($options['requestScheme']);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set consumer key
+ *
+ * @param string $key
+ * @return Zend_Oauth_Config
+ */
+ public function setConsumerKey($key)
+ {
+ $this->_consumerKey = $key;
+ return $this;
+ }
+
+ /**
+ * Get consumer key
+ *
+ * @return string
+ */
+ public function getConsumerKey()
+ {
+ return $this->_consumerKey;
+ }
+
+ /**
+ * Set consumer secret
+ *
+ * @param string $secret
+ * @return Zend_Oauth_Config
+ */
+ public function setConsumerSecret($secret)
+ {
+ $this->_consumerSecret = $secret;
+ return $this;
+ }
+
+ /**
+ * Get consumer secret
+ *
+ * Returns RSA private key if set; otherwise, returns any previously set
+ * consumer secret.
+ *
+ * @return string
+ */
+ public function getConsumerSecret()
+ {
+ if ($this->_rsaPrivateKey !== null) {
+ return $this->_rsaPrivateKey;
+ }
+ return $this->_consumerSecret;
+ }
+
+ /**
+ * Set signature method
+ *
+ * @param string $method
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception if unsupported signature method specified
+ */
+ public function setSignatureMethod($method)
+ {
+ $method = strtoupper($method);
+ if (!in_array($method, array(
+ 'HMAC-SHA1', 'HMAC-SHA256', 'RSA-SHA1', 'PLAINTEXT'
+ ))
+ ) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Unsupported signature method: '
+ . $method
+ . '. Supported are HMAC-SHA1, RSA-SHA1, PLAINTEXT and HMAC-SHA256');
+ }
+ $this->_signatureMethod = $method;;
+ return $this;
+ }
+
+ /**
+ * Get signature method
+ *
+ * @return string
+ */
+ public function getSignatureMethod()
+ {
+ return $this->_signatureMethod;
+ }
+
+ /**
+ * Set request scheme
+ *
+ * @param string $scheme
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception if invalid scheme specified, or if POSTBODY set when request method of GET is specified
+ */
+ public function setRequestScheme($scheme)
+ {
+ $scheme = strtolower($scheme);
+ if (!in_array($scheme, array(
+ Zend_Oauth::REQUEST_SCHEME_HEADER,
+ Zend_Oauth::REQUEST_SCHEME_POSTBODY,
+ Zend_Oauth::REQUEST_SCHEME_QUERYSTRING,
+ ))
+ ) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $scheme . '\' is an unsupported request scheme'
+ );
+ }
+ if ($scheme == Zend_Oauth::REQUEST_SCHEME_POSTBODY
+ && $this->getRequestMethod() == Zend_Oauth::GET
+ ) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ 'Cannot set POSTBODY request method if HTTP method set to GET'
+ );
+ }
+ $this->_requestScheme = $scheme;
+ return $this;
+ }
+
+ /**
+ * Get request scheme
+ *
+ * @return string
+ */
+ public function getRequestScheme()
+ {
+ return $this->_requestScheme;
+ }
+
+ /**
+ * Set version
+ *
+ * @param string $version
+ * @return Zend_Oauth_Config
+ */
+ public function setVersion($version)
+ {
+ $this->_version = $version;
+ return $this;
+ }
+
+ /**
+ * Get version
+ *
+ * @return string
+ */
+ public function getVersion()
+ {
+ return $this->_version;
+ }
+
+ /**
+ * Set callback URL
+ *
+ * @param string $url
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid URLs
+ */
+ public function setCallbackUrl($url)
+ {
+ if (!Zend_Uri::check($url)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $url . '\' is not a valid URI'
+ );
+ }
+ $this->_callbackUrl = $url;
+ return $this;
+ }
+
+ /**
+ * Get callback URL
+ *
+ * @return string
+ */
+ public function getCallbackUrl()
+ {
+ return $this->_callbackUrl;
+ }
+
+ /**
+ * Set site URL
+ *
+ * @param string $url
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid URLs
+ */
+ public function setSiteUrl($url)
+ {
+ if (!Zend_Uri::check($url)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $url . '\' is not a valid URI'
+ );
+ }
+ $this->_siteUrl = $url;
+ return $this;
+ }
+
+ /**
+ * Get site URL
+ *
+ * @return string
+ */
+ public function getSiteUrl()
+ {
+ return $this->_siteUrl;
+ }
+
+ /**
+ * Set request token URL
+ *
+ * @param string $url
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid URLs
+ */
+ public function setRequestTokenUrl($url)
+ {
+ if (!Zend_Uri::check($url)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $url . '\' is not a valid URI'
+ );
+ }
+ $this->_requestTokenUrl = rtrim($url, '/');
+ return $this;
+ }
+
+ /**
+ * Get request token URL
+ *
+ * If no request token URL has been set, but a site URL has, returns the
+ * site URL with the string "/request_token" appended.
+ *
+ * @return string
+ */
+ public function getRequestTokenUrl()
+ {
+ if (!$this->_requestTokenUrl && $this->_siteUrl) {
+ return $this->_siteUrl . '/request_token';
+ }
+ return $this->_requestTokenUrl;
+ }
+
+ /**
+ * Set access token URL
+ *
+ * @param string $url
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid URLs
+ */
+ public function setAccessTokenUrl($url)
+ {
+ if (!Zend_Uri::check($url)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $url . '\' is not a valid URI'
+ );
+ }
+ $this->_accessTokenUrl = rtrim($url, '/');
+ return $this;
+ }
+
+ /**
+ * Get access token URL
+ *
+ * If no access token URL has been set, but a site URL has, returns the
+ * site URL with the string "/access_token" appended.
+ *
+ * @return string
+ */
+ public function getAccessTokenUrl()
+ {
+ if (!$this->_accessTokenUrl && $this->_siteUrl) {
+ return $this->_siteUrl . '/access_token';
+ }
+ return $this->_accessTokenUrl;
+ }
+
+ /**
+ * Set user authorization URL
+ *
+ * @param string $url
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid URLs
+ */
+ public function setUserAuthorizationUrl($url)
+ {
+ return $this->setAuthorizeUrl($url);
+ }
+
+ /**
+ * Set authorization URL
+ *
+ * @param string $url
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid URLs
+ */
+ public function setAuthorizeUrl($url)
+ {
+ if (!Zend_Uri::check($url)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $url . '\' is not a valid URI'
+ );
+ }
+ $this->_authorizeUrl = rtrim($url, '/');
+ return $this;
+ }
+
+ /**
+ * Get user authorization URL
+ *
+ * @return string
+ */
+ public function getUserAuthorizationUrl()
+ {
+ return $this->getAuthorizeUrl();
+ }
+
+ /**
+ * Get authorization URL
+ *
+ * If no authorization URL has been set, but a site URL has, returns the
+ * site URL with the string "/authorize" appended.
+ *
+ * @return string
+ */
+ public function getAuthorizeUrl()
+ {
+ if (!$this->_authorizeUrl && $this->_siteUrl) {
+ return $this->_siteUrl . '/authorize';
+ }
+ return $this->_authorizeUrl;
+ }
+
+ /**
+ * Set request method
+ *
+ * @param string $method
+ * @return Zend_Oauth_Config
+ * @throws Zend_Oauth_Exception for invalid request methods
+ */
+ public function setRequestMethod($method)
+ {
+ $method = strtoupper($method);
+ if (!in_array($method, array(
+ Zend_Oauth::GET,
+ Zend_Oauth::POST,
+ Zend_Oauth::PUT,
+ Zend_Oauth::DELETE,
+ ))
+ ) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Invalid method: ' . $method);
+ }
+ $this->_requestMethod = $method;
+ return $this;
+ }
+
+ /**
+ * Get request method
+ *
+ * @return string
+ */
+ public function getRequestMethod()
+ {
+ return $this->_requestMethod;
+ }
+
+ /**
+ * Set RSA public key
+ *
+ * @param Zend_Crypt_Rsa_Key_Public $key
+ * @return Zend_Oauth_Config
+ */
+ public function setRsaPublicKey(Zend_Crypt_Rsa_Key_Public $key)
+ {
+ $this->_rsaPublicKey = $key;
+ return $this;
+ }
+
+ /**
+ * Get RSA public key
+ *
+ * @return Zend_Crypt_Rsa_Key_Public
+ */
+ public function getRsaPublicKey()
+ {
+ return $this->_rsaPublicKey;
+ }
+
+ /**
+ * Set RSA private key
+ *
+ * @param Zend_Crypt_Rsa_Key_Private $key
+ * @return Zend_Oauth_Config
+ */
+ public function setRsaPrivateKey(Zend_Crypt_Rsa_Key_Private $key)
+ {
+ $this->_rsaPrivateKey = $key;
+ return $this;
+ }
+
+ /**
+ * Get RSA private key
+ *
+ * @return Zend_Crypt_Rsa_Key_Private
+ */
+ public function getRsaPrivateKey()
+ {
+ return $this->_rsaPrivateKey;
+ }
+
+ /**
+ * Set OAuth token
+ *
+ * @param Zend_Oauth_Token $token
+ * @return Zend_Oauth_Config
+ */
+ public function setToken(Zend_Oauth_Token $token)
+ {
+ $this->_token = $token;
+ return $this;
+ }
+
+ /**
+ * Get OAuth token
+ *
+ * @return Zend_Oauth_Token
+ */
+ public function getToken()
+ {
+ return $this->_token;
+ }
+}
diff --git a/Zend/Oauth/Config/ConfigInterface.php b/Zend/Oauth/Config/ConfigInterface.php
new file mode 100644
index 00000000..82526a7b
--- /dev/null
+++ b/Zend/Oauth/Config/ConfigInterface.php
@@ -0,0 +1,75 @@
+_config = new Zend_Oauth_Config;
+ if ($options !== null) {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ }
+ $this->_config->setOptions($options);
+ }
+ }
+
+ /**
+ * Attempts to retrieve a Request Token from an OAuth Provider which is
+ * later exchanged for an authorized Access Token used to access the
+ * protected resources exposed by a web service API.
+ *
+ * @param null|array $customServiceParameters Non-OAuth Provider-specified parameters
+ * @param null|string $httpMethod
+ * @param null|Zend_Oauth_Http_RequestToken $request
+ * @return Zend_Oauth_Token_Request
+ */
+ public function getRequestToken(
+ array $customServiceParameters = null,
+ $httpMethod = null,
+ Zend_Oauth_Http_RequestToken $request = null
+ ) {
+ if ($request === null) {
+ $request = new Zend_Oauth_Http_RequestToken($this, $customServiceParameters);
+ } elseif($customServiceParameters !== null) {
+ $request->setParameters($customServiceParameters);
+ }
+ if ($httpMethod !== null) {
+ $request->setMethod($httpMethod);
+ } else {
+ $request->setMethod($this->getRequestMethod());
+ }
+ $this->_requestToken = $request->execute();
+ return $this->_requestToken;
+ }
+
+ /**
+ * After a Request Token is retrieved, the user may be redirected to the
+ * OAuth Provider to authorize the application's access to their
+ * protected resources - the redirect URL being provided by this method.
+ * Once the user has authorized the application for access, they are
+ * redirected back to the application which can now exchange the previous
+ * Request Token for a fully authorized Access Token.
+ *
+ * @param null|array $customServiceParameters
+ * @param null|Zend_Oauth_Token_Request $token
+ * @param null|Zend_OAuth_Http_UserAuthorization $redirect
+ * @return string
+ */
+ public function getRedirectUrl(
+ array $customServiceParameters = null,
+ Zend_Oauth_Token_Request $token = null,
+ Zend_Oauth_Http_UserAuthorization $redirect = null
+ ) {
+ if ($redirect === null) {
+ $redirect = new Zend_Oauth_Http_UserAuthorization($this, $customServiceParameters);
+ } elseif($customServiceParameters !== null) {
+ $redirect->setParameters($customServiceParameters);
+ }
+ if ($token !== null) {
+ $this->_requestToken = $token;
+ }
+ return $redirect->getUrl();
+ }
+
+ /**
+ * Rather than retrieve a redirect URL for use, e.g. from a controller,
+ * one may perform an immediate redirect.
+ *
+ * Sends headers and exit()s on completion.
+ *
+ * @param null|array $customServiceParameters
+ * @param null|Zend_Oauth_Http_UserAuthorization $request
+ * @return void
+ */
+ public function redirect(
+ array $customServiceParameters = null,
+ Zend_Oauth_Http_UserAuthorization $request = null
+ ) {
+ $redirectUrl = $this->getRedirectUrl($customServiceParameters, $request);
+ header('Location: ' . $redirectUrl);
+ exit(1);
+ }
+
+ /**
+ * Retrieve an Access Token in exchange for a previously received/authorized
+ * Request Token.
+ *
+ * @param array $queryData GET data returned in user's redirect from Provider
+ * @param Zend_Oauth_Token_Request Request Token information
+ * @param string $httpMethod
+ * @param Zend_Oauth_Http_AccessToken $request
+ * @return Zend_Oauth_Token_Access
+ * @throws Zend_Oauth_Exception on invalid authorization token, non-matching response authorization token, or unprovided authorization token
+ */
+ public function getAccessToken(
+ $queryData,
+ Zend_Oauth_Token_Request $token,
+ $httpMethod = null,
+ Zend_Oauth_Http_AccessToken $request = null
+ ) {
+ $authorizedToken = new Zend_Oauth_Token_AuthorizedRequest($queryData);
+ if (!$authorizedToken->isValid()) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ 'Response from Service Provider is not a valid authorized request token');
+ }
+ if ($request === null) {
+ $request = new Zend_Oauth_Http_AccessToken($this);
+ }
+
+ // OAuth 1.0a Verifier
+ if (!is_null($authorizedToken->getParam('oauth_verifier'))) {
+ $params = array_merge($request->getParameters(), array(
+ 'oauth_verifier' => $authorizedToken->getParam('oauth_verifier')
+ ));
+ $request->setParameters($params);
+ }
+ if ($httpMethod !== null) {
+ $request->setMethod($httpMethod);
+ } else {
+ $request->setMethod($this->getRequestMethod());
+ }
+ if (isset($token)) {
+ if ($authorizedToken->getToken() !== $token->getToken()) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ 'Authorized token from Service Provider does not match'
+ . ' supplied Request Token details'
+ );
+ }
+ } else {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Request token must be passed to method');
+ }
+ $this->_requestToken = $token;
+ $this->_accessToken = $request->execute();
+ return $this->_accessToken;
+ }
+
+ /**
+ * Return whatever the last Request Token retrieved was while using the
+ * current Consumer instance.
+ *
+ * @return Zend_Oauth_Token_Request
+ */
+ public function getLastRequestToken()
+ {
+ return $this->_requestToken;
+ }
+
+ /**
+ * Return whatever the last Access Token retrieved was while using the
+ * current Consumer instance.
+ *
+ * @return Zend_Oauth_Token_Access
+ */
+ public function getLastAccessToken()
+ {
+ return $this->_accessToken;
+ }
+
+ /**
+ * Alias to self::getLastAccessToken()
+ *
+ * @return Zend_Oauth_Token_Access
+ */
+ public function getToken()
+ {
+ return $this->_accessToken;
+ }
+
+ /**
+ * Simple Proxy to the current Zend_Oauth_Config method. It's that instance
+ * which holds all configuration methods and values this object also presents
+ * as it's API.
+ *
+ * @param string $method
+ * @param array $args
+ * @return mixed
+ * @throws Zend_Oauth_Exception if method does not exist in config object
+ */
+ public function __call($method, array $args)
+ {
+ if (!method_exists($this->_config, $method)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Method does not exist: '.$method);
+ }
+ return call_user_func_array(array($this->_config,$method), $args);
+ }
+}
diff --git a/Zend/Oauth/Exception.php b/Zend/Oauth/Exception.php
new file mode 100644
index 00000000..046920ec
--- /dev/null
+++ b/Zend/Oauth/Exception.php
@@ -0,0 +1,33 @@
+_consumer = $consumer;
+ $this->_preferredRequestScheme = $this->_consumer->getRequestScheme();
+ if ($parameters !== null) {
+ $this->setParameters($parameters);
+ }
+ if ($utility !== null) {
+ $this->_httpUtility = $utility;
+ } else {
+ $this->_httpUtility = new Zend_Oauth_Http_Utility;
+ }
+ }
+
+ /**
+ * Set a preferred HTTP request method.
+ *
+ * @param string $method
+ * @return Zend_Oauth_Http
+ */
+ public function setMethod($method)
+ {
+ if (!in_array($method, array(Zend_Oauth::POST, Zend_Oauth::GET))) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('invalid HTTP method: ' . $method);
+ }
+ $this->_preferredRequestMethod = $method;
+ return $this;
+ }
+
+ /**
+ * Preferred HTTP request method accessor.
+ *
+ * @return string
+ */
+ public function getMethod()
+ {
+ return $this->_preferredRequestMethod;
+ }
+
+ /**
+ * Mutator to set an array of custom parameters for the HTTP request.
+ *
+ * @param array $customServiceParameters
+ * @return Zend_Oauth_Http
+ */
+ public function setParameters(array $customServiceParameters)
+ {
+ $this->_parameters = $customServiceParameters;
+ return $this;
+ }
+
+ /**
+ * Accessor for an array of custom parameters.
+ *
+ * @return array
+ */
+ public function getParameters()
+ {
+ return $this->_parameters;
+ }
+
+ /**
+ * Return the Consumer instance in use.
+ *
+ * @return Zend_Oauth_Consumer
+ */
+ public function getConsumer()
+ {
+ return $this->_consumer;
+ }
+
+ /**
+ * Commence a request cycle where the current HTTP method and OAuth
+ * request scheme set an upper preferred HTTP request style and where
+ * failures generate a new HTTP request style further down the OAuth
+ * preference list for OAuth Request Schemes.
+ * On success, return the Request object that results for processing.
+ *
+ * @param array $params
+ * @return Zend_Http_Response
+ * @throws Zend_Oauth_Exception on HTTP request errors
+ * @todo Remove cycling?; Replace with upfront do-or-die configuration
+ */
+ public function startRequestCycle(array $params)
+ {
+ $response = null;
+ $body = null;
+ $status = null;
+ try {
+ $response = $this->_attemptRequest($params);
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception('Error in HTTP request', null, $e);
+ }
+ if ($response !== null) {
+ $body = $response->getBody();
+ $status = $response->getStatus();
+ }
+ if ($response === null // Request failure/exception
+ || $status == 500 // Internal Server Error
+ || $status == 400 // Bad Request
+ || $status == 401 // Unauthorized
+ || empty($body) // Missing token
+ ) {
+ $this->_assessRequestAttempt($response);
+ $response = $this->startRequestCycle($params);
+ }
+ return $response;
+ }
+
+ /**
+ * Return an instance of Zend_Http_Client configured to use the Query
+ * String scheme for an OAuth driven HTTP request.
+ *
+ * @param array $params
+ * @param string $url
+ * @return Zend_Http_Client
+ */
+ public function getRequestSchemeQueryStringClient(array $params, $url)
+ {
+ $client = Zend_Oauth::getHttpClient();
+ $client->setUri($url);
+ $client->getUri()->setQuery(
+ $this->_httpUtility->toEncodedQueryString($params)
+ );
+ $client->setMethod($this->_preferredRequestMethod);
+ return $client;
+ }
+
+ /**
+ * Manages the switch from OAuth request scheme to another lower preference
+ * scheme during a request cycle.
+ *
+ * @param Zend_Http_Response
+ * @return void
+ * @throws Zend_Oauth_Exception if unable to retrieve valid token response
+ */
+ protected function _assessRequestAttempt(Zend_Http_Response $response = null)
+ {
+ switch ($this->_preferredRequestScheme) {
+ case Zend_Oauth::REQUEST_SCHEME_HEADER:
+ $this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_POSTBODY;
+ break;
+ case Zend_Oauth::REQUEST_SCHEME_POSTBODY:
+ $this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_QUERYSTRING;
+ break;
+ default:
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ 'Could not retrieve a valid Token response from Token URL:'
+ . ($response !== null
+ ? PHP_EOL . $response->getBody()
+ : ' No body - check for headers')
+ );
+ }
+ }
+
+ /**
+ * Generates a valid OAuth Authorization header based on the provided
+ * parameters and realm.
+ *
+ * @param array $params
+ * @param string $realm
+ * @return string
+ */
+ protected function _toAuthorizationHeader(array $params, $realm = null)
+ {
+ $headerValue = array();
+ $headerValue[] = 'OAuth realm="' . $realm . '"';
+ foreach ($params as $key => $value) {
+ if (!preg_match("/^oauth_/", $key)) {
+ continue;
+ }
+ $headerValue[] = Zend_Oauth_Http_Utility::urlEncode($key)
+ . '="'
+ . Zend_Oauth_Http_Utility::urlEncode($value)
+ . '"';
+ }
+ return implode(",", $headerValue);
+ }
+}
diff --git a/Zend/Oauth/Http/AccessToken.php b/Zend/Oauth/Http/AccessToken.php
new file mode 100644
index 00000000..d234617f
--- /dev/null
+++ b/Zend/Oauth/Http/AccessToken.php
@@ -0,0 +1,189 @@
+assembleParams();
+ $response = $this->startRequestCycle($params);
+ $return = new Zend_Oauth_Token_Access($response);
+ return $return;
+ }
+
+ /**
+ * Assemble all parameters for an OAuth Access Token request.
+ *
+ * @return array
+ */
+ public function assembleParams()
+ {
+ $params = array(
+ 'oauth_consumer_key' => $this->_consumer->getConsumerKey(),
+ 'oauth_nonce' => $this->_httpUtility->generateNonce(),
+ 'oauth_signature_method' => $this->_consumer->getSignatureMethod(),
+ 'oauth_timestamp' => $this->_httpUtility->generateTimestamp(),
+ 'oauth_token' => $this->_consumer->getLastRequestToken()->getToken(),
+ 'oauth_version' => $this->_consumer->getVersion(),
+ );
+
+ if (!empty($this->_parameters)) {
+ $params = array_merge($params, $this->_parameters);
+ }
+
+ $params['oauth_signature'] = $this->_httpUtility->sign(
+ $params,
+ $this->_consumer->getSignatureMethod(),
+ $this->_consumer->getConsumerSecret(),
+ $this->_consumer->getLastRequestToken()->getTokenSecret(),
+ $this->_preferredRequestMethod,
+ $this->_consumer->getAccessTokenUrl()
+ );
+
+ return $params;
+ }
+
+ /**
+ * Generate and return a HTTP Client configured for the Header Request Scheme
+ * specified by OAuth, for use in requesting an Access Token.
+ *
+ * @param array $params
+ * @return Zend_Http_Client
+ */
+ public function getRequestSchemeHeaderClient(array $params)
+ {
+ $params = $this->_cleanParamsOfIllegalCustomParameters($params);
+ $headerValue = $this->_toAuthorizationHeader($params);
+ $client = Zend_Oauth::getHttpClient();
+
+ $client->setUri($this->_consumer->getAccessTokenUrl());
+ $client->setHeaders('Authorization', $headerValue);
+ $client->setMethod($this->_preferredRequestMethod);
+
+ return $client;
+ }
+
+ /**
+ * Generate and return a HTTP Client configured for the POST Body Request
+ * Scheme specified by OAuth, for use in requesting an Access Token.
+ *
+ * @param array $params
+ * @return Zend_Http_Client
+ */
+ public function getRequestSchemePostBodyClient(array $params)
+ {
+ $params = $this->_cleanParamsOfIllegalCustomParameters($params);
+ $client = Zend_Oauth::getHttpClient();
+ $client->setUri($this->_consumer->getAccessTokenUrl());
+ $client->setMethod($this->_preferredRequestMethod);
+ $client->setRawData(
+ $this->_httpUtility->toEncodedQueryString($params)
+ );
+ $client->setHeaders(
+ Zend_Http_Client::CONTENT_TYPE,
+ Zend_Http_Client::ENC_URLENCODED
+ );
+ return $client;
+ }
+
+ /**
+ * Generate and return a HTTP Client configured for the Query String Request
+ * Scheme specified by OAuth, for use in requesting an Access Token.
+ *
+ * @param array $params
+ * @param string $url
+ * @return Zend_Http_Client
+ */
+ public function getRequestSchemeQueryStringClient(array $params, $url)
+ {
+ $params = $this->_cleanParamsOfIllegalCustomParameters($params);
+ return parent::getRequestSchemeQueryStringClient($params, $url);
+ }
+
+ /**
+ * Attempt a request based on the current configured OAuth Request Scheme and
+ * return the resulting HTTP Response.
+ *
+ * @param array $params
+ * @return Zend_Http_Response
+ */
+ protected function _attemptRequest(array $params)
+ {
+ switch ($this->_preferredRequestScheme) {
+ case Zend_Oauth::REQUEST_SCHEME_HEADER:
+ $httpClient = $this->getRequestSchemeHeaderClient($params);
+ break;
+ case Zend_Oauth::REQUEST_SCHEME_POSTBODY:
+ $httpClient = $this->getRequestSchemePostBodyClient($params);
+ break;
+ case Zend_Oauth::REQUEST_SCHEME_QUERYSTRING:
+ $httpClient = $this->getRequestSchemeQueryStringClient($params,
+ $this->_consumer->getAccessTokenUrl());
+ break;
+ }
+ return $httpClient->request();
+ }
+
+ /**
+ * Access Token requests specifically may not contain non-OAuth parameters.
+ * So these should be striped out and excluded. Detection is easy since
+ * specified OAuth parameters start with "oauth_", Extension params start
+ * with "xouth_", and no other parameters should use these prefixes.
+ *
+ * xouth params are not currently allowable.
+ *
+ * @param array $params
+ * @return array
+ */
+ protected function _cleanParamsOfIllegalCustomParameters(array $params)
+ {
+ foreach ($params as $key=>$value) {
+ if (!preg_match("/^oauth_/", $key)) {
+ unset($params[$key]);
+ }
+ }
+ return $params;
+ }
+}
diff --git a/Zend/Oauth/Http/RequestToken.php b/Zend/Oauth/Http/RequestToken.php
new file mode 100644
index 00000000..812ce2df
--- /dev/null
+++ b/Zend/Oauth/Http/RequestToken.php
@@ -0,0 +1,162 @@
+assembleParams();
+ $response = $this->startRequestCycle($params);
+ $return = new Zend_Oauth_Token_Request($response);
+ return $return;
+ }
+
+ /**
+ * Assemble all parameters for an OAuth Request Token request.
+ *
+ * @return array
+ */
+ public function assembleParams()
+ {
+ $params = array(
+ 'oauth_consumer_key' => $this->_consumer->getConsumerKey(),
+ 'oauth_nonce' => $this->_httpUtility->generateNonce(),
+ 'oauth_timestamp' => $this->_httpUtility->generateTimestamp(),
+ 'oauth_signature_method' => $this->_consumer->getSignatureMethod(),
+ 'oauth_version' => $this->_consumer->getVersion(),
+ );
+
+ // indicates we support 1.0a
+ if ($this->_consumer->getCallbackUrl()) {
+ $params['oauth_callback'] = $this->_consumer->getCallbackUrl();
+ } else {
+ $params['oauth_callback'] = 'oob';
+ }
+
+ if (!empty($this->_parameters)) {
+ $params = array_merge($params, $this->_parameters);
+ }
+
+ $params['oauth_signature'] = $this->_httpUtility->sign(
+ $params,
+ $this->_consumer->getSignatureMethod(),
+ $this->_consumer->getConsumerSecret(),
+ null,
+ $this->_preferredRequestMethod,
+ $this->_consumer->getRequestTokenUrl()
+ );
+
+ return $params;
+ }
+
+ /**
+ * Generate and return a HTTP Client configured for the Header Request Scheme
+ * specified by OAuth, for use in requesting a Request Token.
+ *
+ * @param array $params
+ * @return Zend_Http_Client
+ */
+ public function getRequestSchemeHeaderClient(array $params)
+ {
+ $headerValue = $this->_httpUtility->toAuthorizationHeader(
+ $params
+ );
+ $client = Zend_Oauth::getHttpClient();
+ $client->setUri($this->_consumer->getRequestTokenUrl());
+ $client->setHeaders('Authorization', $headerValue);
+ $rawdata = $this->_httpUtility->toEncodedQueryString($params, true);
+ if (!empty($rawdata)) {
+ $client->setRawData($rawdata);
+ }
+ $client->setMethod($this->_preferredRequestMethod);
+ return $client;
+ }
+
+ /**
+ * Generate and return a HTTP Client configured for the POST Body Request
+ * Scheme specified by OAuth, for use in requesting a Request Token.
+ *
+ * @param array $params
+ * @return Zend_Http_Client
+ */
+ public function getRequestSchemePostBodyClient(array $params)
+ {
+ $client = Zend_Oauth::getHttpClient();
+ $client->setUri($this->_consumer->getRequestTokenUrl());
+ $client->setMethod($this->_preferredRequestMethod);
+ $client->setRawData(
+ $this->_httpUtility->toEncodedQueryString($params)
+ );
+ $client->setHeaders(
+ Zend_Http_Client::CONTENT_TYPE,
+ Zend_Http_Client::ENC_URLENCODED
+ );
+ return $client;
+ }
+
+ /**
+ * Attempt a request based on the current configured OAuth Request Scheme and
+ * return the resulting HTTP Response.
+ *
+ * @param array $params
+ * @return Zend_Http_Response
+ */
+ protected function _attemptRequest(array $params)
+ {
+ switch ($this->_preferredRequestScheme) {
+ case Zend_Oauth::REQUEST_SCHEME_HEADER:
+ $httpClient = $this->getRequestSchemeHeaderClient($params);
+ break;
+ case Zend_Oauth::REQUEST_SCHEME_POSTBODY:
+ $httpClient = $this->getRequestSchemePostBodyClient($params);
+ break;
+ case Zend_Oauth::REQUEST_SCHEME_QUERYSTRING:
+ $httpClient = $this->getRequestSchemeQueryStringClient($params,
+ $this->_consumer->getRequestTokenUrl());
+ break;
+ }
+ return $httpClient->request();
+ }
+}
diff --git a/Zend/Oauth/Http/UserAuthorization.php b/Zend/Oauth/Http/UserAuthorization.php
new file mode 100644
index 00000000..02c0c3a8
--- /dev/null
+++ b/Zend/Oauth/Http/UserAuthorization.php
@@ -0,0 +1,78 @@
+assembleParams();
+ $uri = Zend_Uri_Http::fromString($this->_consumer->getUserAuthorizationUrl());
+
+ $uri->setQuery(
+ $this->_httpUtility->toEncodedQueryString($params)
+ );
+
+ return $uri->getUri();
+ }
+
+ /**
+ * Assemble all parameters for inclusion in a redirect URL.
+ *
+ * @return array
+ */
+ public function assembleParams()
+ {
+ $params = array(
+ 'oauth_token' => $this->_consumer->getLastRequestToken()->getToken(),
+ );
+
+ if (!Zend_Oauth_Client::$supportsRevisionA) {
+ $callback = $this->_consumer->getCallbackUrl();
+ if (!empty($callback)) {
+ $params['oauth_callback'] = $callback;
+ }
+ }
+
+ if (!empty($this->_parameters)) {
+ $params = array_merge($params, $this->_parameters);
+ }
+
+ return $params;
+ }
+}
diff --git a/Zend/Oauth/Http/Utility.php b/Zend/Oauth/Http/Utility.php
new file mode 100644
index 00000000..26215a6d
--- /dev/null
+++ b/Zend/Oauth/Http/Utility.php
@@ -0,0 +1,217 @@
+ $config->getConsumerKey(),
+ 'oauth_nonce' => $this->generateNonce(),
+ 'oauth_signature_method' => $config->getSignatureMethod(),
+ 'oauth_timestamp' => $this->generateTimestamp(),
+ 'oauth_version' => $config->getVersion(),
+ );
+
+ if ($config->getToken()->getToken() != null) {
+ $params['oauth_token'] = $config->getToken()->getToken();
+ }
+
+
+ if ($serviceProviderParams !== null) {
+ $params = array_merge($params, $serviceProviderParams);
+ }
+
+ $params['oauth_signature'] = $this->sign(
+ $params,
+ $config->getSignatureMethod(),
+ $config->getConsumerSecret(),
+ $config->getToken()->getTokenSecret(),
+ $config->getRequestMethod(),
+ $url
+ );
+
+ return $params;
+ }
+
+ /**
+ * Given both OAuth parameters and any custom parametere, generate an
+ * encoded query string. This method expects parameters to have been
+ * assembled and signed beforehand.
+ *
+ * @param array $params
+ * @param bool $customParamsOnly Ignores OAuth params e.g. for requests using OAuth Header
+ * @return string
+ */
+ public function toEncodedQueryString(array $params, $customParamsOnly = false)
+ {
+ if ($customParamsOnly) {
+ foreach ($params as $key=>$value) {
+ if (preg_match("/^oauth_/", $key)) {
+ unset($params[$key]);
+ }
+ }
+ }
+ $encodedParams = array();
+ foreach ($params as $key => $value) {
+ $encodedParams[] = self::urlEncode($key)
+ . '='
+ . self::urlEncode($value);
+ }
+ return implode('&', $encodedParams);
+ }
+
+ /**
+ * Cast to authorization header
+ *
+ * @param array $params
+ * @param null|string $realm
+ * @param bool $excludeCustomParams
+ * @return void
+ */
+ public function toAuthorizationHeader(array $params, $realm = null, $excludeCustomParams = true)
+ {
+ $headerValue = array(
+ 'OAuth realm="' . $realm . '"',
+ );
+
+ foreach ($params as $key => $value) {
+ if ($excludeCustomParams) {
+ if (!preg_match("/^oauth_/", $key)) {
+ continue;
+ }
+ }
+ $headerValue[] = self::urlEncode($key)
+ . '="'
+ . self::urlEncode($value) . '"';
+ }
+ return implode(",", $headerValue);
+ }
+
+ /**
+ * Sign request
+ *
+ * @param array $params
+ * @param string $signatureMethod
+ * @param string $consumerSecret
+ * @param null|string $tokenSecret
+ * @param null|string $method
+ * @param null|string $url
+ * @return string
+ */
+ public function sign(
+ array $params, $signatureMethod, $consumerSecret, $tokenSecret = null, $method = null, $url = null
+ ) {
+ $className = '';
+ $hashAlgo = null;
+ $parts = explode('-', $signatureMethod);
+ if (count($parts) > 1) {
+ $className = 'Zend_Oauth_Signature_' . ucfirst(strtolower($parts[0]));
+ $hashAlgo = $parts[1];
+ } else {
+ $className = 'Zend_Oauth_Signature_' . ucfirst(strtolower($signatureMethod));
+ }
+
+ require_once str_replace('_', '/', $className) . '.php';
+ $signatureObject = new $className($consumerSecret, $tokenSecret, $hashAlgo);
+ return $signatureObject->sign($params, $method, $url);
+ }
+
+ /**
+ * Parse query string
+ *
+ * @param mixed $query
+ * @return array
+ */
+ public function parseQueryString($query)
+ {
+ $params = array();
+ if (empty($query)) {
+ return array();
+ }
+
+ // Not remotely perfect but beats parse_str() which converts
+ // periods and uses urldecode, not rawurldecode.
+ $parts = explode('&', $query);
+ foreach ($parts as $pair) {
+ $kv = explode('=', $pair);
+ $params[rawurldecode($kv[0])] = rawurldecode($kv[1]);
+ }
+ return $params;
+ }
+
+ /**
+ * Generate nonce
+ *
+ * @return string
+ */
+ public function generateNonce()
+ {
+ return md5(uniqid(rand(), true));
+ }
+
+ /**
+ * Generate timestamp
+ *
+ * @return int
+ */
+ public function generateTimestamp()
+ {
+ return time();
+ }
+
+ /**
+ * urlencode a value
+ *
+ * @param string $value
+ * @return string
+ */
+ public static function urlEncode($value)
+ {
+ $encoded = rawurlencode($value);
+ $encoded = str_replace('%7E', '~', $encoded);
+ return $encoded;
+ }
+}
diff --git a/Zend/Oauth/Signature/Hmac.php b/Zend/Oauth/Signature/Hmac.php
new file mode 100644
index 00000000..e24be170
--- /dev/null
+++ b/Zend/Oauth/Signature/Hmac.php
@@ -0,0 +1,54 @@
+_key,
+ $this->_hashAlgorithm,
+ $this->_getBaseSignatureString($params, $method, $url),
+ Zend_Crypt_Hmac::BINARY
+ );
+ return base64_encode($binaryHash);
+ }
+}
diff --git a/Zend/Oauth/Signature/Plaintext.php b/Zend/Oauth/Signature/Plaintext.php
new file mode 100644
index 00000000..5486d5b4
--- /dev/null
+++ b/Zend/Oauth/Signature/Plaintext.php
@@ -0,0 +1,49 @@
+_tokenSecret === null) {
+ return $this->_consumerSecret . '&';
+ }
+ $return = implode('&', array($this->_consumerSecret, $this->_tokenSecret));
+ return $return;
+ }
+}
diff --git a/Zend/Oauth/Signature/Rsa.php b/Zend/Oauth/Signature/Rsa.php
new file mode 100644
index 00000000..1226a727
--- /dev/null
+++ b/Zend/Oauth/Signature/Rsa.php
@@ -0,0 +1,65 @@
+setHashAlgorithm($this->_hashAlgorithm);
+ $sign = $rsa->sign(
+ $this->_getBaseSignatureString($params, $method, $url),
+ $this->_key,
+ Zend_Crypt_Rsa::BASE64
+ );
+ return $sign;
+ }
+
+ /**
+ * Assemble encryption key
+ *
+ * @return string
+ */
+ protected function _assembleKey()
+ {
+ return $this->_consumerSecret;
+ }
+}
diff --git a/Zend/Oauth/Signature/SignatureAbstract.php b/Zend/Oauth/Signature/SignatureAbstract.php
new file mode 100644
index 00000000..8bf84368
--- /dev/null
+++ b/Zend/Oauth/Signature/SignatureAbstract.php
@@ -0,0 +1,183 @@
+_consumerSecret = $consumerSecret;
+ if (isset($tokenSecret)) {
+ $this->_tokenSecret = $tokenSecret;
+ }
+ $this->_key = $this->_assembleKey();
+ if (isset($hashAlgo)) {
+ $this->_hashAlgorithm = $hashAlgo;
+ }
+ }
+
+ /**
+ * Sign a request
+ *
+ * @param array $params
+ * @param null|string $method
+ * @param null|string $url
+ * @return string
+ */
+ public abstract function sign(array $params, $method = null, $url = null);
+
+ /**
+ * Normalize the base signature URL
+ *
+ * @param string $url
+ * @return string
+ */
+ public function normaliseBaseSignatureUrl($url)
+ {
+ $uri = Zend_Uri_Http::fromString($url);
+ if ($uri->getScheme() == 'http' && $uri->getPort() == '80') {
+ $uri->setPort('');
+ } elseif ($uri->getScheme() == 'https' && $uri->getPort() == '443') {
+ $uri->setPort('');
+ }
+ $uri->setQuery('');
+ $uri->setFragment('');
+ $uri->setHost(strtolower($uri->getHost()));
+ return $uri->getUri(true);
+ }
+
+ /**
+ * Assemble key from consumer and token secrets
+ *
+ * @return string
+ */
+ protected function _assembleKey()
+ {
+ $parts = array($this->_consumerSecret);
+ if ($this->_tokenSecret !== null) {
+ $parts[] = $this->_tokenSecret;
+ }
+ foreach ($parts as $key => $secret) {
+ $parts[$key] = Zend_Oauth_Http_Utility::urlEncode($secret);
+ }
+ return implode('&', $parts);
+ }
+
+ /**
+ * Get base signature string
+ *
+ * @param array $params
+ * @param null|string $method
+ * @param null|string $url
+ * @return string
+ */
+ protected function _getBaseSignatureString(array $params, $method = null, $url = null)
+ {
+ $encodedParams = array();
+ foreach ($params as $key => $value) {
+ $encodedParams[Zend_Oauth_Http_Utility::urlEncode($key)] =
+ Zend_Oauth_Http_Utility::urlEncode($value);
+ }
+ $baseStrings = array();
+ if (isset($method)) {
+ $baseStrings[] = strtoupper($method);
+ }
+ if (isset($url)) {
+ // should normalise later
+ $baseStrings[] = Zend_Oauth_Http_Utility::urlEncode(
+ $this->normaliseBaseSignatureUrl($url)
+ );
+ }
+ if (isset($encodedParams['oauth_signature'])) {
+ unset($encodedParams['oauth_signature']);
+ }
+ $baseStrings[] = Zend_Oauth_Http_Utility::urlEncode(
+ $this->_toByteValueOrderedQueryString($encodedParams)
+ );
+ return implode('&', $baseStrings);
+ }
+
+ /**
+ * Transform an array to a byte value ordered query string
+ *
+ * @param array $params
+ * @return string
+ */
+ protected function _toByteValueOrderedQueryString(array $params)
+ {
+ $return = array();
+ uksort($params, 'strnatcmp');
+ foreach ($params as $key => $value) {
+ if (is_array($value)) {
+ natsort($value);
+ foreach ($value as $keyduplicate) {
+ $return[] = $key . '=' . $keyduplicate;
+ }
+ } else {
+ $return[] = $key . '=' . $value;
+ }
+ }
+ return implode('&', $return);
+ }
+}
diff --git a/Zend/Oauth/Token.php b/Zend/Oauth/Token.php
new file mode 100644
index 00000000..c706699d
--- /dev/null
+++ b/Zend/Oauth/Token.php
@@ -0,0 +1,285 @@
+_response = $response;
+ $params = $this->_parseParameters($response);
+ if (count($params) > 0) {
+ $this->setParams($params);
+ }
+ }
+ if ($utility !== null) {
+ $this->_httpUtility = $utility;
+ } else {
+ $this->_httpUtility = new Zend_Oauth_Http_Utility;
+ }
+ }
+
+ /**
+ * Attempts to validate the Token parsed from the HTTP response - really
+ * it's just very basic existence checks which are minimal.
+ *
+ * @return bool
+ */
+ public function isValid()
+ {
+ if (isset($this->_params[self::TOKEN_PARAM_KEY])
+ && !empty($this->_params[self::TOKEN_PARAM_KEY])
+ && isset($this->_params[self::TOKEN_SECRET_PARAM_KEY])
+ ) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Return the HTTP response object used to initialise this instance.
+ *
+ * @return Zend_Http_Response
+ */
+ public function getResponse()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Sets the value for the this Token's secret which may be used when signing
+ * requests with this Token.
+ *
+ * @param string $secret
+ * @return Zend_Oauth_Token
+ */
+ public function setTokenSecret($secret)
+ {
+ $this->setParam(self::TOKEN_SECRET_PARAM_KEY, $secret);
+ return $this;
+ }
+
+ /**
+ * Retrieve this Token's secret which may be used when signing
+ * requests with this Token.
+ *
+ * @return string
+ */
+ public function getTokenSecret()
+ {
+ return $this->getParam(self::TOKEN_SECRET_PARAM_KEY);
+ }
+
+ /**
+ * Sets the value for a parameter (e.g. token secret or other) and run
+ * a simple filter to remove any trailing newlines.
+ *
+ * @param string $key
+ * @param string $value
+ * @return Zend_Oauth_Token
+ */
+ public function setParam($key, $value)
+ {
+ $this->_params[$key] = trim($value, "\n");
+ return $this;
+ }
+
+ /**
+ * Sets the value for some parameters (e.g. token secret or other) and run
+ * a simple filter to remove any trailing newlines.
+ *
+ * @param array $params
+ * @return Zend_Oauth_Token
+ */
+ public function setParams(array $params)
+ {
+ foreach ($params as $key=>$value) {
+ $this->setParam($key, $value);
+ }
+ return $this;
+ }
+
+ /**
+ * Get the value for a parameter (e.g. token secret or other).
+ *
+ * @param string $key
+ * @return mixed
+ */
+ public function getParam($key)
+ {
+ if (isset($this->_params[$key])) {
+ return $this->_params[$key];
+ }
+ return null;
+ }
+
+ /**
+ * Sets the value for a Token.
+ *
+ * @param string $token
+ * @return Zend_Oauth_Token
+ */
+ public function setToken($token)
+ {
+ $this->setParam(self::TOKEN_PARAM_KEY, $token);
+ return $this;
+ }
+
+ /**
+ * Gets the value for a Token.
+ *
+ * @return string
+ */
+ public function getToken()
+ {
+ return $this->getParam(self::TOKEN_PARAM_KEY);
+ }
+
+ /**
+ * Generic accessor to enable access as public properties.
+ *
+ * @return string
+ */
+ public function __get($key)
+ {
+ return $this->getParam($key);
+ }
+
+ /**
+ * Generic mutator to enable access as public properties.
+ *
+ * @param string $key
+ * @param string $value
+ * @return void
+ */
+ public function __set($key, $value)
+ {
+ $this->setParam($key, $value);
+ }
+
+ /**
+ * Convert Token to a string, specifically a raw encoded query string.
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ return $this->_httpUtility->toEncodedQueryString($this->_params);
+ }
+
+ /**
+ * Convert Token to a string, specifically a raw encoded query string.
+ * Aliases to self::toString()
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->toString();
+ }
+
+ /**
+ * Parse a HTTP response body and collect returned parameters
+ * as raw url decoded key-value pairs in an associative array.
+ *
+ * @param Zend_Http_Response $response
+ * @return array
+ */
+ protected function _parseParameters(Zend_Http_Response $response)
+ {
+ $params = array();
+ $body = $response->getBody();
+ if (empty($body)) {
+ return;
+ }
+
+ // validate body based on acceptable characters...todo
+ $parts = explode('&', $body);
+ foreach ($parts as $kvpair) {
+ $pair = explode('=', $kvpair);
+ $params[rawurldecode($pair[0])] = rawurldecode($pair[1]);
+ }
+ return $params;
+ }
+
+ /**
+ * Limit serialisation stored data to the parameters
+ */
+ public function __sleep()
+ {
+ return array('_params');
+ }
+
+ /**
+ * After serialisation, re-instantiate a HTTP utility class for use
+ */
+ public function __wakeup()
+ {
+ if ($this->_httpUtility === null) {
+ $this->_httpUtility = new Zend_Oauth_Http_Utility;
+ }
+ }
+}
diff --git a/Zend/Oauth/Token/Access.php b/Zend/Oauth/Token/Access.php
new file mode 100644
index 00000000..071cee55
--- /dev/null
+++ b/Zend/Oauth/Token/Access.php
@@ -0,0 +1,99 @@
+_httpUtility->assembleParams($url, $config, $customParams);
+ return $this->_httpUtility->toAuthorizationHeader($params, $realm);
+ }
+
+ /**
+ * Cast to HTTP query string
+ *
+ * @param mixed $url
+ * @param Zend_Oauth_Config_ConfigInterface $config
+ * @param null|array $params
+ * @return string
+ */
+ public function toQueryString($url, Zend_Oauth_Config_ConfigInterface $config, array $params = null)
+ {
+ if (!Zend_Uri::check($url)) {
+ require_once 'Zend/Oauth/Exception.php';
+ throw new Zend_Oauth_Exception(
+ '\'' . $url . '\' is not a valid URI'
+ );
+ }
+ $params = $this->_httpUtility->assembleParams($url, $config, $params);
+ return $this->_httpUtility->toEncodedQueryString($params);
+ }
+
+ /**
+ * Get OAuth client
+ *
+ * @param array $oauthOptions
+ * @param null|string $uri
+ * @param null|array|Zend_Config $config
+ * @param bool $excludeCustomParamsFromHeader
+ * @return Zend_Oauth_Client
+ */
+ public function getHttpClient(array $oauthOptions, $uri = null, $config = null, $excludeCustomParamsFromHeader = true)
+ {
+ $client = new Zend_Oauth_Client($oauthOptions, $uri, $config, $excludeCustomParamsFromHeader);
+ $client->setToken($this);
+ return $client;
+ }
+}
diff --git a/Zend/Oauth/Token/AuthorizedRequest.php b/Zend/Oauth/Token/AuthorizedRequest.php
new file mode 100644
index 00000000..b1d946be
--- /dev/null
+++ b/Zend/Oauth/Token/AuthorizedRequest.php
@@ -0,0 +1,102 @@
+_data = $data;
+ $params = $this->_parseData();
+ if (count($params) > 0) {
+ $this->setParams($params);
+ }
+ }
+ if ($utility !== null) {
+ $this->_httpUtility = $utility;
+ } else {
+ $this->_httpUtility = new Zend_Oauth_Http_Utility;
+ }
+ }
+
+ /**
+ * Retrieve token data
+ *
+ * @return array
+ */
+ public function getData()
+ {
+ return $this->_data;
+ }
+
+ /**
+ * Indicate if token is valid
+ *
+ * @return bool
+ */
+ public function isValid()
+ {
+ if (isset($this->_params[self::TOKEN_PARAM_KEY])
+ && !empty($this->_params[self::TOKEN_PARAM_KEY])
+ ) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Parse string data into array
+ *
+ * @return array
+ */
+ protected function _parseData()
+ {
+ $params = array();
+ if (empty($this->_data)) {
+ return;
+ }
+ foreach ($this->_data as $key => $value) {
+ $params[rawurldecode($key)] = rawurldecode($value);
+ }
+ return $params;
+ }
+}
diff --git a/Zend/Oauth/Token/Request.php b/Zend/Oauth/Token/Request.php
new file mode 100644
index 00000000..59f1695b
--- /dev/null
+++ b/Zend/Oauth/Token/Request.php
@@ -0,0 +1,50 @@
+_params[Zend_Oauth_Token::TOKEN_PARAM_CALLBACK_CONFIRMED])) {
+ Zend_Oauth_Client::$supportsRevisionA = true;
+ }
+ }
+}
diff --git a/Zend/Registry.php b/Zend/Registry.php
new file mode 100644
index 00000000..1d003ef9
--- /dev/null
+++ b/Zend/Registry.php
@@ -0,0 +1,209 @@
+offsetExists($index)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("No entry is registered for key '$index'");
+ }
+
+ return $instance->offsetGet($index);
+ }
+
+ /**
+ * setter method, basically same as offsetSet().
+ *
+ * This method can be called from an object of type Zend_Registry, or it
+ * can be called statically. In the latter case, it uses the default
+ * static instance stored in the class.
+ *
+ * @param string $index The location in the ArrayObject in which to store
+ * the value.
+ * @param mixed $value The object to store in the ArrayObject.
+ * @return void
+ */
+ public static function set($index, $value)
+ {
+ $instance = self::getInstance();
+ $instance->offsetSet($index, $value);
+ }
+
+ /**
+ * Returns TRUE if the $index is a named value in the registry,
+ * or FALSE if $index was not found in the registry.
+ *
+ * @param string $index
+ * @return boolean
+ */
+ public static function isRegistered($index)
+ {
+ if (self::$_registry === null) {
+ return false;
+ }
+ return self::$_registry->offsetExists($index);
+ }
+
+ /**
+ * Constructs a parent ArrayObject with default
+ * ARRAY_AS_PROPS to allow acces as an object
+ *
+ * @param array $array data array
+ * @param integer $flags ArrayObject flags
+ */
+ public function __construct($array = array(), $flags = parent::ARRAY_AS_PROPS)
+ {
+ parent::__construct($array, $flags);
+ }
+
+ /**
+ * @param string $index
+ * @returns mixed
+ *
+ * Workaround for http://bugs.php.net/bug.php?id=40442 (ZF-960).
+ */
+ public function offsetExists($index)
+ {
+ return array_key_exists($index, $this);
+ }
+
+}
diff --git a/Zend/Uri.php b/Zend/Uri.php
new file mode 100644
index 00000000..b4f88b32
--- /dev/null
+++ b/Zend/Uri.php
@@ -0,0 +1,202 @@
+ false
+ );
+
+ /**
+ * Return a string representation of this URI.
+ *
+ * @see getUri()
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getUri();
+ }
+
+ /**
+ * Convenience function, checks that a $uri string is well-formed
+ * by validating it but not returning an object. Returns TRUE if
+ * $uri is a well-formed URI, or FALSE otherwise.
+ *
+ * @param string $uri The URI to check
+ * @return boolean
+ */
+ public static function check($uri)
+ {
+ try {
+ $uri = self::factory($uri);
+ } catch (Exception $e) {
+ return false;
+ }
+
+ return $uri->valid();
+ }
+
+ /**
+ * Create a new Zend_Uri object for a URI. If building a new URI, then $uri should contain
+ * only the scheme (http, ftp, etc). Otherwise, supply $uri with the complete URI.
+ *
+ * @param string $uri The URI form which a Zend_Uri instance is created
+ * @param string $className The name of the class to use in order to manipulate URI
+ * @throws Zend_Uri_Exception When an empty string was supplied for the scheme
+ * @throws Zend_Uri_Exception When an illegal scheme is supplied
+ * @throws Zend_Uri_Exception When the scheme is not supported
+ * @throws Zend_Uri_Exception When $className doesn't exist or doesn't implements Zend_Uri
+ * @return Zend_Uri
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public static function factory($uri = 'http', $className = null)
+ {
+ // Separate the scheme from the scheme-specific parts
+ $uri = explode(':', $uri, 2);
+ $scheme = strtolower($uri[0]);
+ $schemeSpecific = isset($uri[1]) === true ? $uri[1] : '';
+
+ if (strlen($scheme) === 0) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('An empty string was supplied for the scheme');
+ }
+
+ // Security check: $scheme is used to load a class file, so only alphanumerics are allowed.
+ if (ctype_alnum($scheme) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Illegal scheme supplied, only alphanumeric characters are permitted');
+ }
+
+ if ($className === null) {
+ /**
+ * Create a new Zend_Uri object for the $uri. If a subclass of Zend_Uri exists for the
+ * scheme, return an instance of that class. Otherwise, a Zend_Uri_Exception is thrown.
+ */
+ switch ($scheme) {
+ case 'http':
+ // Break intentionally omitted
+ case 'https':
+ $className = 'Zend_Uri_Http';
+ break;
+
+ case 'mailto':
+ // TODO
+ default:
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Scheme \"$scheme\" is not supported");
+ break;
+ }
+ }
+
+ require_once 'Zend/Loader.php';
+ try {
+ Zend_Loader::loadClass($className);
+ } catch (Exception $e) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("\"$className\" not found");
+ }
+
+ $schemeHandler = new $className($scheme, $schemeSpecific);
+
+ if (! $schemeHandler instanceof Zend_Uri) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("\"$className\" is not an instance of Zend_Uri");
+ }
+
+ return $schemeHandler;
+ }
+
+ /**
+ * Get the URI's scheme
+ *
+ * @return string|false Scheme or false if no scheme is set.
+ */
+ public function getScheme()
+ {
+ if (empty($this->_scheme) === false) {
+ return $this->_scheme;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Set global configuration options
+ *
+ * @param Zend_Config|array $config
+ */
+ static public function setConfig($config)
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+ } elseif (!is_array($config)) {
+ throw new Zend_Uri_Exception("Config must be an array or an instance of Zend_Config.");
+ }
+
+ foreach ($config as $k => $v) {
+ self::$_config[$k] = $v;
+ }
+ }
+
+ /**
+ * Zend_Uri and its subclasses cannot be instantiated directly.
+ * Use Zend_Uri::factory() to return a new Zend_Uri object.
+ *
+ * @param string $scheme The scheme of the URI
+ * @param string $schemeSpecific The scheme-specific part of the URI
+ */
+ abstract protected function __construct($scheme, $schemeSpecific = '');
+
+ /**
+ * Return a string representation of this URI.
+ *
+ * @return string
+ */
+ abstract public function getUri();
+
+ /**
+ * Returns TRUE if this URI is valid, or FALSE otherwise.
+ *
+ * @return boolean
+ */
+ abstract public function valid();
+}
diff --git a/Zend/Uri/Exception.php b/Zend/Uri/Exception.php
new file mode 100644
index 00000000..53cd3335
--- /dev/null
+++ b/Zend/Uri/Exception.php
@@ -0,0 +1,37 @@
+_scheme = $scheme;
+
+ // Set up grammar rules for validation via regular expressions. These
+ // are to be used with slash-delimited regular expression strings.
+
+ // Escaped special characters (eg. '%25' for '%')
+ $this->_regex['escaped'] = '%[[:xdigit:]]{2}';
+
+ // Unreserved characters
+ $this->_regex['unreserved'] = '[' . self::CHAR_ALNUM . self::CHAR_MARK . ']';
+
+ // Segment can use escaped, unreserved or a set of additional chars
+ $this->_regex['segment'] = '(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . self::CHAR_SEGMENT . '])*';
+
+ // Path can be a series of segmets char strings seperated by '/'
+ $this->_regex['path'] = '(?:\/(?:' . $this->_regex['segment'] . ')?)+';
+
+ // URI characters can be escaped, alphanumeric, mark or reserved chars
+ $this->_regex['uric'] = '(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . self::CHAR_RESERVED .
+
+ // If unwise chars are allowed, add them to the URI chars class
+ (self::$_config['allow_unwise'] ? self::CHAR_UNWISE : '') . '])';
+
+ // If no scheme-specific part was supplied, the user intends to create
+ // a new URI with this object. No further parsing is required.
+ if (strlen($schemeSpecific) === 0) {
+ return;
+ }
+
+ // Parse the scheme-specific URI parts into the instance variables.
+ $this->_parseUri($schemeSpecific);
+
+ // Validate the URI
+ if ($this->valid() === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Invalid URI supplied');
+ }
+ }
+
+ /**
+ * Creates a Zend_Uri_Http from the given string
+ *
+ * @param string $uri String to create URI from, must start with
+ * 'http://' or 'https://'
+ * @throws InvalidArgumentException When the given $uri is not a string or
+ * does not start with http:// or https://
+ * @throws Zend_Uri_Exception When the given $uri is invalid
+ * @return Zend_Uri_Http
+ */
+ public static function fromString($uri)
+ {
+ if (is_string($uri) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('$uri is not a string');
+ }
+
+ $uri = explode(':', $uri, 2);
+ $scheme = strtolower($uri[0]);
+ $schemeSpecific = isset($uri[1]) === true ? $uri[1] : '';
+
+ if (in_array($scheme, array('http', 'https')) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Invalid scheme: '$scheme'");
+ }
+
+ $schemeHandler = new Zend_Uri_Http($scheme, $schemeSpecific);
+ return $schemeHandler;
+ }
+
+ /**
+ * Parse the scheme-specific portion of the URI and place its parts into instance variables.
+ *
+ * @param string $schemeSpecific The scheme-specific portion to parse
+ * @throws Zend_Uri_Exception When scheme-specific decoposition fails
+ * @throws Zend_Uri_Exception When authority decomposition fails
+ * @return void
+ */
+ protected function _parseUri($schemeSpecific)
+ {
+ // High-level decomposition parser
+ $pattern = '~^((//)([^/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?$~';
+ $status = @preg_match($pattern, $schemeSpecific, $matches);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: scheme-specific decomposition failed');
+ }
+
+ // Failed decomposition; no further processing needed
+ if ($status === false) {
+ return;
+ }
+
+ // Save URI components that need no further decomposition
+ $this->_path = isset($matches[4]) === true ? $matches[4] : '';
+ $this->_query = isset($matches[6]) === true ? $matches[6] : '';
+ $this->_fragment = isset($matches[8]) === true ? $matches[8] : '';
+
+ // Additional decomposition to get username, password, host, and port
+ $combo = isset($matches[3]) === true ? $matches[3] : '';
+ $pattern = '~^(([^:@]*)(:([^@]*))?@)?([^:]+)(:(.*))?$~';
+ $status = @preg_match($pattern, $combo, $matches);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: authority decomposition failed');
+ }
+
+ // Failed decomposition; no further processing needed
+ if ($status === false) {
+ return;
+ }
+
+ // Save remaining URI components
+ $this->_username = isset($matches[2]) === true ? $matches[2] : '';
+ $this->_password = isset($matches[4]) === true ? $matches[4] : '';
+ $this->_host = isset($matches[5]) === true ? $matches[5] : '';
+ $this->_port = isset($matches[7]) === true ? $matches[7] : '';
+
+ }
+
+ /**
+ * Returns a URI based on current values of the instance variables. If any
+ * part of the URI does not pass validation, then an exception is thrown.
+ *
+ * @throws Zend_Uri_Exception When one or more parts of the URI are invalid
+ * @return string
+ */
+ public function getUri()
+ {
+ if ($this->valid() === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('One or more parts of the URI are invalid');
+ }
+
+ $password = strlen($this->_password) > 0 ? ":$this->_password" : '';
+ $auth = strlen($this->_username) > 0 ? "$this->_username$password@" : '';
+ $port = strlen($this->_port) > 0 ? ":$this->_port" : '';
+ $query = strlen($this->_query) > 0 ? "?$this->_query" : '';
+ $fragment = strlen($this->_fragment) > 0 ? "#$this->_fragment" : '';
+
+ return $this->_scheme
+ . '://'
+ . $auth
+ . $this->_host
+ . $port
+ . $this->_path
+ . $query
+ . $fragment;
+ }
+
+ /**
+ * Validate the current URI from the instance variables. Returns true if and only if all
+ * parts pass validation.
+ *
+ * @return boolean
+ */
+ public function valid()
+ {
+ // Return true if and only if all parts of the URI have passed validation
+ return $this->validateUsername()
+ and $this->validatePassword()
+ and $this->validateHost()
+ and $this->validatePort()
+ and $this->validatePath()
+ and $this->validateQuery()
+ and $this->validateFragment();
+ }
+
+ /**
+ * Returns the username portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getUsername()
+ {
+ return strlen($this->_username) > 0 ? $this->_username : false;
+ }
+
+ /**
+ * Returns true if and only if the username passes validation. If no username is passed,
+ * then the username contained in the instance variable is used.
+ *
+ * @param string $username The HTTP username
+ * @throws Zend_Uri_Exception When username validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validateUsername($username = null)
+ {
+ if ($username === null) {
+ $username = $this->_username;
+ }
+
+ // If the username is empty, then it is considered valid
+ if (strlen($username) === 0) {
+ return true;
+ }
+
+ // Check the username against the allowed values
+ $status = @preg_match('/^(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . ';:&=+$,' . '])+$/', $username);
+
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: username validation failed');
+ }
+
+ return $status === 1;
+ }
+
+ /**
+ * Sets the username for the current URI, and returns the old username
+ *
+ * @param string $username The HTTP username
+ * @throws Zend_Uri_Exception When $username is not a valid HTTP username
+ * @return string
+ */
+ public function setUsername($username)
+ {
+ if ($this->validateUsername($username) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Username \"$username\" is not a valid HTTP username");
+ }
+
+ $oldUsername = $this->_username;
+ $this->_username = $username;
+
+ return $oldUsername;
+ }
+
+ /**
+ * Returns the password portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getPassword()
+ {
+ return strlen($this->_password) > 0 ? $this->_password : false;
+ }
+
+ /**
+ * Returns true if and only if the password passes validation. If no password is passed,
+ * then the password contained in the instance variable is used.
+ *
+ * @param string $password The HTTP password
+ * @throws Zend_Uri_Exception When password validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validatePassword($password = null)
+ {
+ if ($password === null) {
+ $password = $this->_password;
+ }
+
+ // If the password is empty, then it is considered valid
+ if (strlen($password) === 0) {
+ return true;
+ }
+
+ // If the password is nonempty, but there is no username, then it is considered invalid
+ if (strlen($password) > 0 and strlen($this->_username) === 0) {
+ return false;
+ }
+
+ // Check the password against the allowed values
+ $status = @preg_match('/^(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . ';:&=+$,' . '])+$/', $password);
+
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: password validation failed.');
+ }
+
+ return $status == 1;
+ }
+
+ /**
+ * Sets the password for the current URI, and returns the old password
+ *
+ * @param string $password The HTTP password
+ * @throws Zend_Uri_Exception When $password is not a valid HTTP password
+ * @return string
+ */
+ public function setPassword($password)
+ {
+ if ($this->validatePassword($password) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Password \"$password\" is not a valid HTTP password.");
+ }
+
+ $oldPassword = $this->_password;
+ $this->_password = $password;
+
+ return $oldPassword;
+ }
+
+ /**
+ * Returns the domain or host IP portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getHost()
+ {
+ return strlen($this->_host) > 0 ? $this->_host : false;
+ }
+
+ /**
+ * Returns true if and only if the host string passes validation. If no host is passed,
+ * then the host contained in the instance variable is used.
+ *
+ * @param string $host The HTTP host
+ * @return boolean
+ * @uses Zend_Filter
+ */
+ public function validateHost($host = null)
+ {
+ if ($host === null) {
+ $host = $this->_host;
+ }
+
+ // If the host is empty, then it is considered invalid
+ if (strlen($host) === 0) {
+ return false;
+ }
+
+ // Check the host against the allowed values; delegated to Zend_Filter.
+ $validate = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_ALL);
+
+ return $validate->isValid($host);
+ }
+
+ /**
+ * Sets the host for the current URI, and returns the old host
+ *
+ * @param string $host The HTTP host
+ * @throws Zend_Uri_Exception When $host is nota valid HTTP host
+ * @return string
+ */
+ public function setHost($host)
+ {
+ if ($this->validateHost($host) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Host \"$host\" is not a valid HTTP host");
+ }
+
+ $oldHost = $this->_host;
+ $this->_host = $host;
+
+ return $oldHost;
+ }
+
+ /**
+ * Returns the TCP port, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getPort()
+ {
+ return strlen($this->_port) > 0 ? $this->_port : false;
+ }
+
+ /**
+ * Returns true if and only if the TCP port string passes validation. If no port is passed,
+ * then the port contained in the instance variable is used.
+ *
+ * @param string $port The HTTP port
+ * @return boolean
+ */
+ public function validatePort($port = null)
+ {
+ if ($port === null) {
+ $port = $this->_port;
+ }
+
+ // If the port is empty, then it is considered valid
+ if (strlen($port) === 0) {
+ return true;
+ }
+
+ // Check the port against the allowed values
+ return ctype_digit((string) $port) and 1 <= $port and $port <= 65535;
+ }
+
+ /**
+ * Sets the port for the current URI, and returns the old port
+ *
+ * @param string $port The HTTP port
+ * @throws Zend_Uri_Exception When $port is not a valid HTTP port
+ * @return string
+ */
+ public function setPort($port)
+ {
+ if ($this->validatePort($port) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Port \"$port\" is not a valid HTTP port.");
+ }
+
+ $oldPort = $this->_port;
+ $this->_port = $port;
+
+ return $oldPort;
+ }
+
+ /**
+ * Returns the path and filename portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return strlen($this->_path) > 0 ? $this->_path : '/';
+ }
+
+ /**
+ * Returns true if and only if the path string passes validation. If no path is passed,
+ * then the path contained in the instance variable is used.
+ *
+ * @param string $path The HTTP path
+ * @throws Zend_Uri_Exception When path validation fails
+ * @return boolean
+ */
+ public function validatePath($path = null)
+ {
+ if ($path === null) {
+ $path = $this->_path;
+ }
+
+ // If the path is empty, then it is considered valid
+ if (strlen($path) === 0) {
+ return true;
+ }
+
+ // Determine whether the path is well-formed
+ $pattern = '/^' . $this->_regex['path'] . '$/';
+ $status = @preg_match($pattern, $path);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: path validation failed');
+ }
+
+ return (boolean) $status;
+ }
+
+ /**
+ * Sets the path for the current URI, and returns the old path
+ *
+ * @param string $path The HTTP path
+ * @throws Zend_Uri_Exception When $path is not a valid HTTP path
+ * @return string
+ */
+ public function setPath($path)
+ {
+ if ($this->validatePath($path) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Path \"$path\" is not a valid HTTP path");
+ }
+
+ $oldPath = $this->_path;
+ $this->_path = $path;
+
+ return $oldPath;
+ }
+
+ /**
+ * Returns the query portion of the URL (after ?), or FALSE if none.
+ *
+ * @return string
+ */
+ public function getQuery()
+ {
+ return strlen($this->_query) > 0 ? $this->_query : false;
+ }
+
+ /**
+ * Returns the query portion of the URL (after ?) as a
+ * key-value-array. If the query is empty an empty array
+ * is returned
+ *
+ * @return array
+ */
+ public function getQueryAsArray()
+ {
+ $query = $this->getQuery();
+ $querryArray = array();
+ if ($query !== false) {
+ parse_str($query, $querryArray);
+ }
+ return $querryArray;
+ }
+
+ /**
+ * Returns true if and only if the query string passes validation. If no query is passed,
+ * then the query string contained in the instance variable is used.
+ *
+ * @param string $query The query to validate
+ * @throws Zend_Uri_Exception When query validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validateQuery($query = null)
+ {
+ if ($query === null) {
+ $query = $this->_query;
+ }
+
+ // If query is empty, it is considered to be valid
+ if (strlen($query) === 0) {
+ return true;
+ }
+
+ // Determine whether the query is well-formed
+ $pattern = '/^' . $this->_regex['uric'] . '*$/';
+ $status = @preg_match($pattern, $query);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: query validation failed');
+ }
+
+ return $status == 1;
+ }
+
+ /**
+ * Add or replace params in the query string for the current URI, and
+ * return the old query.
+ *
+ * @param array $queryParams
+ * @return string Old query string
+ */
+ public function addReplaceQueryParameters(array $queryParams)
+ {
+ $queryParams = array_merge($this->getQueryAsArray(), $queryParams);
+ return $this->setQuery($queryParams);
+ }
+
+ /**
+ * Remove params in the query string for the current URI, and
+ * return the old query.
+ *
+ * @param array $queryParamKeys
+ * @return string Old query string
+ */
+ public function removeQueryParameters(array $queryParamKeys)
+ {
+ $queryParams = array_diff_key($this->getQueryAsArray(), array_fill_keys($queryParamKeys, 0));
+ return $this->setQuery($queryParams);
+ }
+
+ /**
+ * Set the query string for the current URI, and return the old query
+ * string This method accepts both strings and arrays.
+ *
+ * @param string|array $query The query string or array
+ * @throws Zend_Uri_Exception When $query is not a valid query string
+ * @return string Old query string
+ */
+ public function setQuery($query)
+ {
+ $oldQuery = $this->_query;
+
+ // If query is empty, set an empty string
+ if (empty($query) === true) {
+ $this->_query = '';
+ return $oldQuery;
+ }
+
+ // If query is an array, make a string out of it
+ if (is_array($query) === true) {
+ $query = http_build_query($query, '', '&');
+ } else {
+ // If it is a string, make sure it is valid. If not parse and encode it
+ $query = (string) $query;
+ if ($this->validateQuery($query) === false) {
+ parse_str($query, $queryArray);
+ $query = http_build_query($queryArray, '', '&');
+ }
+ }
+
+ // Make sure the query is valid, and set it
+ if ($this->validateQuery($query) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("'$query' is not a valid query string");
+ }
+
+ $this->_query = $query;
+
+ return $oldQuery;
+ }
+
+ /**
+ * Returns the fragment portion of the URL (after #), or FALSE if none.
+ *
+ * @return string|false
+ */
+ public function getFragment()
+ {
+ return strlen($this->_fragment) > 0 ? $this->_fragment : false;
+ }
+
+ /**
+ * Returns true if and only if the fragment passes validation. If no fragment is passed,
+ * then the fragment contained in the instance variable is used.
+ *
+ * @param string $fragment Fragment of an URI
+ * @throws Zend_Uri_Exception When fragment validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validateFragment($fragment = null)
+ {
+ if ($fragment === null) {
+ $fragment = $this->_fragment;
+ }
+
+ // If fragment is empty, it is considered to be valid
+ if (strlen($fragment) === 0) {
+ return true;
+ }
+
+ // Determine whether the fragment is well-formed
+ $pattern = '/^' . $this->_regex['uric'] . '*$/';
+ $status = @preg_match($pattern, $fragment);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: fragment validation failed');
+ }
+
+ return (boolean) $status;
+ }
+
+ /**
+ * Sets the fragment for the current URI, and returns the old fragment
+ *
+ * @param string $fragment Fragment of the current URI
+ * @throws Zend_Uri_Exception When $fragment is not a valid HTTP fragment
+ * @return string
+ */
+ public function setFragment($fragment)
+ {
+ if ($this->validateFragment($fragment) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Fragment \"$fragment\" is not a valid HTTP fragment");
+ }
+
+ $oldFragment = $this->_fragment;
+ $this->_fragment = $fragment;
+
+ return $oldFragment;
+ }
+}
diff --git a/Zend/Validate/Abstract.php b/Zend/Validate/Abstract.php
new file mode 100644
index 00000000..c4e3ffd1
--- /dev/null
+++ b/Zend/Validate/Abstract.php
@@ -0,0 +1,456 @@
+_messages;
+ }
+
+ /**
+ * Returns an array of the names of variables that are used in constructing validation failure messages
+ *
+ * @return array
+ */
+ public function getMessageVariables()
+ {
+ return array_keys($this->_messageVariables);
+ }
+
+ /**
+ * Returns the message templates from the validator
+ *
+ * @return array
+ */
+ public function getMessageTemplates()
+ {
+ return $this->_messageTemplates;
+ }
+
+ /**
+ * Sets the validation failure message template for a particular key
+ *
+ * @param string $messageString
+ * @param string $messageKey OPTIONAL
+ * @return Zend_Validate_Abstract Provides a fluent interface
+ * @throws Zend_Validate_Exception
+ */
+ public function setMessage($messageString, $messageKey = null)
+ {
+ if ($messageKey === null) {
+ $keys = array_keys($this->_messageTemplates);
+ foreach($keys as $key) {
+ $this->setMessage($messageString, $key);
+ }
+ return $this;
+ }
+
+ if (!isset($this->_messageTemplates[$messageKey])) {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception("No message template exists for key '$messageKey'");
+ }
+
+ $this->_messageTemplates[$messageKey] = $messageString;
+ return $this;
+ }
+
+ /**
+ * Sets validation failure message templates given as an array, where the array keys are the message keys,
+ * and the array values are the message template strings.
+ *
+ * @param array $messages
+ * @return Zend_Validate_Abstract
+ */
+ public function setMessages(array $messages)
+ {
+ foreach ($messages as $key => $message) {
+ $this->setMessage($message, $key);
+ }
+ return $this;
+ }
+
+ /**
+ * Magic function returns the value of the requested property, if and only if it is the value or a
+ * message variable.
+ *
+ * @param string $property
+ * @return mixed
+ * @throws Zend_Validate_Exception
+ */
+ public function __get($property)
+ {
+ if ($property == 'value') {
+ return $this->_value;
+ }
+ if (array_key_exists($property, $this->_messageVariables)) {
+ return $this->{$this->_messageVariables[$property]};
+ }
+ /**
+ * @see Zend_Validate_Exception
+ */
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception("No property exists by the name '$property'");
+ }
+
+ /**
+ * Constructs and returns a validation failure message with the given message key and value.
+ *
+ * Returns null if and only if $messageKey does not correspond to an existing template.
+ *
+ * If a translator is available and a translation exists for $messageKey,
+ * the translation will be used.
+ *
+ * @param string $messageKey
+ * @param string $value
+ * @return string
+ */
+ protected function _createMessage($messageKey, $value)
+ {
+ if (!isset($this->_messageTemplates[$messageKey])) {
+ return null;
+ }
+
+ $message = $this->_messageTemplates[$messageKey];
+
+ if (null !== ($translator = $this->getTranslator())) {
+ if ($translator->isTranslated($messageKey)) {
+ $message = $translator->translate($messageKey);
+ } else {
+ $message = $translator->translate($message);
+ }
+ }
+
+ if (is_object($value)) {
+ if (!in_array('__toString', get_class_methods($value))) {
+ $value = get_class($value) . ' object';
+ } else {
+ $value = $value->__toString();
+ }
+ } else {
+ $value = (string)$value;
+ }
+
+ if ($this->getObscureValue()) {
+ $value = str_repeat('*', strlen($value));
+ }
+
+ $message = str_replace('%value%', (string) $value, $message);
+ foreach ($this->_messageVariables as $ident => $property) {
+ $message = str_replace("%$ident%", (string) $this->$property, $message);
+ }
+
+ $length = self::getMessageLength();
+ if (($length > -1) && (strlen($message) > $length)) {
+ $message = substr($message, 0, (self::getMessageLength() - 3)) . '...';
+ }
+
+ return $message;
+ }
+
+ /**
+ * @param string $messageKey
+ * @param string $value OPTIONAL
+ * @return void
+ */
+ protected function _error($messageKey, $value = null)
+ {
+ if ($messageKey === null) {
+ $keys = array_keys($this->_messageTemplates);
+ $messageKey = current($keys);
+ }
+ if ($value === null) {
+ $value = $this->_value;
+ }
+ $this->_errors[] = $messageKey;
+ $this->_messages[$messageKey] = $this->_createMessage($messageKey, $value);
+ }
+
+ /**
+ * Sets the value to be validated and clears the messages and errors arrays
+ *
+ * @param mixed $value
+ * @return void
+ */
+ protected function _setValue($value)
+ {
+ $this->_value = $value;
+ $this->_messages = array();
+ $this->_errors = array();
+ }
+
+ /**
+ * Returns array of validation failure message codes
+ *
+ * @return array
+ * @deprecated Since 1.5.0
+ */
+ public function getErrors()
+ {
+ return $this->_errors;
+ }
+
+ /**
+ * Set flag indicating whether or not value should be obfuscated in messages
+ *
+ * @param bool $flag
+ * @return Zend_Validate_Abstract
+ */
+ public function setObscureValue($flag)
+ {
+ $this->_obscureValue = (bool) $flag;
+ return $this;
+ }
+
+ /**
+ * Retrieve flag indicating whether or not value should be obfuscated in
+ * messages
+ *
+ * @return bool
+ */
+ public function getObscureValue()
+ {
+ return $this->_obscureValue;
+ }
+
+ /**
+ * Set translation object
+ *
+ * @param Zend_Translate|Zend_Translate_Adapter|null $translator
+ * @return Zend_Validate_Abstract
+ */
+ public function setTranslator($translator = null)
+ {
+ if ((null === $translator) || ($translator instanceof Zend_Translate_Adapter)) {
+ $this->_translator = $translator;
+ } elseif ($translator instanceof Zend_Translate) {
+ $this->_translator = $translator->getAdapter();
+ } else {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception('Invalid translator specified');
+ }
+ return $this;
+ }
+
+ /**
+ * Return translation object
+ *
+ * @return Zend_Translate_Adapter|null
+ */
+ public function getTranslator()
+ {
+ if ($this->translatorIsDisabled()) {
+ return null;
+ }
+
+ if (null === $this->_translator) {
+ return self::getDefaultTranslator();
+ }
+
+ return $this->_translator;
+ }
+
+ /**
+ * Does this validator have its own specific translator?
+ *
+ * @return bool
+ */
+ public function hasTranslator()
+ {
+ return (bool)$this->_translator;
+ }
+
+ /**
+ * Set default translation object for all validate objects
+ *
+ * @param Zend_Translate|Zend_Translate_Adapter|null $translator
+ * @return void
+ */
+ public static function setDefaultTranslator($translator = null)
+ {
+ if ((null === $translator) || ($translator instanceof Zend_Translate_Adapter)) {
+ self::$_defaultTranslator = $translator;
+ } elseif ($translator instanceof Zend_Translate) {
+ self::$_defaultTranslator = $translator->getAdapter();
+ } else {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception('Invalid translator specified');
+ }
+ }
+
+ /**
+ * Get default translation object for all validate objects
+ *
+ * @return Zend_Translate_Adapter|null
+ */
+ public static function getDefaultTranslator()
+ {
+ if (null === self::$_defaultTranslator) {
+ require_once 'Zend/Registry.php';
+ if (Zend_Registry::isRegistered('Zend_Translate')) {
+ $translator = Zend_Registry::get('Zend_Translate');
+ if ($translator instanceof Zend_Translate_Adapter) {
+ return $translator;
+ } elseif ($translator instanceof Zend_Translate) {
+ return $translator->getAdapter();
+ }
+ }
+ }
+
+ return self::$_defaultTranslator;
+ }
+
+ /**
+ * Is there a default translation object set?
+ *
+ * @return boolean
+ */
+ public static function hasDefaultTranslator()
+ {
+ return (bool)self::$_defaultTranslator;
+ }
+
+ /**
+ * Indicate whether or not translation should be disabled
+ *
+ * @param bool $flag
+ * @return Zend_Validate_Abstract
+ */
+ public function setDisableTranslator($flag)
+ {
+ $this->_translatorDisabled = (bool) $flag;
+ return $this;
+ }
+
+ /**
+ * Is translation disabled?
+ *
+ * @return bool
+ */
+ public function translatorIsDisabled()
+ {
+ return $this->_translatorDisabled;
+ }
+
+ /**
+ * Returns the maximum allowed message length
+ *
+ * @return integer
+ */
+ public static function getMessageLength()
+ {
+ return self::$_messageLength;
+ }
+
+ /**
+ * Sets the maximum allowed message length
+ *
+ * @param integer $length
+ */
+ public static function setMessageLength($length = -1)
+ {
+ self::$_messageLength = $length;
+ }
+}
diff --git a/Zend/Validate/Hostname.php b/Zend/Validate/Hostname.php
new file mode 100644
index 00000000..06a38f90
--- /dev/null
+++ b/Zend/Validate/Hostname.php
@@ -0,0 +1,740 @@
+ "Invalid type given, value should be a string",
+ self::IP_ADDRESS_NOT_ALLOWED => "'%value%' appears to be an IP address, but IP addresses are not allowed",
+ self::UNKNOWN_TLD => "'%value%' appears to be a DNS hostname but cannot match TLD against known list",
+ self::INVALID_DASH => "'%value%' appears to be a DNS hostname but contains a dash in an invalid position",
+ self::INVALID_HOSTNAME_SCHEMA => "'%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'",
+ self::UNDECIPHERABLE_TLD => "'%value%' appears to be a DNS hostname but cannot extract TLD part",
+ self::INVALID_HOSTNAME => "'%value%' does not match the expected structure for a DNS hostname",
+ self::INVALID_LOCAL_NAME => "'%value%' does not appear to be a valid local network name",
+ self::LOCAL_NAME_NOT_ALLOWED => "'%value%' appears to be a local network name but local network names are not allowed",
+ self::CANNOT_DECODE_PUNYCODE => "'%value%' appears to be a DNS hostname but the given punycode notation cannot be decoded",
+ );
+
+ /**
+ * @var array
+ */
+ protected $_messageVariables = array(
+ 'tld' => '_tld'
+ );
+
+ /**
+ * Allows Internet domain names (e.g., example.com)
+ */
+ const ALLOW_DNS = 1;
+
+ /**
+ * Allows IP addresses
+ */
+ const ALLOW_IP = 2;
+
+ /**
+ * Allows local network names (e.g., localhost, www.localdomain)
+ */
+ const ALLOW_LOCAL = 4;
+
+ /**
+ * Allows all types of hostnames
+ */
+ const ALLOW_ALL = 7;
+
+ /**
+ * Array of valid top-level-domains
+ *
+ * @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain
+ * @see http://www.iana.org/domains/root/db/ Official list of supported TLDs
+ * @var array
+ */
+ protected $_validTlds = array(
+ 'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa',
+ 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi',
+ 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc',
+ 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu',
+ 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er',
+ 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg',
+ 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk',
+ 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq',
+ 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp',
+ 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly',
+ 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp',
+ 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc',
+ 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe',
+ 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're',
+ 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl',
+ 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th',
+ 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua',
+ 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws',
+ 'ye', 'yt', 'yu', 'za', 'zm', 'zw'
+ );
+
+ /**
+ * @var string
+ */
+ protected $_tld;
+
+ /**
+ * Array for valid Idns
+ * @see http://www.iana.org/domains/idn-tables/ Official list of supported IDN Chars
+ * (.AC) Ascension Island http://www.nic.ac/pdf/AC-IDN-Policy.pdf
+ * (.AR) Argentinia http://www.nic.ar/faqidn.html
+ * (.AS) American Samoa http://www.nic.as/idn/chars.cfm
+ * (.AT) Austria http://www.nic.at/en/service/technical_information/idn/charset_converter/
+ * (.BIZ) International http://www.iana.org/domains/idn-tables/
+ * (.BR) Brazil http://registro.br/faq/faq6.html
+ * (.BV) Bouvett Island http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+ * (.CAT) Catalan http://www.iana.org/domains/idn-tables/tables/cat_ca_1.0.html
+ * (.CH) Switzerland https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
+ * (.CL) Chile http://www.iana.org/domains/idn-tables/tables/cl_latn_1.0.html
+ * (.COM) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html
+ * (.DE) Germany http://www.denic.de/en/domains/idns/liste.html
+ * (.DK) Danmark http://www.dk-hostmaster.dk/index.php?id=151
+ * (.ES) Spain https://www.nic.es/media/2008-05/1210147705287.pdf
+ * (.FI) Finland http://www.ficora.fi/en/index/palvelut/fiverkkotunnukset/aakkostenkaytto.html
+ * (.GR) Greece https://grweb.ics.forth.gr/CharacterTable1_en.jsp
+ * (.HU) Hungary http://www.domain.hu/domain/English/szabalyzat/szabalyzat.html
+ * (.INFO) International http://www.nic.info/info/idn
+ * (.IO) British Indian Ocean Territory http://www.nic.io/IO-IDN-Policy.pdf
+ * (.IR) Iran http://www.nic.ir/Allowable_Characters_dot-iran
+ * (.IS) Iceland http://www.isnic.is/domain/rules.php
+ * (.KR) Korea http://www.iana.org/domains/idn-tables/tables/kr_ko-kr_1.0.html
+ * (.LI) Liechtenstein https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
+ * (.LT) Lithuania http://www.domreg.lt/static/doc/public/idn_symbols-en.pdf
+ * (.MD) Moldova http://www.register.md/
+ * (.MUSEUM) International http://www.iana.org/domains/idn-tables/tables/museum_latn_1.0.html
+ * (.NET) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html
+ * (.NO) Norway http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+ * (.NU) Niue http://www.worldnames.net/
+ * (.ORG) International http://www.pir.org/index.php?db=content/FAQs&tbl=FAQs_Registrant&id=2
+ * (.PE) Peru https://www.nic.pe/nuevas_politicas_faq_2.php
+ * (.PL) Poland http://www.dns.pl/IDN/allowed_character_sets.pdf
+ * (.PR) Puerto Rico http://www.nic.pr/idn_rules.asp
+ * (.PT) Portugal https://online.dns.pt/dns_2008/do?com=DS;8216320233;111;+PAGE(4000058)+K-CAT-CODIGO(C.125)+RCNT(100);
+ * (.RU) Russia http://www.iana.org/domains/idn-tables/tables/ru_ru-ru_1.0.html
+ * (.SA) Saudi Arabia http://www.iana.org/domains/idn-tables/tables/sa_ar_1.0.html
+ * (.SE) Sweden http://www.iis.se/english/IDN_campaignsite.shtml?lang=en
+ * (.SH) Saint Helena http://www.nic.sh/SH-IDN-Policy.pdf
+ * (.SJ) Svalbard and Jan Mayen http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+ * (.TH) Thailand http://www.iana.org/domains/idn-tables/tables/th_th-th_1.0.html
+ * (.TM) Turkmenistan http://www.nic.tm/TM-IDN-Policy.pdf
+ * (.TR) Turkey https://www.nic.tr/index.php
+ * (.VE) Venice http://www.iana.org/domains/idn-tables/tables/ve_es_1.0.html
+ * (.VN) Vietnam http://www.vnnic.vn/english/5-6-300-2-2-04-20071115.htm#1.%20Introduction
+ *
+ * @var array
+ */
+ protected $_validIdns = array(
+ 'AC' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄġģĥħīįĵķĺļľÅÅÅÅÅÅÅÅÅÅÅÅÅÅšţťŧūÅůűųŵŷźżž]{1,63}$/iu'),
+ 'AR' => array(1 => '/^[\x{002d}0-9a-zà -ãç-êìÃñ-õü]{1,63}$/iu'),
+ 'AS' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄġģĥħĩīÄįıĵķĸĺļľÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅšţťŧũūÅůűųŵŷźż]{1,63}$/iu'),
+ 'AT' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÅšž]{1,63}$/iu'),
+ 'BIZ' => 'Hostname/Biz.php',
+ 'BR' => array(1 => '/^[\x{002d}0-9a-zà -ãçéÃó-õúü]{1,63}$/iu'),
+ 'BV' => array(1 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄÄÅÅšŧž]{1,63}$/iu'),
+ 'CAT' => array(1 => '/^[\x{002d}0-9a-z·à ç-éÃïòóúü]{1,63}$/iu'),
+ 'CH' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÅ]{1,63}$/iu'),
+ 'CL' => array(1 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu'),
+ 'CN' => 'Hostname/Cn.php',
+ 'COM' => 'Zend/Validate/Hostname/Com.php',
+ 'DE' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄġģĥħÄĩįīıĵķĺľļÅÅÅÅÅÅÅÅÅĸÅÅÅÅÅÅ¡ÅťţŧÅůűũųūŵŷźžż]{1,63}$/iu'),
+ 'DK' => array(1 => '/^[\x{002d}0-9a-zäéöü]{1,63}$/iu'),
+ 'ES' => array(1 => '/^[\x{002d}0-9a-zà áçèéÃïñòóúü·]{1,63}$/iu'),
+ 'EU' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿ]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-zÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄġģĥħĩīÄįıĵķĺļľÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅšťŧũūÅůűųŵŷźżž]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-zÈÈ]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9a-zÎάÎήίΰαβγδεζηθικλμνξοÏÏÏÏÏÏ
ÏÏÏÏÏÏÏÏÏ]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9a-zабвгдежзийклмнопÑÑÑÑÑÑ
ÑÑÑÑÑÑÑÑÑÑ]{1,63}$/iu',
+ 6 => '/^[\x{002d}0-9a-zá¼-á¼á¼-á¼á¼ -ἧἰ-á¼·á½-á½
á½-á½á½ -ὧὰ-Ïá¾-á¾á¾-á¾á¾ -ᾧᾰ-ᾴᾶᾷá¿á¿á¿á¿á¿á¿-Îá¿á¿á¿ -ῧῲῳῴῶῷ]{1,63}$/iu'),
+ 'FI' => array(1 => '/^[\x{002d}0-9a-zäåö]{1,63}$/iu'),
+ 'GR' => array(1 => '/^[\x{002d}0-9a-zÎÎÎÎÎÎ-ΡΣ-Ïá¼-á¼á¼-á¼á¼ -á½
á½-á½á½-á½á½á½á½á½-á½½á¾-ᾴᾶ-á¾¼á¿á¿á¿á¿-á¿á¿-á¿á¿-á¿á¿ -Ῥῲῳῴῶ-ῼ]{1,63}$/iu'),
+ 'HK' => 'Zend/Validate/Hostname/Cn.php',
+ 'HU' => array(1 => '/^[\x{002d}0-9a-záéÃóöúüÅű]{1,63}$/iu'),
+ 'INFO'=> array(1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-záéÃóöúüÅű]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-záæéÃðóöúýþ]{1,63}$/iu',
+ 4 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
+ 5 => '/^[\x{002d}0-9a-zÄÄÄģīķļÅÅÅšūž]{1,63}$/iu',
+ 6 => '/^[\x{002d}0-9a-zÄ
ÄÄÄįšūųž]{1,63}$/iu',
+ 7 => '/^[\x{002d}0-9a-zóÄ
ÄÄÅÅÅźż]{1,63}$/iu',
+ 8 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu'),
+ 'IO' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄġģĥħÄĩįīıĵķĺľļÅÅÅÅÅÅÅÅÅĸÅÅÅÅÅÅ¡ÅťţŧÅůűũųūŵŷźžż]{1,63}$/iu'),
+ 'IS' => array(1 => '/^[\x{002d}0-9a-záéýúÃóþæöð]{1,63}$/iu'),
+ 'JP' => 'Zend/Validate/Hostname/Jp.php',
+ 'KR' => array(1 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu'),
+ 'LI' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÅ]{1,63}$/iu'),
+ 'LT' => array(1 => '/^[\x{002d}0-9Ä
ÄÄÄįšųūž]{1,63}$/iu'),
+ 'MD' => array(1 => '/^[\x{002d}0-9ÄâîÅÅ£]{1,63}$/iu'),
+ 'MUSEUM' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄÄ
ÄÄÄÄÄÄÄÄÄÄġģħīįıķĺļľÅÅÅÅÅÅÅÅÅÅÅÅÅšţťŧūůűųŵŷźżžÇÇÇÇ\x{01E5}\x{01E7}\x{01E9}\x{01EF}É\x{0292}áºáºáº
ỳ]{1,63}$/iu'),
+ 'NET' => 'Zend/Validate/Hostname/Com.php',
+ 'NO' => array(1 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄÄÅÅšŧž]{1,63}$/iu'),
+ 'NU' => 'Zend/Validate/Hostname/Com.php',
+ 'ORG' => array(1 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-zóÄ
ÄÄÅÅÅźż]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-záäåæéëÃðóöøúüýþ]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9a-záéÃóöúüÅű]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9a-zÄ
ÄÄÄįšūųž]{1,63}$/iu',
+ 6 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
+ 7 => '/^[\x{002d}0-9a-zÄÄÄģīķļÅÅÅšūž]{1,63}$/iu'),
+ 'PE' => array(1 => '/^[\x{002d}0-9a-zñáéÃóúü]{1,63}$/iu'),
+ 'PL' => array(1 => '/^[\x{002d}0-9a-zÄÄÄģīķļÅÅÅšūž]{1,63}$/iu',
+ 2 => '/^[\x{002d}а-ик-Ñ\x{0450}ÑÑÑÑÑÑÑ]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-zâîÄÅÅ£]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9а-ÑÑ\x{04C2}]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9a-zà áâèéêìÃîòóôùúûÄġħż]{1,63}$/iu',
+ 6 => '/^[\x{002d}0-9a-zà äåæéêòóôöøü]{1,63}$/iu',
+ 7 => '/^[\x{002d}0-9a-zóÄ
ÄÄÅÅÅźż]{1,63}$/iu',
+ 8 => '/^[\x{002d}0-9a-zà áâãçéêÃòóôõúü]{1,63}$/iu',
+ 9 => '/^[\x{002d}0-9a-zâîÄÅÅ£]{1,63}$/iu',
+ 10=> '/^[\x{002d}0-9a-záäéÃóôúýÄÄĺľÅÅšťž]{1,63}$/iu',
+ 11=> '/^[\x{002d}0-9a-zçë]{1,63}$/iu',
+ 12=> '/^[\x{002d}0-9а-ик-ÑÑÑÑÑÑÑ]{1,63}$/iu',
+ 13=> '/^[\x{002d}0-9a-zÄÄÄšž]{1,63}$/iu',
+ 14=> '/^[\x{002d}0-9a-zâçöûüÄıÅ]{1,63}$/iu',
+ 15=> '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu',
+ 16=> '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu',
+ 17=> '/^[\x{002d}0-9a-zÄÄĥĵÅÅ]{1,63}$/iu',
+ 18=> '/^[\x{002d}0-9a-zâäéëîô]{1,63}$/iu',
+ 19=> '/^[\x{002d}0-9a-zà áâäåæçèéêëìÃîïðñòôöøùúûüýÄÄÅÅÅÅÅ¡]{1,63}$/iu',
+ 20=> '/^[\x{002d}0-9a-zäåæõöøüšž]{1,63}$/iu',
+ 21=> '/^[\x{002d}0-9a-zà áçèéìÃòóùú]{1,63}$/iu',
+ 22=> '/^[\x{002d}0-9a-zà áéÃóöúüÅű]{1,63}$/iu',
+ 23=> '/^[\x{002d}0-9Îά-Ï]{1,63}$/iu',
+ 24=> '/^[\x{002d}0-9a-zà áâåæçèéêëðóôöøüþÅ]{1,63}$/iu',
+ 25=> '/^[\x{002d}0-9a-záäéÃóöúüýÄÄÄÅÅšťůž]{1,63}$/iu',
+ 26=> '/^[\x{002d}0-9a-z·à çèéÃïòóúü]{1,63}$/iu',
+ 27=> '/^[\x{002d}0-9а-ÑÑÑÑ\x{0450}\x{045D}]{1,63}$/iu',
+ 28=> '/^[\x{002d}0-9а-ÑÑÑÑ]{1,63}$/iu',
+ 29=> '/^[\x{002d}0-9a-zÄ
ÄÄÄįšūųž]{1,63}$/iu',
+ 30=> '/^[\x{002d}0-9a-záäåæéëÃðóöøúüýþ]{1,63}$/iu',
+ 31=> '/^[\x{002d}0-9a-zà âæçèéêëîïñôùûüÿÅ]{1,63}$/iu',
+ 32=> '/^[\x{002d}0-9а-ÑÑÑÑÑÑÑÑÑÑÑÒ]{1,63}$/iu',
+ 33=> '/^[\x{002d}0-9×-ת]{1,63}$/iu'),
+ 'PR' => array(1 => '/^[\x{002d}0-9a-záéÃóúñäëïüöâêîôûà èùæçÅãõ]{1,63}$/iu'),
+ 'PT' => array(1 => '/^[\x{002d}0-9a-záà âãçéêÃóôõú]{1,63}$/iu'),
+ 'RU' => array(1 => '/^[\x{002d}0-9а-ÑÑ]{1,63}$/iu'),
+ 'SA' => array(1 => '/^[\x{002d}.0-9\x{0621}-\x{063A}\x{0641}-\x{064A}\x{0660}-\x{0669}]{1,63}$/iu'),
+ 'SE' => array(1 => '/^[\x{002d}0-9a-zäåéöü]{1,63}$/iu'),
+ 'SH' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄġģĥħÄĩįīıĵķĺľļÅÅÅÅÅÅÅÅÅĸÅÅÅÅÅÅ¡ÅťţŧÅůűũųūŵŷźžż]{1,63}$/iu'),
+ 'SJ' => array(1 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄÄÅÅšŧž]{1,63}$/iu'),
+ 'TH' => array(1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'),
+ 'TM' => array(1 => '/^[\x{002d}0-9a-zà -öø-ÿÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄġģĥħīįĵķĺļľÅÅÅÅÅÅÅÅÅÅÅÅÅÅšţťŧūÅůűųŵŷźżž]{1,63}$/iu'),
+ 'TW' => 'Zend/Validate/Hostname/Cn.php',
+ 'TR' => array(1 => '/^[\x{002d}0-9a-zÄıüÅöç]{1,63}$/iu'),
+ 'VE' => array(1 => '/^[\x{002d}0-9a-záéÃóúüñ]{1,63}$/iu'),
+ 'VN' => array(1 => '/^[ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà áâãèéêìÃòóôõùúýÄÄÄÄÄ¨Ä©Å¨Å©Æ Æ¡Æ¯Æ°\x{1EA0}-\x{1EF9}]{1,63}$/iu'),
+ 'اÛراÙ' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
+ 'ä¸å½' => 'Zend/Validate/Hostname/Cn.php',
+ 'å
¬å¸' => 'Zend/Validate/Hostname/Cn.php',
+ 'ç½ç»' => 'Zend/Validate/Hostname/Cn.php'
+ );
+
+ protected $_idnLength = array(
+ 'BIZ' => array(5 => 17, 11 => 15, 12 => 20),
+ 'CN' => array(1 => 20),
+ 'COM' => array(3 => 17, 5 => 20),
+ 'HK' => array(1 => 15),
+ 'INFO'=> array(4 => 17),
+ 'KR' => array(1 => 17),
+ 'NET' => array(3 => 17, 5 => 20),
+ 'ORG' => array(6 => 17),
+ 'TW' => array(1 => 20),
+ 'اÛراÙ' => array(1 => 30),
+ 'ä¸å½' => array(1 => 20),
+ 'å
¬å¸' => array(1 => 20),
+ 'ç½ç»' => array(1 => 20),
+ );
+
+ protected $_options = array(
+ 'allow' => self::ALLOW_DNS,
+ 'idn' => true,
+ 'tld' => true,
+ 'ip' => null
+ );
+
+ /**
+ * Sets validator options
+ *
+ * @param integer $allow OPTIONAL Set what types of hostname to allow (default ALLOW_DNS)
+ * @param boolean $validateIdn OPTIONAL Set whether IDN domains are validated (default true)
+ * @param boolean $validateTld OPTIONAL Set whether the TLD element of a hostname is validated (default true)
+ * @param Zend_Validate_Ip $ipValidator OPTIONAL
+ * @return void
+ * @see http://www.iana.org/cctld/specifications-policies-cctlds-01apr02.htm Technical Specifications for ccTLDs
+ */
+ public function __construct($options = array())
+ {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ } else if (!is_array($options)) {
+ $options = func_get_args();
+ $temp['allow'] = array_shift($options);
+ if (!empty($options)) {
+ $temp['idn'] = array_shift($options);
+ }
+
+ if (!empty($options)) {
+ $temp['tld'] = array_shift($options);
+ }
+
+ if (!empty($options)) {
+ $temp['ip'] = array_shift($options);
+ }
+
+ $options = $temp;
+ }
+
+ $options += $this->_options;
+ $this->setOptions($options);
+ }
+
+ /**
+ * Returns all set options
+ *
+ * @return array
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Sets the options for this validator
+ *
+ * @param array $options
+ * @return Zend_Validate_Hostname
+ */
+ public function setOptions($options)
+ {
+ if (array_key_exists('allow', $options)) {
+ $this->setAllow($options['allow']);
+ }
+
+ if (array_key_exists('idn', $options)) {
+ $this->setValidateIdn($options['idn']);
+ }
+
+ if (array_key_exists('tld', $options)) {
+ $this->setValidateTld($options['tld']);
+ }
+
+ if (array_key_exists('ip', $options)) {
+ $this->setIpValidator($options['ip']);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Returns the set ip validator
+ *
+ * @return Zend_Validate_Ip
+ */
+ public function getIpValidator()
+ {
+ return $this->_options['ip'];
+ }
+
+ /**
+ * @param Zend_Validate_Ip $ipValidator OPTIONAL
+ * @return void;
+ */
+ public function setIpValidator(Zend_Validate_Ip $ipValidator = null)
+ {
+ if ($ipValidator === null) {
+ $ipValidator = new Zend_Validate_Ip();
+ }
+
+ $this->_options['ip'] = $ipValidator;
+ return $this;
+ }
+
+ /**
+ * Returns the allow option
+ *
+ * @return integer
+ */
+ public function getAllow()
+ {
+ return $this->_options['allow'];
+ }
+
+ /**
+ * Sets the allow option
+ *
+ * @param integer $allow
+ * @return Zend_Validate_Hostname Provides a fluent interface
+ */
+ public function setAllow($allow)
+ {
+ $this->_options['allow'] = $allow;
+ return $this;
+ }
+
+ /**
+ * Returns the set idn option
+ *
+ * @return boolean
+ */
+ public function getValidateIdn()
+ {
+ return $this->_options['idn'];
+ }
+
+ /**
+ * Set whether IDN domains are validated
+ *
+ * This only applies when DNS hostnames are validated
+ *
+ * @param boolean $allowed Set allowed to true to validate IDNs, and false to not validate them
+ */
+ public function setValidateIdn ($allowed)
+ {
+ $this->_options['idn'] = (bool) $allowed;
+ return $this;
+ }
+
+ /**
+ * Returns the set tld option
+ *
+ * @return boolean
+ */
+ public function getValidateTld()
+ {
+ return $this->_options['tld'];
+ }
+
+ /**
+ * Set whether the TLD element of a hostname is validated
+ *
+ * This only applies when DNS hostnames are validated
+ *
+ * @param boolean $allowed Set allowed to true to validate TLDs, and false to not validate them
+ */
+ public function setValidateTld ($allowed)
+ {
+ $this->_options['tld'] = (bool) $allowed;
+ return $this;
+ }
+
+ /**
+ * Defined by Zend_Validate_Interface
+ *
+ * Returns true if and only if the $value is a valid hostname with respect to the current allow option
+ *
+ * @param string $value
+ * @throws Zend_Validate_Exception if a fatal error occurs for validation process
+ * @return boolean
+ */
+ public function isValid($value)
+ {
+ if (!is_string($value)) {
+ $this->_error(self::INVALID);
+ return false;
+ }
+
+ $this->_setValue($value);
+ // Check input against IP address schema
+ if (preg_match('/^[0-9.a-e:.]*$/i', $value) &&
+ $this->_options['ip']->setTranslator($this->getTranslator())->isValid($value)) {
+ if (!($this->_options['allow'] & self::ALLOW_IP)) {
+ $this->_error(self::IP_ADDRESS_NOT_ALLOWED);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ // Check input against DNS hostname schema
+ $domainParts = explode('.', $value);
+ if ((count($domainParts) > 1) && (strlen($value) >= 4) && (strlen($value) <= 254)) {
+ $status = false;
+
+ $origenc = iconv_get_encoding('internal_encoding');
+ iconv_set_encoding('internal_encoding', 'UTF-8');
+ do {
+ // First check TLD
+ $matches = array();
+ if (preg_match('/([^.]{2,10})$/i', end($domainParts), $matches) ||
+ (end($domainParts) == 'اÛراÙ') || (end($domainParts) == 'ä¸å½') ||
+ (end($domainParts) == 'å
¬å¸') || (end($domainParts) == 'ç½ç»')) {
+
+ reset($domainParts);
+
+ // Hostname characters are: *(label dot)(label dot label); max 254 chars
+ // label: id-prefix [*ldh{61} id-prefix]; max 63 chars
+ // id-prefix: alpha / digit
+ // ldh: alpha / digit / dash
+
+ // Match TLD against known list
+ $this->_tld = strtolower($matches[1]);
+ if ($this->_options['tld']) {
+ if (!in_array($this->_tld, $this->_validTlds)) {
+ $this->_error(self::UNKNOWN_TLD);
+ $status = false;
+ break;
+ }
+ }
+
+ /**
+ * Match against IDN hostnames
+ * Note: Keep label regex short to avoid issues with long patterns when matching IDN hostnames
+ * @see Zend_Validate_Hostname_Interface
+ */
+ $regexChars = array(0 => '/^[a-z0-9\x2d]{1,63}$/i');
+ if ($this->_options['idn'] && isset($this->_validIdns[strtoupper($this->_tld)])) {
+ if (is_string($this->_validIdns[strtoupper($this->_tld)])) {
+ $regexChars += include($this->_validIdns[strtoupper($this->_tld)]);
+ } else {
+ $regexChars += $this->_validIdns[strtoupper($this->_tld)];
+ }
+ }
+
+ // Check each hostname part
+ $check = 0;
+ foreach ($domainParts as $domainPart) {
+ // Decode Punycode domainnames to IDN
+ if (strpos($domainPart, 'xn--') === 0) {
+ $domainPart = $this->decodePunycode(substr($domainPart, 4));
+ if ($domainPart === false) {
+ return false;
+ }
+ }
+
+ // Check dash (-) does not start, end or appear in 3rd and 4th positions
+ if ((strpos($domainPart, '-') === 0)
+ || ((strlen($domainPart) > 2) && (strpos($domainPart, '-', 2) == 2) && (strpos($domainPart, '-', 3) == 3))
+ || (strpos($domainPart, '-') === (strlen($domainPart) - 1))) {
+ $this->_error(self::INVALID_DASH);
+ $status = false;
+ break 2;
+ }
+
+ // Check each domain part
+ $checked = false;
+ foreach($regexChars as $regexKey => $regexChar) {
+ $status = @preg_match($regexChar, $domainPart);
+ if ($status > 0) {
+ $length = 63;
+ if (array_key_exists(strtoupper($this->_tld), $this->_idnLength)
+ && (array_key_exists($regexKey, $this->_idnLength[strtoupper($this->_tld)]))) {
+ $length = $this->_idnLength[strtoupper($this->_tld)];
+ }
+
+ if (iconv_strlen($domainPart, 'UTF-8') > $length) {
+ $this->_error(self::INVALID_HOSTNAME);
+ } else {
+ $checked = true;
+ break;
+ }
+ }
+ }
+
+ if ($checked) {
+ ++$check;
+ }
+ }
+
+ // If one of the labels doesn't match, the hostname is invalid
+ if ($check !== count($domainParts)) {
+ $this->_error(self::INVALID_HOSTNAME_SCHEMA);
+ $status = false;
+ }
+ } else {
+ // Hostname not long enough
+ $this->_error(self::UNDECIPHERABLE_TLD);
+ $status = false;
+ }
+ } while (false);
+
+ iconv_set_encoding('internal_encoding', $origenc);
+ // If the input passes as an Internet domain name, and domain names are allowed, then the hostname
+ // passes validation
+ if ($status && ($this->_options['allow'] & self::ALLOW_DNS)) {
+ return true;
+ }
+ } else if ($this->_options['allow'] & self::ALLOW_DNS) {
+ $this->_error(self::INVALID_HOSTNAME);
+ }
+
+ // Check input against local network name schema; last chance to pass validation
+ $regexLocal = '/^(([a-zA-Z0-9\x2d]{1,63}\x2e)*[a-zA-Z0-9\x2d]{1,63}){1,254}$/';
+ $status = @preg_match($regexLocal, $value);
+
+ // If the input passes as a local network name, and local network names are allowed, then the
+ // hostname passes validation
+ $allowLocal = $this->_options['allow'] & self::ALLOW_LOCAL;
+ if ($status && $allowLocal) {
+ return true;
+ }
+
+ // If the input does not pass as a local network name, add a message
+ if (!$status) {
+ $this->_error(self::INVALID_LOCAL_NAME);
+ }
+
+ // If local network names are not allowed, add a message
+ if ($status && !$allowLocal) {
+ $this->_error(self::LOCAL_NAME_NOT_ALLOWED);
+ }
+
+ return false;
+ }
+
+ /**
+ * Decodes a punycode encoded string to it's original utf8 string
+ * In case of a decoding failure the original string is returned
+ *
+ * @param string $encoded Punycode encoded string to decode
+ * @return string
+ */
+ protected function decodePunycode($encoded)
+ {
+ $found = preg_match('/([^a-z0-9\x2d]{1,10})$/i', $encoded);
+ if (empty($encoded) || ($found > 0)) {
+ // no punycode encoded string, return as is
+ $this->_error(self::CANNOT_DECODE_PUNYCODE);
+ return false;
+ }
+
+ $separator = strrpos($encoded, '-');
+ if ($separator > 0) {
+ for ($x = 0; $x < $separator; ++$x) {
+ // prepare decoding matrix
+ $decoded[] = ord($encoded[$x]);
+ }
+ } else {
+ $this->_error(self::CANNOT_DECODE_PUNYCODE);
+ return false;
+ }
+
+ $lengthd = count($decoded);
+ $lengthe = strlen($encoded);
+
+ // decoding
+ $init = true;
+ $base = 72;
+ $index = 0;
+ $char = 0x80;
+
+ for ($indexe = ($separator) ? ($separator + 1) : 0; $indexe < $lengthe; ++$lengthd) {
+ for ($old_index = $index, $pos = 1, $key = 36; 1 ; $key += 36) {
+ $hex = ord($encoded[$indexe++]);
+ $digit = ($hex - 48 < 10) ? $hex - 22
+ : (($hex - 65 < 26) ? $hex - 65
+ : (($hex - 97 < 26) ? $hex - 97
+ : 36));
+
+ $index += $digit * $pos;
+ $tag = ($key <= $base) ? 1 : (($key >= $base + 26) ? 26 : ($key - $base));
+ if ($digit < $tag) {
+ break;
+ }
+
+ $pos = (int) ($pos * (36 - $tag));
+ }
+
+ $delta = intval($init ? (($index - $old_index) / 700) : (($index - $old_index) / 2));
+ $delta += intval($delta / ($lengthd + 1));
+ for ($key = 0; $delta > 910 / 2; $key += 36) {
+ $delta = intval($delta / 35);
+ }
+
+ $base = intval($key + 36 * $delta / ($delta + 38));
+ $init = false;
+ $char += (int) ($index / ($lengthd + 1));
+ $index %= ($lengthd + 1);
+ if ($lengthd > 0) {
+ for ($i = $lengthd; $i > $index; $i--) {
+ $decoded[$i] = $decoded[($i - 1)];
+ }
+ }
+
+ $decoded[$index++] = $char;
+ }
+
+ // convert decoded ucs4 to utf8 string
+ foreach ($decoded as $key => $value) {
+ if ($value < 128) {
+ $decoded[$key] = chr($value);
+ } elseif ($value < (1 << 11)) {
+ $decoded[$key] = chr(192 + ($value >> 6));
+ $decoded[$key] .= chr(128 + ($value & 63));
+ } elseif ($value < (1 << 16)) {
+ $decoded[$key] = chr(224 + ($value >> 12));
+ $decoded[$key] .= chr(128 + (($value >> 6) & 63));
+ $decoded[$key] .= chr(128 + ($value & 63));
+ } elseif ($value < (1 << 21)) {
+ $decoded[$key] = chr(240 + ($value >> 18));
+ $decoded[$key] .= chr(128 + (($value >> 12) & 63));
+ $decoded[$key] .= chr(128 + (($value >> 6) & 63));
+ $decoded[$key] .= chr(128 + ($value & 63));
+ } else {
+ $this->_error(self::CANNOT_DECODE_PUNYCODE);
+ return false;
+ }
+ }
+
+ return implode($decoded);
+ }
+}
diff --git a/Zend/Validate/Hostname/Biz.php b/Zend/Validate/Hostname/Biz.php
new file mode 100644
index 00000000..36105f91
--- /dev/null
+++ b/Zend/Validate/Hostname/Biz.php
@@ -0,0 +1,2917 @@
+ '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-záéÃñóúü]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-záéÃóöúüÅű]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9a-záæéÃðóöúýþ]{1,63}$/iu',
+ 5 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
+ 6 => '/^[\x{002d}0-9a-zÄ
ÄÄÄįšūųž]{1,63}$/iu',
+ 7 => '/^[\x{002d}0-9a-zÄÄÄģīķļÅÅÅšūž]{1,63}$/iu',
+ 8 => '/^[\x{002d}0-9a-zà áä-éêñ-ôöøüÄÄÅÅšŧž]{1,63}$/iu',
+ 9 => '/^[\x{002d}0-9a-zóÄ
ÄÄÅÅÅźż]{1,63}$/iu',
+ 10 => '/^[\x{002d}0-9a-záà âãçéêÃóôõú]{1,63}$/iu',
+ 11 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}\x{30A1}-\x{30F6}\x{30FC}' .
+'\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' .
+'\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' .
+'\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' .
+'\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' .
+'\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' .
+'\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' .
+'\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' .
+'\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' .
+'\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' .
+'\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' .
+'\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' .
+'\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' .
+'\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' .
+'\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' .
+'\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' .
+'\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' .
+'\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' .
+'\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' .
+'\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' .
+'\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' .
+'\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' .
+'\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' .
+'\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' .
+'\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' .
+'\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' .
+'\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' .
+'\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' .
+'\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' .
+'\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' .
+'\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' .
+'\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' .
+'\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' .
+'\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' .
+'\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' .
+'\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' .
+'\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' .
+'\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' .
+'\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' .
+'\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' .
+'\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' .
+'\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' .
+'\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' .
+'\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' .
+'\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' .
+'\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' .
+'\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' .
+'\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' .
+'\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' .
+'\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' .
+'\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' .
+'\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' .
+'\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' .
+'\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' .
+'\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' .
+'\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' .
+'\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' .
+'\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' .
+'\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' .
+'\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' .
+'\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' .
+'\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' .
+'\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' .
+'\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' .
+'\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' .
+'\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' .
+'\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' .
+'\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' .
+'\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' .
+'\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' .
+'\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' .
+'\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' .
+'\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' .
+'\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' .
+'\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' .
+'\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' .
+'\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' .
+'\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' .
+'\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' .
+'\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' .
+'\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' .
+'\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' .
+'\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' .
+'\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' .
+'\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' .
+'\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' .
+'\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' .
+'\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' .
+'\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' .
+'\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' .
+'\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' .
+'\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' .
+'\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' .
+'\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' .
+'\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' .
+'\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' .
+'\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' .
+'\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' .
+'\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' .
+'\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' .
+'\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' .
+'\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' .
+'\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' .
+'\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' .
+'\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' .
+'\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' .
+'\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' .
+'\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' .
+'\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' .
+'\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' .
+'\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' .
+'\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' .
+'\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' .
+'\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' .
+'\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' .
+'\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' .
+'\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' .
+'\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' .
+'\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' .
+'\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' .
+'\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' .
+'\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' .
+'\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' .
+'\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' .
+'\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' .
+'\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' .
+'\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' .
+'\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' .
+'\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' .
+'\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' .
+'\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' .
+'\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' .
+'\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' .
+'\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' .
+'\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' .
+'\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' .
+'\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' .
+'\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' .
+'\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' .
+'\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' .
+'\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' .
+'\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' .
+'\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' .
+'\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' .
+'\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' .
+'\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' .
+'\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' .
+'\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' .
+'\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' .
+'\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' .
+'\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' .
+'\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' .
+'\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' .
+'\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' .
+'\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' .
+'\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' .
+'\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' .
+'\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' .
+'\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' .
+'\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' .
+'\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' .
+'\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' .
+'\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' .
+'\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' .
+'\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' .
+'\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' .
+'\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' .
+'\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' .
+'\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' .
+'\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' .
+'\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' .
+'\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' .
+'\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' .
+'\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' .
+'\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' .
+'\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' .
+'\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' .
+'\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' .
+'\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' .
+'\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' .
+'\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' .
+'\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' .
+'\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' .
+'\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' .
+'\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' .
+'\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' .
+'\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' .
+'\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' .
+'\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' .
+'\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' .
+'\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' .
+'\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' .
+'\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' .
+'\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' .
+'\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' .
+'\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' .
+'\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' .
+'\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' .
+'\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' .
+'\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' .
+'\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' .
+'\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' .
+'\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' .
+'\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' .
+'\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' .
+'\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' .
+'\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' .
+'\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' .
+'\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' .
+'\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' .
+'\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' .
+'\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' .
+'\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' .
+'\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' .
+'\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' .
+'\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' .
+'\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' .
+'\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' .
+'\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' .
+'\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' .
+'\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' .
+'\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' .
+'\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' .
+'\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' .
+'\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' .
+'\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' .
+'\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' .
+'\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' .
+'\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' .
+'\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' .
+'\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' .
+'\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' .
+'\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' .
+'\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' .
+'\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' .
+'\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' .
+'\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' .
+'\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' .
+'\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' .
+'\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' .
+'\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' .
+'\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' .
+'\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' .
+'\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' .
+'\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' .
+'\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' .
+'\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' .
+'\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' .
+'\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' .
+'\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' .
+'\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' .
+'\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' .
+'\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' .
+'\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' .
+'\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' .
+'\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' .
+'\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' .
+'\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' .
+'\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' .
+'\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' .
+'\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' .
+'\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' .
+'\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' .
+'\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' .
+'\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' .
+'\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' .
+'\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' .
+'\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' .
+'\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' .
+'\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' .
+'\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' .
+'\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' .
+'\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' .
+'\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' .
+'\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' .
+'\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' .
+'\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' .
+'\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' .
+'\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' .
+'\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' .
+'\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' .
+'\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' .
+'\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' .
+'\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' .
+'\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' .
+'\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' .
+'\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' .
+'\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' .
+'\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' .
+'\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' .
+'\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' .
+'\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' .
+'\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' .
+'\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' .
+'\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' .
+'\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' .
+'\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' .
+'\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' .
+'\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' .
+'\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' .
+'\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' .
+'\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' .
+'\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' .
+'\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' .
+'\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' .
+'\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' .
+'\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' .
+'\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' .
+'\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' .
+'\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' .
+'\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' .
+'\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' .
+'\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' .
+'\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' .
+'\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' .
+'\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' .
+'\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' .
+'\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' .
+'\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' .
+'\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' .
+'\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' .
+'\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' .
+'\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' .
+'\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' .
+'\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' .
+'\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' .
+'\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' .
+'\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' .
+'\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' .
+'\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' .
+'\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' .
+'\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' .
+'\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' .
+'\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' .
+'\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' .
+'\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' .
+'\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' .
+'\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' .
+'\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' .
+'\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' .
+'\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' .
+'\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' .
+'\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' .
+'\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' .
+'\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' .
+'\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' .
+'\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' .
+'\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' .
+'\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' .
+'\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' .
+'\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' .
+'\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' .
+'\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' .
+'\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' .
+'\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' .
+'\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' .
+'\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' .
+'\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' .
+'\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' .
+'\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' .
+'\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' .
+'\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' .
+'\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' .
+'\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' .
+'\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' .
+'\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' .
+'\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' .
+'\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' .
+'\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' .
+'\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' .
+'\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' .
+'\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' .
+'\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' .
+'\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' .
+'\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' .
+'\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' .
+'\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' .
+'\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' .
+'\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' .
+'\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' .
+'\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' .
+'\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' .
+'\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' .
+'\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' .
+'\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' .
+'\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' .
+'\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' .
+'\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' .
+'\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' .
+'\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' .
+'\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' .
+'\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' .
+'\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' .
+'\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' .
+'\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' .
+'\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' .
+'\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' .
+'\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' .
+'\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' .
+'\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' .
+'\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' .
+'\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' .
+'\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' .
+'\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' .
+'\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' .
+'\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' .
+'\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' .
+'\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' .
+'\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' .
+'\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' .
+'\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' .
+'\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' .
+'\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' .
+'\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' .
+'\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' .
+'\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' .
+'\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' .
+'\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' .
+'\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' .
+'\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' .
+'\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' .
+'\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' .
+'\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' .
+'\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' .
+'\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' .
+'\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' .
+'\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' .
+'\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' .
+'\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' .
+'\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' .
+'\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' .
+'\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' .
+'\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' .
+'\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' .
+'\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' .
+'\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' .
+'\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' .
+'\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' .
+'\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' .
+'\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' .
+'\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' .
+'\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' .
+'\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' .
+'\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' .
+'\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' .
+'\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' .
+'\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' .
+'\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' .
+'\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' .
+'\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' .
+'\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' .
+'\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' .
+'\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' .
+'\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' .
+'\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' .
+'\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' .
+'\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' .
+'\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' .
+'\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' .
+'\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' .
+'\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' .
+'\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' .
+'\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' .
+'\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' .
+'\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' .
+'\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' .
+'\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' .
+'\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' .
+'\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' .
+'\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' .
+'\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' .
+'\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' .
+'\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' .
+'\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' .
+'\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' .
+'\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' .
+'\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' .
+'\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' .
+'\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' .
+'\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' .
+'\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' .
+'\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' .
+'\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' .
+'\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' .
+'\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' .
+'\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' .
+'\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' .
+'\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' .
+'\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' .
+'\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' .
+'\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' .
+'\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' .
+'\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' .
+'\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' .
+'\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' .
+'\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' .
+'\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' .
+'\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' .
+'\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' .
+'\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' .
+'\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' .
+'\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' .
+'\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' .
+'\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' .
+'\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' .
+'\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' .
+'\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' .
+'\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' .
+'\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' .
+'\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' .
+'\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' .
+'\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' .
+'\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' .
+'\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' .
+'\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' .
+'\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' .
+'\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' .
+'\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' .
+'\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' .
+'\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' .
+'\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' .
+'\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' .
+'\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' .
+'\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' .
+'\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' .
+'\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' .
+'\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' .
+'\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' .
+'\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' .
+'\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' .
+'\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' .
+'\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' .
+'\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' .
+'\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' .
+'\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' .
+'\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' .
+'\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' .
+'\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' .
+'\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' .
+'\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' .
+'\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' .
+'\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' .
+'\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' .
+'\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' .
+'\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' .
+'\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' .
+'\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' .
+'\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' .
+'\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' .
+'\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' .
+'\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' .
+'\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' .
+'\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' .
+'\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' .
+'\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' .
+'\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' .
+'\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' .
+'\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' .
+'\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' .
+'\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' .
+'\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' .
+'\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' .
+'\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' .
+'\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' .
+'\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' .
+'\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' .
+'\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' .
+'\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' .
+'\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' .
+'\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' .
+'\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' .
+'\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' .
+'\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' .
+'\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' .
+'\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' .
+'\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' .
+'\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' .
+'\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' .
+'\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' .
+'\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' .
+'\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' .
+'\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' .
+'\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' .
+'\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' .
+'\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' .
+'\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' .
+'\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' .
+'\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' .
+'\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' .
+'\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' .
+'\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' .
+'\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' .
+'\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' .
+'\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' .
+'\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' .
+'\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' .
+'\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' .
+'\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' .
+'\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' .
+'\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' .
+'\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' .
+'\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' .
+'\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' .
+'\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' .
+'\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' .
+'\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' .
+'\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' .
+'\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' .
+'\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' .
+'\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' .
+'\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' .
+'\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' .
+'\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' .
+'\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' .
+'\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' .
+'\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' .
+'\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' .
+'\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' .
+'\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' .
+'\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' .
+'\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' .
+'\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' .
+'\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' .
+'\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' .
+'\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' .
+'\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' .
+'\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' .
+'\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' .
+'\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' .
+'\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' .
+'\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' .
+'\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' .
+'\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' .
+'\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' .
+'\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' .
+'\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' .
+'\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' .
+'\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' .
+'\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' .
+'\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' .
+'\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' .
+'\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' .
+'\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' .
+'\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' .
+'\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' .
+'\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' .
+'\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' .
+'\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' .
+'\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' .
+'\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' .
+'\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' .
+'\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' .
+'\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' .
+'\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' .
+'\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' .
+'\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' .
+'\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' .
+'\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' .
+'\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' .
+'\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' .
+'\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' .
+'\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' .
+'\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' .
+'\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' .
+'\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' .
+'\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' .
+'\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' .
+'\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' .
+'\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' .
+'\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' .
+'\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' .
+'\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' .
+'\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' .
+'\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' .
+'\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' .
+'\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' .
+'\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' .
+'\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' .
+'\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' .
+'\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' .
+'\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' .
+'\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' .
+'\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' .
+'\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' .
+'\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' .
+'\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' .
+'\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu',
+ 12 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' .
+'\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' .
+'\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' .
+'\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' .
+'\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' .
+'\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' .
+'\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' .
+'\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' .
+'\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' .
+'\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' .
+'\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' .
+'\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' .
+'\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' .
+'\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' .
+'\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' .
+'\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' .
+'\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' .
+'\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' .
+'\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' .
+'\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' .
+'\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' .
+'\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' .
+'\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' .
+'\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' .
+'\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' .
+'\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' .
+'\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' .
+'\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' .
+'\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' .
+'\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' .
+'\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' .
+'\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' .
+'\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' .
+'\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' .
+'\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' .
+'\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' .
+'\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' .
+'\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' .
+'\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' .
+'\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' .
+'\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' .
+'\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' .
+'\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' .
+'\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' .
+'\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' .
+'\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' .
+'\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' .
+'\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' .
+'\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' .
+'\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' .
+'\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' .
+'\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' .
+'\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' .
+'\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' .
+'\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' .
+'\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' .
+'\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' .
+'\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' .
+'\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' .
+'\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' .
+'\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' .
+'\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' .
+'\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' .
+'\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' .
+'\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' .
+'\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' .
+'\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' .
+'\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' .
+'\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' .
+'\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' .
+'\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' .
+'\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' .
+'\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' .
+'\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' .
+'\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' .
+'\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' .
+'\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' .
+'\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' .
+'\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' .
+'\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' .
+'\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' .
+'\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' .
+'\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' .
+'\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' .
+'\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' .
+'\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' .
+'\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' .
+'\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' .
+'\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' .
+'\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' .
+'\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' .
+'\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' .
+'\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' .
+'\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' .
+'\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' .
+'\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' .
+'\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' .
+'\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' .
+'\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' .
+'\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' .
+'\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' .
+'\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' .
+'\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' .
+'\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' .
+'\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' .
+'\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' .
+'\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' .
+'\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' .
+'\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' .
+'\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' .
+'\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' .
+'\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' .
+'\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' .
+'\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' .
+'\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' .
+'\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' .
+'\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' .
+'\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' .
+'\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' .
+'\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' .
+'\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' .
+'\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' .
+'\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' .
+'\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' .
+'\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' .
+'\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' .
+'\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' .
+'\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' .
+'\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' .
+'\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' .
+'\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' .
+'\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' .
+'\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' .
+'\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' .
+'\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' .
+'\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' .
+'\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' .
+'\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' .
+'\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' .
+'\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' .
+'\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' .
+'\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' .
+'\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' .
+'\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' .
+'\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' .
+'\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' .
+'\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' .
+'\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' .
+'\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' .
+'\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' .
+'\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' .
+'\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' .
+'\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' .
+'\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' .
+'\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' .
+'\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' .
+'\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' .
+'\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' .
+'\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' .
+'\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' .
+'\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' .
+'\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' .
+'\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' .
+'\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' .
+'\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' .
+'\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' .
+'\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' .
+'\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' .
+'\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' .
+'\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' .
+'\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' .
+'\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' .
+'\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' .
+'\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' .
+'\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' .
+'\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' .
+'\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' .
+'\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' .
+'\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' .
+'\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' .
+'\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' .
+'\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' .
+'\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' .
+'\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' .
+'\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' .
+'\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' .
+'\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' .
+'\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' .
+'\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' .
+'\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' .
+'\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' .
+'\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' .
+'\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' .
+'\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' .
+'\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' .
+'\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' .
+'\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' .
+'\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' .
+'\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' .
+'\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' .
+'\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' .
+'\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' .
+'\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' .
+'\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' .
+'\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' .
+'\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' .
+'\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' .
+'\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' .
+'\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' .
+'\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' .
+'\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' .
+'\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' .
+'\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' .
+'\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' .
+'\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' .
+'\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' .
+'\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' .
+'\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' .
+'\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' .
+'\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' .
+'\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' .
+'\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' .
+'\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' .
+'\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' .
+'\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' .
+'\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' .
+'\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' .
+'\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' .
+'\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' .
+'\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' .
+'\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' .
+'\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' .
+'\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' .
+'\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' .
+'\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' .
+'\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' .
+'\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' .
+'\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' .
+'\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' .
+'\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' .
+'\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' .
+'\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' .
+'\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' .
+'\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' .
+'\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' .
+'\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' .
+'\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' .
+'\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' .
+'\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' .
+'\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' .
+'\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' .
+'\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' .
+'\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' .
+'\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' .
+'\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' .
+'\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' .
+'\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' .
+'\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' .
+'\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' .
+'\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' .
+'\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' .
+'\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' .
+'\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' .
+'\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' .
+'\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' .
+'\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' .
+'\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' .
+'\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' .
+'\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' .
+'\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' .
+'\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' .
+'\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' .
+'\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' .
+'\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' .
+'\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' .
+'\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' .
+'\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' .
+'\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' .
+'\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' .
+'\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' .
+'\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' .
+'\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' .
+'\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' .
+'\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' .
+'\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' .
+'\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' .
+'\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' .
+'\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' .
+'\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' .
+'\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' .
+'\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' .
+'\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' .
+'\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' .
+'\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' .
+'\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' .
+'\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' .
+'\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' .
+'\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' .
+'\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' .
+'\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' .
+'\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' .
+'\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' .
+'\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' .
+'\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' .
+'\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' .
+'\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' .
+'\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' .
+'\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' .
+'\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' .
+'\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' .
+'\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' .
+'\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' .
+'\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' .
+'\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' .
+'\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' .
+'\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' .
+'\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' .
+'\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' .
+'\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' .
+'\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' .
+'\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' .
+'\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' .
+'\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' .
+'\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' .
+'\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' .
+'\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' .
+'\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' .
+'\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' .
+'\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' .
+'\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' .
+'\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' .
+'\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' .
+'\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' .
+'\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' .
+'\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' .
+'\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' .
+'\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' .
+'\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' .
+'\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' .
+'\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' .
+'\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' .
+'\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' .
+'\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' .
+'\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' .
+'\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' .
+'\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' .
+'\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' .
+'\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' .
+'\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' .
+'\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' .
+'\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' .
+'\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' .
+'\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' .
+'\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' .
+'\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' .
+'\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' .
+'\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' .
+'\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' .
+'\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' .
+'\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' .
+'\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' .
+'\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' .
+'\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' .
+'\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' .
+'\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' .
+'\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' .
+'\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' .
+'\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' .
+'\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' .
+'\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' .
+'\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' .
+'\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' .
+'\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' .
+'\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' .
+'\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' .
+'\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' .
+'\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' .
+'\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' .
+'\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' .
+'\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' .
+'\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' .
+'\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' .
+'\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' .
+'\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' .
+'\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' .
+'\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' .
+'\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' .
+'\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' .
+'\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' .
+'\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' .
+'\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' .
+'\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' .
+'\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' .
+'\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' .
+'\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' .
+'\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' .
+'\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' .
+'\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' .
+'\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' .
+'\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' .
+'\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' .
+'\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' .
+'\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' .
+'\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' .
+'\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' .
+'\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' .
+'\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' .
+'\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' .
+'\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' .
+'\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' .
+'\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' .
+'\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' .
+'\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' .
+'\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' .
+'\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' .
+'\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' .
+'\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' .
+'\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' .
+'\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' .
+'\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' .
+'\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' .
+'\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' .
+'\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' .
+'\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' .
+'\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' .
+'\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' .
+'\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' .
+'\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' .
+'\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' .
+'\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' .
+'\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' .
+'\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' .
+'\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' .
+'\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' .
+'\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' .
+'\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' .
+'\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' .
+'\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' .
+'\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' .
+'\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' .
+'\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' .
+'\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' .
+'\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' .
+'\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' .
+'\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' .
+'\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' .
+'\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' .
+'\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' .
+'\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' .
+'\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' .
+'\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' .
+'\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' .
+'\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' .
+'\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' .
+'\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' .
+'\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' .
+'\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' .
+'\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' .
+'\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' .
+'\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' .
+'\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' .
+'\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' .
+'\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' .
+'\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' .
+'\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' .
+'\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' .
+'\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' .
+'\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' .
+'\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' .
+'\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' .
+'\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' .
+'\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' .
+'\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' .
+'\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' .
+'\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' .
+'\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' .
+'\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' .
+'\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' .
+'\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' .
+'\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' .
+'\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' .
+'\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' .
+'\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' .
+'\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' .
+'\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' .
+'\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' .
+'\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' .
+'\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' .
+'\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' .
+'\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' .
+'\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' .
+'\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' .
+'\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' .
+'\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' .
+'\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' .
+'\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' .
+'\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' .
+'\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' .
+'\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' .
+'\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' .
+'\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' .
+'\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' .
+'\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' .
+'\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' .
+'\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' .
+'\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' .
+'\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' .
+'\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' .
+'\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' .
+'\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' .
+'\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' .
+'\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' .
+'\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' .
+'\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' .
+'\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' .
+'\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' .
+'\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' .
+'\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' .
+'\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' .
+'\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' .
+'\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' .
+'\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' .
+'\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' .
+'\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' .
+'\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' .
+'\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' .
+'\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' .
+'\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' .
+'\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' .
+'\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' .
+'\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' .
+'\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' .
+'\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' .
+'\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' .
+'\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' .
+'\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' .
+'\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' .
+'\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' .
+'\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' .
+'\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' .
+'\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' .
+'\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' .
+'\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' .
+'\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' .
+'\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' .
+'\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' .
+'\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' .
+'\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' .
+'\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' .
+'\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' .
+'\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' .
+'\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' .
+'\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' .
+'\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' .
+'\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' .
+'\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' .
+'\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' .
+'\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' .
+'\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' .
+'\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' .
+'\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' .
+'\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' .
+'\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' .
+'\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' .
+'\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' .
+'\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' .
+'\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' .
+'\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' .
+'\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' .
+'\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' .
+'\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' .
+'\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' .
+'\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' .
+'\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' .
+'\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' .
+'\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' .
+'\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' .
+'\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' .
+'\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' .
+'\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' .
+'\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' .
+'\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' .
+'\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' .
+'\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' .
+'\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' .
+'\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' .
+'\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' .
+'\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' .
+'\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' .
+'\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' .
+'\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' .
+'\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' .
+'\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' .
+'\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' .
+'\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' .
+'\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' .
+'\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' .
+'\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' .
+'\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' .
+'\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' .
+'\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' .
+'\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' .
+'\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' .
+'\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' .
+'\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' .
+'\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' .
+'\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' .
+'\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' .
+'\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' .
+'\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' .
+'\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' .
+'\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' .
+'\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' .
+'\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' .
+'\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' .
+'\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' .
+'\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' .
+'\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' .
+'\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' .
+'\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' .
+'\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' .
+'\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' .
+'\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' .
+'\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' .
+'\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' .
+'\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' .
+'\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' .
+'\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' .
+'\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' .
+'\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' .
+'\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' .
+'\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' .
+'\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' .
+'\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' .
+'\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' .
+'\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' .
+'\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' .
+'\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' .
+'\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' .
+'\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' .
+'\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' .
+'\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' .
+'\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' .
+'\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' .
+'\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' .
+'\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' .
+'\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' .
+'\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' .
+'\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' .
+'\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' .
+'\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' .
+'\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' .
+'\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' .
+'\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' .
+'\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' .
+'\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' .
+'\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' .
+'\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' .
+'\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' .
+'\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' .
+'\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' .
+'\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' .
+'\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' .
+'\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' .
+'\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' .
+'\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' .
+'\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' .
+'\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' .
+'\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' .
+'\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' .
+'\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' .
+'\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' .
+'\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' .
+'\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' .
+'\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' .
+'\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' .
+'\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' .
+'\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' .
+'\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' .
+'\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' .
+'\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' .
+'\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' .
+'\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' .
+'\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' .
+'\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' .
+'\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' .
+'\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' .
+'\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' .
+'\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' .
+'\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' .
+'\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' .
+'\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' .
+'\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' .
+'\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' .
+'\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' .
+'\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' .
+'\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' .
+'\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' .
+'\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' .
+'\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' .
+'\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' .
+'\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' .
+'\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' .
+'\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' .
+'\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' .
+'\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' .
+'\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' .
+'\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' .
+'\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' .
+'\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' .
+'\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' .
+'\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' .
+'\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' .
+'\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' .
+'\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' .
+'\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' .
+'\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' .
+'\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' .
+'\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' .
+'\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' .
+'\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' .
+'\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' .
+'\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' .
+'\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' .
+'\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' .
+'\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' .
+'\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' .
+'\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' .
+'\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' .
+'\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' .
+'\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' .
+'\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' .
+'\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' .
+'\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' .
+'\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' .
+'\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' .
+'\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' .
+'\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' .
+'\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' .
+'\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' .
+'\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' .
+'\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' .
+'\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' .
+'\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' .
+'\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' .
+'\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' .
+'\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' .
+'\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' .
+'\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' .
+'\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' .
+'\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' .
+'\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' .
+'\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' .
+'\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' .
+'\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' .
+'\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' .
+'\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' .
+'\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' .
+'\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' .
+'\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' .
+'\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' .
+'\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' .
+'\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' .
+'\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' .
+'\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' .
+'\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' .
+'\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' .
+'\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' .
+'\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' .
+'\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' .
+'\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' .
+'\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' .
+'\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' .
+'\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' .
+'\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' .
+'\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' .
+'\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' .
+'\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' .
+'\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' .
+'\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' .
+'\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' .
+'\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' .
+'\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' .
+'\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' .
+'\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' .
+'\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' .
+'\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' .
+'\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' .
+'\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' .
+'\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' .
+'\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' .
+'\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' .
+'\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' .
+'\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' .
+'\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' .
+'\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' .
+'\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' .
+'\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' .
+'\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' .
+'\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' .
+'\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' .
+'\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' .
+'\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' .
+'\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' .
+'\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' .
+'\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' .
+'\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' .
+'\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' .
+'\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' .
+'\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' .
+'\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' .
+'\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' .
+'\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' .
+'\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' .
+'\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' .
+'\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' .
+'\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' .
+'\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' .
+'\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' .
+'\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' .
+'\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' .
+'\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' .
+'\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' .
+'\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' .
+'\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' .
+'\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' .
+'\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' .
+'\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' .
+'\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' .
+'\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' .
+'\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' .
+'\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' .
+'\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' .
+'\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' .
+'\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' .
+'\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' .
+'\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' .
+'\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' .
+'\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' .
+'\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' .
+'\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' .
+'\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' .
+'\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' .
+'\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' .
+'\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' .
+'\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' .
+'\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' .
+'\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' .
+'\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' .
+'\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' .
+'\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' .
+'\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' .
+'\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' .
+'\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' .
+'\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' .
+'\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' .
+'\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' .
+'\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' .
+'\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' .
+'\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' .
+'\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' .
+'\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' .
+'\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' .
+'\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' .
+'\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' .
+'\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' .
+'\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' .
+'\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' .
+'\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' .
+'\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' .
+'\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' .
+'\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' .
+'\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' .
+'\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' .
+'\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' .
+'\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' .
+'\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' .
+'\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' .
+'\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' .
+'\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' .
+'\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' .
+'\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' .
+'\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' .
+'\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' .
+'\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' .
+'\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' .
+'\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' .
+'\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' .
+'\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' .
+'\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' .
+'\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' .
+'\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' .
+'\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' .
+'\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' .
+'\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' .
+'\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' .
+'\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' .
+'\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' .
+'\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' .
+'\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' .
+'\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' .
+'\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' .
+'\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' .
+'\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' .
+'\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' .
+'\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' .
+'\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' .
+'\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' .
+'\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' .
+'\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' .
+'\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' .
+'\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' .
+'\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' .
+'\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' .
+'\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' .
+'\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' .
+'\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' .
+'\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' .
+'\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' .
+'\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' .
+'\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' .
+'\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' .
+'\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' .
+'\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' .
+'\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' .
+'\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' .
+'\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' .
+'\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' .
+'\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' .
+'\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' .
+'\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' .
+'\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' .
+'\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' .
+'\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' .
+'\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' .
+'\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' .
+'\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' .
+'\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' .
+'\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' .
+'\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' .
+'\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' .
+'\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' .
+'\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' .
+'\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' .
+'\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' .
+'\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' .
+'\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' .
+'\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' .
+'\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' .
+'\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' .
+'\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' .
+'\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' .
+'\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' .
+'\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' .
+'\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' .
+'\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' .
+'\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' .
+'\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' .
+'\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' .
+'\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' .
+'\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' .
+'\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' .
+'\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' .
+'\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' .
+'\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' .
+'\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' .
+'\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' .
+'\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' .
+'\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' .
+'\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' .
+'\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' .
+'\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' .
+'\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' .
+'\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' .
+'\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' .
+'\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' .
+'\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' .
+'\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' .
+'\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' .
+'\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' .
+'\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' .
+'\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' .
+'\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' .
+'\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' .
+'\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' .
+'\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' .
+'\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' .
+'\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' .
+'\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' .
+'\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' .
+'\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' .
+'\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' .
+'\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' .
+'\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' .
+'\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' .
+'\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' .
+'\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' .
+'\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' .
+'\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' .
+'\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' .
+'\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' .
+'\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' .
+'\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' .
+'\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' .
+'\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' .
+'\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' .
+'\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' .
+'\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' .
+'\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' .
+'\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' .
+'\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' .
+'\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' .
+'\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' .
+'\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' .
+'\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' .
+'\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' .
+'\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' .
+'\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' .
+'\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' .
+'\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' .
+'\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' .
+'\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' .
+'\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' .
+'\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' .
+'\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' .
+'\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' .
+'\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' .
+'\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' .
+'\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' .
+'\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' .
+'\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' .
+'\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' .
+'\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' .
+'\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' .
+'\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' .
+'\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' .
+'\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' .
+'\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' .
+'\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' .
+'\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' .
+'\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' .
+'\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' .
+'\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' .
+'\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' .
+'\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' .
+'\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' .
+'\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' .
+'\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' .
+'\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' .
+'\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' .
+'\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' .
+'\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' .
+'\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' .
+'\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' .
+'\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' .
+'\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' .
+'\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' .
+'\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' .
+'\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' .
+'\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' .
+'\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' .
+'\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' .
+'\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' .
+'\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' .
+'\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' .
+'\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' .
+'\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' .
+'\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' .
+'\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' .
+'\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' .
+'\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' .
+'\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' .
+'\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' .
+'\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' .
+'\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' .
+'\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' .
+'\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' .
+'\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' .
+'\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' .
+'\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' .
+'\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' .
+'\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' .
+'\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' .
+'\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' .
+'\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' .
+'\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' .
+'\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' .
+'\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' .
+'\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' .
+'\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' .
+'\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' .
+'\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' .
+'\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' .
+'\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' .
+'\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' .
+'\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' .
+'\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' .
+'\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' .
+'\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' .
+'\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' .
+'\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' .
+'\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' .
+'\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' .
+'\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' .
+'\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' .
+'\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' .
+'\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' .
+'\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' .
+'\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' .
+'\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' .
+'\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' .
+'\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' .
+'\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' .
+'\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' .
+'\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' .
+'\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' .
+'\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' .
+'\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' .
+'\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' .
+'\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' .
+'\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' .
+'\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' .
+'\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' .
+'\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' .
+'\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' .
+'\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' .
+'\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' .
+'\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' .
+'\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' .
+'\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' .
+'\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' .
+'\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' .
+'\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' .
+'\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' .
+'\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' .
+'\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' .
+'\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' .
+'\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' .
+'\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' .
+'\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' .
+'\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' .
+'\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' .
+'\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' .
+'\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' .
+'\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' .
+'\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' .
+'\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' .
+'\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' .
+'\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' .
+'\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' .
+'\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' .
+'\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' .
+'\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' .
+'\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' .
+'\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' .
+'\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' .
+'\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' .
+'\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' .
+'\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' .
+'\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' .
+'\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' .
+'\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' .
+'\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' .
+'\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' .
+'\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' .
+'\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' .
+'\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' .
+'\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' .
+'\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' .
+'\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' .
+'\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' .
+'\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' .
+'\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' .
+'\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' .
+'\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' .
+'\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' .
+'\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' .
+'\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' .
+'\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' .
+'\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' .
+'\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' .
+'\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' .
+'\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' .
+'\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' .
+'\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' .
+'\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' .
+'\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' .
+'\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' .
+'\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' .
+'\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' .
+'\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' .
+'\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' .
+'\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' .
+'\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' .
+'\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' .
+'\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' .
+'\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' .
+'\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' .
+'\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' .
+'\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' .
+'\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' .
+'\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' .
+'\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' .
+'\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' .
+'\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' .
+'\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' .
+'\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' .
+'\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' .
+'\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' .
+'\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' .
+'\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' .
+'\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' .
+'\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' .
+'\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' .
+'\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' .
+'\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' .
+'\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' .
+'\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' .
+'\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' .
+'\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' .
+'\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' .
+'\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' .
+'\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' .
+'\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' .
+'\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' .
+'\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' .
+'\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' .
+'\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' .
+'\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' .
+'\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' .
+'\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' .
+'\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' .
+'\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' .
+'\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' .
+'\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' .
+'\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' .
+'\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' .
+'\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' .
+'\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' .
+'\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' .
+'\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' .
+'\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' .
+'\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' .
+'\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' .
+'\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' .
+'\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' .
+'\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' .
+'\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' .
+'\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' .
+'\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' .
+'\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' .
+'\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' .
+'\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' .
+'\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' .
+'\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' .
+'\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' .
+'\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' .
+'\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' .
+'\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' .
+'\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' .
+'\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' .
+'\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' .
+'\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' .
+'\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' .
+'\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' .
+'\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' .
+'\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' .
+'\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' .
+'\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' .
+'\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' .
+'\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' .
+'\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' .
+'\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' .
+'\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' .
+'\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' .
+'\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' .
+'\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' .
+'\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' .
+'\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' .
+'\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' .
+'\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' .
+'\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' .
+'\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' .
+'\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' .
+'\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' .
+'\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' .
+'\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' .
+'\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' .
+'\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' .
+'\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' .
+'\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' .
+'\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' .
+'\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' .
+'\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' .
+'\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' .
+'\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' .
+'\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' .
+'\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' .
+'\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' .
+'\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' .
+'\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' .
+'\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' .
+'\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' .
+'\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' .
+'\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' .
+'\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' .
+'\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' .
+'\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' .
+'\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' .
+'\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' .
+'\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' .
+'\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' .
+'\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' .
+'\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' .
+'\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' .
+'\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' .
+'\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' .
+'\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' .
+'\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' .
+'\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' .
+'\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' .
+'\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' .
+'\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' .
+'\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' .
+'\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' .
+'\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' .
+'\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' .
+'\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' .
+'\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' .
+'\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' .
+'\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' .
+'\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' .
+'\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' .
+'\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' .
+'\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' .
+'\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' .
+'\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' .
+'\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' .
+'\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' .
+'\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' .
+'\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' .
+'\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' .
+'\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' .
+'\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' .
+'\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' .
+'\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' .
+'\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' .
+'\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' .
+'\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' .
+'\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' .
+'\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' .
+'\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' .
+'\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' .
+'\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' .
+'\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' .
+'\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' .
+'\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' .
+'\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' .
+'\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' .
+'\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' .
+'\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' .
+'\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' .
+'\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' .
+'\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' .
+'\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' .
+'\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' .
+'\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' .
+'\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' .
+'\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' .
+'\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' .
+'\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' .
+'\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' .
+'\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' .
+'\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' .
+'\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' .
+'\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' .
+'\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' .
+'\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' .
+'\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' .
+'\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' .
+'\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' .
+'\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' .
+'\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' .
+'\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' .
+'\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' .
+'\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' .
+'\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' .
+'\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' .
+'\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' .
+'\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' .
+'\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' .
+'\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' .
+'\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' .
+'\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' .
+'\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' .
+'\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' .
+'\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' .
+'\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' .
+'\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' .
+'\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' .
+'\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' .
+'\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' .
+'\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' .
+'\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' .
+'\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' .
+'\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' .
+'\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' .
+'\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' .
+'\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' .
+'\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' .
+'\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' .
+'\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' .
+'\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' .
+'\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' .
+'\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' .
+'\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' .
+'\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' .
+'\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' .
+'\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' .
+'\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' .
+'\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' .
+'\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' .
+'\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' .
+'\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' .
+'\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' .
+'\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' .
+'\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' .
+'\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' .
+'\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' .
+'\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' .
+'\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' .
+'\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' .
+'\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' .
+'\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' .
+'\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' .
+'\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' .
+'\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' .
+'\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' .
+'\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' .
+'\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' .
+'\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' .
+'\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' .
+'\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' .
+'\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' .
+'\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' .
+'\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' .
+'\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' .
+'\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' .
+'\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' .
+'\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' .
+'\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' .
+'\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' .
+'\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' .
+'\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' .
+'\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' .
+'\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' .
+'\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' .
+'\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' .
+'\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' .
+'\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' .
+'\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' .
+'\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' .
+'\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' .
+'\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' .
+'\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' .
+'\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' .
+'\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' .
+'\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' .
+'\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' .
+'\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' .
+'\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' .
+'\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' .
+'\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' .
+'\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' .
+'\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' .
+'\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' .
+'\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' .
+'\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' .
+'\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' .
+'\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' .
+'\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' .
+'\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' .
+'\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' .
+'\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' .
+'\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' .
+'\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' .
+'\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' .
+'\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' .
+'\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' .
+'\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' .
+'\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' .
+'\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' .
+'\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' .
+'\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' .
+'\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' .
+'\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' .
+'\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' .
+'\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' .
+'\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' .
+'\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' .
+'\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' .
+'\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' .
+'\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' .
+'\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' .
+'\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' .
+'\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' .
+'\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' .
+'\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' .
+'\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' .
+'\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' .
+'\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' .
+'\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' .
+'\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' .
+'\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' .
+'\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' .
+'\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' .
+'\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' .
+'\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' .
+'\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' .
+'\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' .
+'\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' .
+'\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' .
+'\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' .
+'\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' .
+'\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' .
+'\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' .
+'\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' .
+'\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' .
+'\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' .
+'\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' .
+'\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' .
+'\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' .
+'\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' .
+'\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' .
+'\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' .
+'\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' .
+'\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' .
+'\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' .
+'\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' .
+'\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' .
+'\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' .
+'\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' .
+'\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' .
+'\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' .
+'\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' .
+'\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' .
+'\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' .
+'\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' .
+'\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' .
+'\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' .
+'\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' .
+'\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' .
+'\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' .
+'\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' .
+'\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' .
+'\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' .
+'\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' .
+'\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' .
+'\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' .
+'\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' .
+'\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' .
+'\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' .
+'\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' .
+'\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' .
+'\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' .
+'\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' .
+'\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' .
+'\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' .
+'\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' .
+'\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' .
+'\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' .
+'\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' .
+'\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' .
+'\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' .
+'\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' .
+'\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' .
+'\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' .
+'\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' .
+'\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' .
+'\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' .
+'\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' .
+'\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' .
+'\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' .
+'\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' .
+'\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' .
+'\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' .
+'\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' .
+'\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' .
+'\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' .
+'\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' .
+'\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' .
+'\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' .
+'\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' .
+'\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' .
+'\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' .
+'\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' .
+'\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' .
+'\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' .
+'\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' .
+'\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' .
+'\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' .
+'\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' .
+'\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' .
+'\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' .
+'\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' .
+'\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' .
+'\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' .
+'\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' .
+'\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' .
+'\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' .
+'\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' .
+'\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' .
+'\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' .
+'\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' .
+'\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' .
+'\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' .
+'\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' .
+'\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' .
+'\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' .
+'\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' .
+'\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' .
+'\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' .
+'\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' .
+'\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' .
+'\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' .
+'\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' .
+'\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' .
+'\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' .
+'\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' .
+'\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' .
+'\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' .
+'\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' .
+'\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' .
+'\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' .
+'\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' .
+'\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' .
+'\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' .
+'\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' .
+'\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' .
+'\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' .
+'\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' .
+'\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' .
+'\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' .
+'\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' .
+'\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' .
+'\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' .
+'\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' .
+'\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' .
+'\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' .
+'\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' .
+'\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' .
+'\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' .
+'\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' .
+'\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' .
+'\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' .
+'\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' .
+'\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' .
+'\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' .
+'\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' .
+'\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' .
+'\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' .
+'\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' .
+'\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' .
+'\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' .
+'\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' .
+'\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' .
+'\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' .
+'\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' .
+'\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' .
+'\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' .
+'\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' .
+'\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' .
+'\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' .
+'\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' .
+'\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' .
+'\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' .
+'\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' .
+'\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' .
+'\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' .
+'\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' .
+'\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' .
+'\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' .
+'\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' .
+'\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' .
+'\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' .
+'\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' .
+'\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' .
+'\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' .
+'\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' .
+'\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' .
+'\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' .
+'\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' .
+'\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' .
+'\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' .
+'\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' .
+'\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' .
+'\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' .
+'\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' .
+'\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' .
+'\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' .
+'\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' .
+'\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' .
+'\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' .
+'\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' .
+'\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' .
+'\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' .
+'\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' .
+'\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' .
+'\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' .
+'\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' .
+'\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' .
+'\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' .
+'\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' .
+'\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' .
+'\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' .
+'\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' .
+'\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' .
+'\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' .
+'\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' .
+'\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' .
+'\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' .
+'\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' .
+'\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' .
+'\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' .
+'\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' .
+'\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' .
+'\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' .
+'\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' .
+'\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' .
+'\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' .
+'\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' .
+'\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' .
+'\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' .
+'\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' .
+'\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' .
+'\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' .
+'\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' .
+'\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' .
+'\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' .
+'\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' .
+'\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' .
+'\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' .
+'\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' .
+'\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' .
+'\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' .
+'\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' .
+'\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' .
+'\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' .
+'\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' .
+'\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' .
+'\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' .
+'\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' .
+'\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' .
+'\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' .
+'\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' .
+'\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' .
+'\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' .
+'\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' .
+'\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' .
+'\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' .
+'\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' .
+'\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' .
+'\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' .
+'\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' .
+'\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' .
+'\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' .
+'\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' .
+'\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' .
+'\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' .
+'\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' .
+'\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' .
+'\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' .
+'\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' .
+'\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' .
+'\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' .
+'\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' .
+'\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' .
+'\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' .
+'\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' .
+'\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' .
+'\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' .
+'\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' .
+'\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' .
+'\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' .
+'\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' .
+'\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' .
+'\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' .
+'\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' .
+'\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' .
+'\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' .
+'\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' .
+'\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' .
+'\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' .
+'\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' .
+'\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' .
+'\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' .
+'\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' .
+'\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' .
+'\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' .
+'\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' .
+'\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' .
+'\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' .
+'\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' .
+'\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' .
+'\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' .
+'\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' .
+'\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' .
+'\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' .
+'\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' .
+'\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' .
+'\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' .
+'\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' .
+'\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' .
+'\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' .
+'\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' .
+'\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' .
+'\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' .
+'\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' .
+'\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' .
+'\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' .
+'\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' .
+'\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' .
+'\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' .
+'\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' .
+'\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' .
+'\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' .
+'\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' .
+'\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' .
+'\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' .
+'\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' .
+'\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' .
+'\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' .
+'\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' .
+'\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' .
+'\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' .
+'\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' .
+'\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' .
+'\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' .
+'\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' .
+'\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' .
+'\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' .
+'\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' .
+'\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' .
+'\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' .
+'\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' .
+'\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' .
+'\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' .
+'\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' .
+'\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' .
+'\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' .
+'\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' .
+'\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' .
+'\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' .
+'\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' .
+'\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' .
+'\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' .
+'\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' .
+'\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' .
+'\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' .
+'\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' .
+'\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' .
+'\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' .
+'\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' .
+'\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' .
+'\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' .
+'\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' .
+'\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' .
+'\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' .
+'\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' .
+'\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' .
+'\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' .
+'\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' .
+'\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' .
+'\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' .
+'\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' .
+'\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' .
+'\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' .
+'\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' .
+'\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' .
+'\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' .
+'\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' .
+'\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' .
+'\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' .
+'\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' .
+'\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' .
+'\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' .
+'\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' .
+'\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' .
+'\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' .
+'\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' .
+'\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' .
+'\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' .
+'\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' .
+'\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' .
+'\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' .
+'\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' .
+'\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' .
+'\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' .
+'\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' .
+'\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' .
+'\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' .
+'\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' .
+'\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' .
+'\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' .
+'\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' .
+'\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' .
+'\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' .
+'\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' .
+'\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' .
+'\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' .
+'\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' .
+'\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' .
+'\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' .
+'\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' .
+'\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' .
+'\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' .
+'\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' .
+'\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' .
+'\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' .
+'\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' .
+'\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' .
+'\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' .
+'\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' .
+'\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' .
+'\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' .
+'\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' .
+'\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' .
+'\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' .
+'\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' .
+'\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' .
+'\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' .
+'\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' .
+'\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' .
+'\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' .
+'\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' .
+'\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' .
+'\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' .
+'\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' .
+'\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' .
+'\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' .
+'\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' .
+'\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' .
+'\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' .
+'\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' .
+'\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' .
+'\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' .
+'\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' .
+'\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' .
+'\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' .
+'\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' .
+'\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' .
+'\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' .
+'\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' .
+'\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' .
+'\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' .
+'\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' .
+'\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' .
+'\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' .
+'\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' .
+'\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' .
+'\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' .
+'\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' .
+'\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' .
+'\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' .
+'\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' .
+'\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' .
+'\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' .
+'\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' .
+'\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' .
+'\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' .
+'\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' .
+'\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' .
+'\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' .
+'\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' .
+'\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' .
+'\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' .
+'\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' .
+'\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' .
+'\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' .
+'\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' .
+'\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' .
+'\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' .
+'\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' .
+'\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' .
+'\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' .
+'\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' .
+'\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' .
+'\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' .
+'\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' .
+'\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' .
+'\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' .
+'\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' .
+'\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' .
+'\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' .
+'\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' .
+'\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' .
+'\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' .
+'\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' .
+'\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' .
+'\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' .
+'\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' .
+'\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' .
+'\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' .
+'\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' .
+'\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' .
+'\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' .
+'\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' .
+'\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' .
+'\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' .
+'\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' .
+'\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' .
+'\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' .
+'\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' .
+'\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' .
+'\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' .
+'\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' .
+'\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' .
+'\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' .
+'\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' .
+'\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' .
+'\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' .
+'\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' .
+'\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' .
+'\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' .
+'\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' .
+'\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' .
+'\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' .
+'\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' .
+'\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' .
+'\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' .
+'\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' .
+'\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' .
+'\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' .
+'\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' .
+'\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' .
+'\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' .
+'\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' .
+'\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' .
+'\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' .
+'\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' .
+'\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' .
+'\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' .
+'\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' .
+'\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' .
+'\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' .
+'\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' .
+'\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' .
+'\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' .
+'\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' .
+'\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' .
+'\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' .
+'\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' .
+'\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' .
+'\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' .
+'\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' .
+'\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' .
+'\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' .
+'\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' .
+'\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' .
+'\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' .
+'\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' .
+'\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' .
+'\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' .
+'\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' .
+'\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' .
+'\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' .
+'\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' .
+'\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' .
+'\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' .
+'\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' .
+'\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' .
+'\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' .
+'\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' .
+'\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' .
+'\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' .
+'\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' .
+'\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' .
+'\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' .
+'\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' .
+'\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' .
+'\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' .
+'\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' .
+'\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' .
+'\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' .
+'\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' .
+'\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' .
+'\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' .
+'\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' .
+'\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' .
+'\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' .
+'\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' .
+'\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' .
+'\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' .
+'\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' .
+'\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' .
+'\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' .
+'\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' .
+'\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' .
+'\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' .
+'\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' .
+'\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' .
+'\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' .
+'\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' .
+'\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' .
+'\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' .
+'\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' .
+'\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' .
+'\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' .
+'\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' .
+'\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' .
+'\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' .
+'\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' .
+'\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' .
+'\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' .
+'\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' .
+'\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' .
+'\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' .
+'\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' .
+'\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' .
+'\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' .
+'\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' .
+'\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' .
+'\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' .
+'\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' .
+'\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' .
+'\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' .
+'\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' .
+'\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' .
+'\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' .
+'\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' .
+'\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' .
+'\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' .
+'\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' .
+'\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' .
+'\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' .
+'\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' .
+'\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' .
+'\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' .
+'\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' .
+'\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' .
+'\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' .
+'\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' .
+'\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' .
+'\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' .
+'\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' .
+'\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' .
+'\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' .
+'\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu');
diff --git a/Zend/Validate/Hostname/Cn.php b/Zend/Validate/Hostname/Cn.php
new file mode 100644
index 00000000..eaa17607
--- /dev/null
+++ b/Zend/Validate/Hostname/Cn.php
@@ -0,0 +1,2199 @@
+ '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' .
+'\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' .
+'\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' .
+'\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' .
+'\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' .
+'\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' .
+'\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' .
+'\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' .
+'\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' .
+'\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' .
+'\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' .
+'\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' .
+'\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' .
+'\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' .
+'\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' .
+'\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' .
+'\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' .
+'\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' .
+'\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' .
+'\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' .
+'\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' .
+'\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' .
+'\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' .
+'\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' .
+'\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' .
+'\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' .
+'\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' .
+'\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' .
+'\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' .
+'\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' .
+'\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' .
+'\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' .
+'\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' .
+'\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' .
+'\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' .
+'\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' .
+'\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' .
+'\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' .
+'\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' .
+'\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' .
+'\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' .
+'\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' .
+'\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' .
+'\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' .
+'\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' .
+'\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' .
+'\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' .
+'\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' .
+'\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' .
+'\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' .
+'\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' .
+'\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' .
+'\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' .
+'\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' .
+'\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' .
+'\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' .
+'\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' .
+'\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' .
+'\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' .
+'\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' .
+'\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' .
+'\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' .
+'\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' .
+'\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' .
+'\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' .
+'\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' .
+'\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' .
+'\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' .
+'\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' .
+'\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' .
+'\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' .
+'\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' .
+'\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' .
+'\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' .
+'\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' .
+'\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' .
+'\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' .
+'\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' .
+'\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' .
+'\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' .
+'\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' .
+'\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' .
+'\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' .
+'\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' .
+'\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' .
+'\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' .
+'\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' .
+'\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' .
+'\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' .
+'\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' .
+'\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' .
+'\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' .
+'\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' .
+'\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' .
+'\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' .
+'\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' .
+'\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' .
+'\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' .
+'\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' .
+'\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' .
+'\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' .
+'\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' .
+'\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' .
+'\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' .
+'\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' .
+'\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' .
+'\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' .
+'\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' .
+'\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' .
+'\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' .
+'\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' .
+'\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' .
+'\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' .
+'\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' .
+'\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' .
+'\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' .
+'\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' .
+'\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' .
+'\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' .
+'\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' .
+'\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' .
+'\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' .
+'\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' .
+'\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' .
+'\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' .
+'\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' .
+'\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' .
+'\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' .
+'\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' .
+'\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' .
+'\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' .
+'\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' .
+'\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' .
+'\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' .
+'\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' .
+'\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' .
+'\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' .
+'\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' .
+'\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' .
+'\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' .
+'\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' .
+'\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' .
+'\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' .
+'\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' .
+'\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' .
+'\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' .
+'\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' .
+'\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' .
+'\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' .
+'\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' .
+'\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' .
+'\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' .
+'\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' .
+'\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' .
+'\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' .
+'\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' .
+'\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' .
+'\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' .
+'\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' .
+'\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' .
+'\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' .
+'\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' .
+'\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' .
+'\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' .
+'\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' .
+'\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' .
+'\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' .
+'\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' .
+'\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' .
+'\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' .
+'\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' .
+'\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' .
+'\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' .
+'\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' .
+'\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' .
+'\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' .
+'\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' .
+'\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' .
+'\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' .
+'\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' .
+'\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' .
+'\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' .
+'\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' .
+'\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' .
+'\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' .
+'\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' .
+'\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' .
+'\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' .
+'\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' .
+'\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' .
+'\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' .
+'\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' .
+'\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' .
+'\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' .
+'\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' .
+'\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' .
+'\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' .
+'\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' .
+'\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' .
+'\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' .
+'\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' .
+'\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' .
+'\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' .
+'\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' .
+'\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' .
+'\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' .
+'\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' .
+'\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' .
+'\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' .
+'\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' .
+'\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' .
+'\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' .
+'\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' .
+'\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' .
+'\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' .
+'\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' .
+'\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' .
+'\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' .
+'\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' .
+'\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' .
+'\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' .
+'\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' .
+'\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' .
+'\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' .
+'\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' .
+'\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' .
+'\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' .
+'\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' .
+'\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' .
+'\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' .
+'\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' .
+'\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' .
+'\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' .
+'\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' .
+'\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' .
+'\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' .
+'\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' .
+'\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' .
+'\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' .
+'\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' .
+'\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' .
+'\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' .
+'\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' .
+'\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' .
+'\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' .
+'\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' .
+'\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' .
+'\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' .
+'\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' .
+'\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' .
+'\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' .
+'\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' .
+'\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' .
+'\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' .
+'\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' .
+'\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' .
+'\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' .
+'\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' .
+'\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' .
+'\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' .
+'\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' .
+'\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' .
+'\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' .
+'\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' .
+'\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' .
+'\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' .
+'\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' .
+'\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' .
+'\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' .
+'\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' .
+'\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' .
+'\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' .
+'\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' .
+'\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' .
+'\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' .
+'\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' .
+'\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' .
+'\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' .
+'\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' .
+'\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' .
+'\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' .
+'\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' .
+'\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' .
+'\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' .
+'\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' .
+'\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' .
+'\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' .
+'\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' .
+'\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' .
+'\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' .
+'\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' .
+'\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' .
+'\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' .
+'\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' .
+'\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' .
+'\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' .
+'\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' .
+'\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' .
+'\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' .
+'\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' .
+'\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' .
+'\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' .
+'\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' .
+'\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' .
+'\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' .
+'\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' .
+'\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' .
+'\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' .
+'\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' .
+'\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' .
+'\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' .
+'\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' .
+'\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' .
+'\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' .
+'\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' .
+'\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' .
+'\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' .
+'\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' .
+'\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' .
+'\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' .
+'\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' .
+'\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' .
+'\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' .
+'\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' .
+'\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' .
+'\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' .
+'\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' .
+'\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' .
+'\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' .
+'\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' .
+'\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' .
+'\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' .
+'\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' .
+'\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' .
+'\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' .
+'\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' .
+'\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' .
+'\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' .
+'\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' .
+'\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' .
+'\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' .
+'\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' .
+'\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' .
+'\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' .
+'\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' .
+'\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' .
+'\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' .
+'\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' .
+'\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' .
+'\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' .
+'\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' .
+'\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' .
+'\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' .
+'\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' .
+'\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' .
+'\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' .
+'\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' .
+'\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' .
+'\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' .
+'\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' .
+'\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' .
+'\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' .
+'\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' .
+'\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' .
+'\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' .
+'\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' .
+'\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' .
+'\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' .
+'\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' .
+'\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' .
+'\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' .
+'\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' .
+'\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' .
+'\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' .
+'\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' .
+'\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' .
+'\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' .
+'\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' .
+'\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' .
+'\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' .
+'\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' .
+'\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' .
+'\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' .
+'\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' .
+'\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' .
+'\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' .
+'\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' .
+'\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' .
+'\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' .
+'\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' .
+'\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' .
+'\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' .
+'\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' .
+'\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' .
+'\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' .
+'\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' .
+'\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' .
+'\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' .
+'\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' .
+'\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' .
+'\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' .
+'\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' .
+'\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' .
+'\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' .
+'\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' .
+'\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' .
+'\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' .
+'\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' .
+'\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' .
+'\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' .
+'\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' .
+'\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' .
+'\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' .
+'\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' .
+'\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' .
+'\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' .
+'\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' .
+'\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' .
+'\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' .
+'\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' .
+'\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' .
+'\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' .
+'\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' .
+'\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' .
+'\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' .
+'\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' .
+'\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' .
+'\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' .
+'\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' .
+'\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' .
+'\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' .
+'\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' .
+'\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' .
+'\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' .
+'\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' .
+'\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' .
+'\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' .
+'\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' .
+'\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' .
+'\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' .
+'\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' .
+'\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' .
+'\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' .
+'\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' .
+'\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' .
+'\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' .
+'\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' .
+'\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' .
+'\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' .
+'\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' .
+'\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' .
+'\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' .
+'\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' .
+'\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' .
+'\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' .
+'\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' .
+'\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' .
+'\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' .
+'\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' .
+'\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' .
+'\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' .
+'\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' .
+'\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' .
+'\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' .
+'\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' .
+'\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' .
+'\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' .
+'\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' .
+'\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' .
+'\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' .
+'\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' .
+'\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' .
+'\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' .
+'\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' .
+'\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' .
+'\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' .
+'\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' .
+'\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' .
+'\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' .
+'\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' .
+'\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' .
+'\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' .
+'\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' .
+'\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' .
+'\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' .
+'\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' .
+'\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' .
+'\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' .
+'\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' .
+'\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' .
+'\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' .
+'\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' .
+'\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' .
+'\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' .
+'\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' .
+'\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' .
+'\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' .
+'\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' .
+'\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' .
+'\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' .
+'\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' .
+'\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' .
+'\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' .
+'\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' .
+'\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' .
+'\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' .
+'\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' .
+'\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' .
+'\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' .
+'\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' .
+'\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' .
+'\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' .
+'\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' .
+'\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' .
+'\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' .
+'\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' .
+'\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' .
+'\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' .
+'\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' .
+'\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' .
+'\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' .
+'\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' .
+'\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' .
+'\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' .
+'\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' .
+'\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' .
+'\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' .
+'\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' .
+'\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' .
+'\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' .
+'\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' .
+'\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' .
+'\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' .
+'\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' .
+'\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' .
+'\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' .
+'\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' .
+'\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' .
+'\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' .
+'\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' .
+'\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' .
+'\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' .
+'\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' .
+'\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' .
+'\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' .
+'\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' .
+'\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' .
+'\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' .
+'\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' .
+'\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' .
+'\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' .
+'\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' .
+'\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' .
+'\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' .
+'\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' .
+'\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' .
+'\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' .
+'\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' .
+'\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' .
+'\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' .
+'\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' .
+'\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' .
+'\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' .
+'\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' .
+'\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' .
+'\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' .
+'\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' .
+'\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' .
+'\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' .
+'\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' .
+'\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' .
+'\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' .
+'\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' .
+'\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' .
+'\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' .
+'\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' .
+'\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' .
+'\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' .
+'\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' .
+'\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' .
+'\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' .
+'\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' .
+'\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' .
+'\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' .
+'\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' .
+'\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' .
+'\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' .
+'\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' .
+'\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' .
+'\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' .
+'\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' .
+'\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' .
+'\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' .
+'\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' .
+'\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' .
+'\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' .
+'\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' .
+'\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' .
+'\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' .
+'\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' .
+'\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' .
+'\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' .
+'\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' .
+'\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' .
+'\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' .
+'\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' .
+'\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' .
+'\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' .
+'\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' .
+'\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' .
+'\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' .
+'\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' .
+'\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' .
+'\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' .
+'\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' .
+'\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' .
+'\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' .
+'\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' .
+'\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' .
+'\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' .
+'\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' .
+'\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' .
+'\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' .
+'\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' .
+'\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' .
+'\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' .
+'\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' .
+'\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' .
+'\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' .
+'\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' .
+'\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' .
+'\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' .
+'\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' .
+'\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' .
+'\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' .
+'\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' .
+'\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' .
+'\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' .
+'\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' .
+'\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' .
+'\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' .
+'\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' .
+'\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' .
+'\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' .
+'\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' .
+'\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' .
+'\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' .
+'\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' .
+'\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' .
+'\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' .
+'\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' .
+'\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' .
+'\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' .
+'\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' .
+'\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' .
+'\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' .
+'\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' .
+'\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' .
+'\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' .
+'\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' .
+'\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' .
+'\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' .
+'\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' .
+'\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' .
+'\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' .
+'\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' .
+'\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' .
+'\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' .
+'\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' .
+'\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' .
+'\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' .
+'\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' .
+'\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' .
+'\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' .
+'\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' .
+'\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' .
+'\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' .
+'\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' .
+'\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' .
+'\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' .
+'\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' .
+'\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' .
+'\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' .
+'\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' .
+'\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' .
+'\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' .
+'\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' .
+'\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' .
+'\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' .
+'\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' .
+'\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' .
+'\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' .
+'\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' .
+'\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' .
+'\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' .
+'\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' .
+'\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' .
+'\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' .
+'\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' .
+'\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' .
+'\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' .
+'\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' .
+'\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' .
+'\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' .
+'\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' .
+'\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' .
+'\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' .
+'\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' .
+'\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' .
+'\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' .
+'\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' .
+'\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' .
+'\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' .
+'\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' .
+'\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' .
+'\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' .
+'\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' .
+'\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' .
+'\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' .
+'\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' .
+'\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' .
+'\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' .
+'\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' .
+'\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' .
+'\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' .
+'\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' .
+'\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' .
+'\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' .
+'\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' .
+'\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' .
+'\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' .
+'\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' .
+'\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' .
+'\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' .
+'\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' .
+'\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' .
+'\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' .
+'\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' .
+'\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' .
+'\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' .
+'\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' .
+'\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' .
+'\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' .
+'\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' .
+'\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' .
+'\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' .
+'\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' .
+'\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' .
+'\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' .
+'\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' .
+'\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' .
+'\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' .
+'\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' .
+'\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' .
+'\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' .
+'\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' .
+'\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' .
+'\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' .
+'\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' .
+'\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' .
+'\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' .
+'\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' .
+'\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' .
+'\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' .
+'\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' .
+'\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' .
+'\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' .
+'\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' .
+'\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' .
+'\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' .
+'\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' .
+'\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' .
+'\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' .
+'\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' .
+'\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' .
+'\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' .
+'\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' .
+'\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' .
+'\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' .
+'\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' .
+'\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' .
+'\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' .
+'\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' .
+'\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' .
+'\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' .
+'\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' .
+'\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' .
+'\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' .
+'\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' .
+'\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' .
+'\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' .
+'\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' .
+'\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' .
+'\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' .
+'\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' .
+'\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' .
+'\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' .
+'\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' .
+'\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' .
+'\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' .
+'\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' .
+'\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' .
+'\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' .
+'\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' .
+'\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' .
+'\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' .
+'\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' .
+'\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' .
+'\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' .
+'\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' .
+'\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' .
+'\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' .
+'\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' .
+'\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' .
+'\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' .
+'\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' .
+'\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' .
+'\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' .
+'\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' .
+'\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' .
+'\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' .
+'\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' .
+'\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' .
+'\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' .
+'\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' .
+'\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' .
+'\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' .
+'\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' .
+'\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' .
+'\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' .
+'\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' .
+'\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' .
+'\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' .
+'\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' .
+'\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' .
+'\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' .
+'\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' .
+'\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' .
+'\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' .
+'\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' .
+'\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' .
+'\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' .
+'\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' .
+'\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' .
+'\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' .
+'\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' .
+'\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' .
+'\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' .
+'\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' .
+'\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' .
+'\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' .
+'\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' .
+'\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' .
+'\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' .
+'\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' .
+'\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' .
+'\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' .
+'\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' .
+'\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' .
+'\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' .
+'\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' .
+'\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' .
+'\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' .
+'\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' .
+'\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' .
+'\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' .
+'\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' .
+'\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' .
+'\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' .
+'\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' .
+'\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' .
+'\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' .
+'\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' .
+'\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' .
+'\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' .
+'\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' .
+'\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' .
+'\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' .
+'\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' .
+'\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' .
+'\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' .
+'\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' .
+'\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' .
+'\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' .
+'\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' .
+'\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' .
+'\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' .
+'\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' .
+'\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' .
+'\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' .
+'\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' .
+'\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' .
+'\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' .
+'\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' .
+'\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' .
+'\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' .
+'\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' .
+'\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' .
+'\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' .
+'\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' .
+'\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' .
+'\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' .
+'\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' .
+'\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' .
+'\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' .
+'\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' .
+'\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' .
+'\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' .
+'\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' .
+'\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' .
+'\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' .
+'\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' .
+'\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' .
+'\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' .
+'\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' .
+'\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' .
+'\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' .
+'\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' .
+'\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' .
+'\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' .
+'\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' .
+'\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' .
+'\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' .
+'\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' .
+'\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' .
+'\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' .
+'\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' .
+'\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' .
+'\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' .
+'\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' .
+'\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' .
+'\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' .
+'\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' .
+'\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' .
+'\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' .
+'\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' .
+'\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' .
+'\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' .
+'\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' .
+'\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' .
+'\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' .
+'\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' .
+'\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' .
+'\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' .
+'\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' .
+'\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' .
+'\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' .
+'\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' .
+'\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' .
+'\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' .
+'\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' .
+'\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' .
+'\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' .
+'\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' .
+'\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' .
+'\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' .
+'\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' .
+'\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' .
+'\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' .
+'\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' .
+'\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' .
+'\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' .
+'\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' .
+'\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' .
+'\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' .
+'\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' .
+'\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' .
+'\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' .
+'\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' .
+'\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' .
+'\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' .
+'\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' .
+'\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' .
+'\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' .
+'\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' .
+'\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' .
+'\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' .
+'\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' .
+'\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' .
+'\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' .
+'\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' .
+'\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' .
+'\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' .
+'\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' .
+'\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' .
+'\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' .
+'\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' .
+'\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' .
+'\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' .
+'\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' .
+'\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' .
+'\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' .
+'\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' .
+'\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' .
+'\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' .
+'\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' .
+'\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' .
+'\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' .
+'\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' .
+'\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' .
+'\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' .
+'\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' .
+'\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' .
+'\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' .
+'\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' .
+'\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' .
+'\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' .
+'\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' .
+'\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' .
+'\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' .
+'\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' .
+'\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' .
+'\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' .
+'\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' .
+'\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' .
+'\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' .
+'\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' .
+'\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' .
+'\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' .
+'\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' .
+'\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' .
+'\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' .
+'\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' .
+'\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' .
+'\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' .
+'\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' .
+'\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' .
+'\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' .
+'\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' .
+'\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' .
+'\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' .
+'\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' .
+'\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' .
+'\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' .
+'\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' .
+'\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' .
+'\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' .
+'\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' .
+'\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' .
+'\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' .
+'\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' .
+'\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' .
+'\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' .
+'\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' .
+'\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' .
+'\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' .
+'\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' .
+'\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' .
+'\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' .
+'\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' .
+'\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' .
+'\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' .
+'\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' .
+'\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' .
+'\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' .
+'\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' .
+'\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' .
+'\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' .
+'\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' .
+'\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' .
+'\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' .
+'\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' .
+'\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' .
+'\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' .
+'\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' .
+'\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' .
+'\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' .
+'\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' .
+'\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' .
+'\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' .
+'\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' .
+'\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' .
+'\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' .
+'\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' .
+'\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' .
+'\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' .
+'\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' .
+'\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' .
+'\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' .
+'\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' .
+'\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' .
+'\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' .
+'\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' .
+'\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' .
+'\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' .
+'\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' .
+'\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' .
+'\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' .
+'\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' .
+'\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' .
+'\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' .
+'\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' .
+'\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' .
+'\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' .
+'\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' .
+'\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' .
+'\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' .
+'\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' .
+'\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' .
+'\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' .
+'\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' .
+'\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' .
+'\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' .
+'\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' .
+'\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' .
+'\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' .
+'\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' .
+'\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' .
+'\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' .
+'\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' .
+'\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' .
+'\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' .
+'\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' .
+'\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' .
+'\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' .
+'\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' .
+'\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' .
+'\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' .
+'\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' .
+'\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' .
+'\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' .
+'\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' .
+'\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' .
+'\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' .
+'\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' .
+'\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' .
+'\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' .
+'\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' .
+'\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' .
+'\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' .
+'\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' .
+'\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' .
+'\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' .
+'\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' .
+'\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' .
+'\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' .
+'\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' .
+'\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' .
+'\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' .
+'\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' .
+'\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' .
+'\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' .
+'\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' .
+'\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' .
+'\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' .
+'\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' .
+'\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' .
+'\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' .
+'\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' .
+'\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' .
+'\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' .
+'\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' .
+'\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' .
+'\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' .
+'\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' .
+'\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' .
+'\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' .
+'\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' .
+'\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' .
+'\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' .
+'\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' .
+'\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' .
+'\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' .
+'\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' .
+'\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' .
+'\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' .
+'\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' .
+'\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' .
+'\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' .
+'\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' .
+'\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' .
+'\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' .
+'\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' .
+'\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' .
+'\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' .
+'\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' .
+'\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' .
+'\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' .
+'\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' .
+'\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' .
+'\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' .
+'\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' .
+'\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' .
+'\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' .
+'\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' .
+'\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' .
+'\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' .
+'\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' .
+'\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' .
+'\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' .
+'\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' .
+'\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' .
+'\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' .
+'\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' .
+'\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' .
+'\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' .
+'\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' .
+'\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' .
+'\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' .
+'\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' .
+'\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' .
+'\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' .
+'\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' .
+'\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' .
+'\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' .
+'\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' .
+'\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' .
+'\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' .
+'\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' .
+'\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' .
+'\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' .
+'\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' .
+'\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' .
+'\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' .
+'\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' .
+'\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' .
+'\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' .
+'\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' .
+'\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' .
+'\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' .
+'\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' .
+'\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' .
+'\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' .
+'\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' .
+'\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' .
+'\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' .
+'\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' .
+'\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' .
+'\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' .
+'\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' .
+'\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' .
+'\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' .
+'\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' .
+'\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' .
+'\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' .
+'\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' .
+'\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' .
+'\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' .
+'\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' .
+'\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' .
+'\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' .
+'\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' .
+'\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' .
+'\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' .
+'\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' .
+'\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' .
+'\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' .
+'\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' .
+'\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' .
+'\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' .
+'\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' .
+'\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' .
+'\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' .
+'\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' .
+'\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' .
+'\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' .
+'\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' .
+'\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' .
+'\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' .
+'\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' .
+'\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' .
+'\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' .
+'\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' .
+'\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' .
+'\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' .
+'\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' .
+'\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' .
+'\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' .
+'\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' .
+'\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' .
+'\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' .
+'\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' .
+'\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' .
+'\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' .
+'\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' .
+'\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' .
+'\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' .
+'\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' .
+'\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' .
+'\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' .
+'\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' .
+'\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' .
+'\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' .
+'\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' .
+'\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' .
+'\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' .
+'\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' .
+'\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' .
+'\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' .
+'\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' .
+'\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' .
+'\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' .
+'\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' .
+'\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' .
+'\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' .
+'\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' .
+'\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' .
+'\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' .
+'\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' .
+'\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' .
+'\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' .
+'\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' .
+'\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' .
+'\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' .
+'\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' .
+'\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' .
+'\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' .
+'\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' .
+'\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' .
+'\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' .
+'\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' .
+'\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' .
+'\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' .
+'\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' .
+'\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' .
+'\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' .
+'\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' .
+'\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' .
+'\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' .
+'\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' .
+'\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' .
+'\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' .
+'\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' .
+'\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' .
+'\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' .
+'\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' .
+'\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' .
+'\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' .
+'\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' .
+'\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' .
+'\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' .
+'\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' .
+'\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' .
+'\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' .
+'\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' .
+'\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' .
+'\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' .
+'\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' .
+'\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' .
+'\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' .
+'\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' .
+'\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' .
+'\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' .
+'\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' .
+'\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' .
+'\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' .
+'\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' .
+'\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' .
+'\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' .
+'\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' .
+'\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' .
+'\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' .
+'\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' .
+'\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' .
+'\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' .
+'\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' .
+'\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' .
+'\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' .
+'\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' .
+'\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' .
+'\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' .
+'\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' .
+'\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' .
+'\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' .
+'\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' .
+'\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' .
+'\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' .
+'\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' .
+'\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' .
+'\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' .
+'\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' .
+'\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' .
+'\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' .
+'\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' .
+'\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' .
+'\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' .
+'\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' .
+'\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' .
+'\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' .
+'\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' .
+'\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' .
+'\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' .
+'\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' .
+'\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' .
+'\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' .
+'\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' .
+'\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' .
+'\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' .
+'\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' .
+'\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' .
+'\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' .
+'\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' .
+'\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' .
+'\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' .
+'\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' .
+'\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' .
+'\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' .
+'\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' .
+'\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' .
+'\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' .
+'\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' .
+'\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' .
+'\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' .
+'\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' .
+'\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' .
+'\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' .
+'\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' .
+'\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' .
+'\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' .
+'\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' .
+'\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' .
+'\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' .
+'\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' .
+'\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' .
+'\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' .
+'\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' .
+'\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' .
+'\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' .
+'\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' .
+'\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' .
+'\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' .
+'\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' .
+'\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' .
+'\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' .
+'\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' .
+'\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' .
+'\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' .
+'\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' .
+'\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' .
+'\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' .
+'\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' .
+'\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' .
+'\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' .
+'\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' .
+'\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' .
+'\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' .
+'\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' .
+'\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' .
+'\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' .
+'\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' .
+'\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' .
+'\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' .
+'\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' .
+'\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' .
+'\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' .
+'\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' .
+'\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' .
+'\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' .
+'\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' .
+'\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' .
+'\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' .
+'\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' .
+'\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' .
+'\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' .
+'\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' .
+'\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' .
+'\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' .
+'\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' .
+'\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' .
+'\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' .
+'\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' .
+'\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' .
+'\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' .
+'\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' .
+'\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' .
+'\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' .
+'\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' .
+'\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' .
+'\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' .
+'\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' .
+'\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' .
+'\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' .
+'\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' .
+'\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' .
+'\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' .
+'\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' .
+'\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' .
+'\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' .
+'\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' .
+'\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' .
+'\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' .
+'\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' .
+'\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' .
+'\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' .
+'\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' .
+'\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' .
+'\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' .
+'\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' .
+'\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' .
+'\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' .
+'\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' .
+'\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' .
+'\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' .
+'\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' .
+'\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' .
+'\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' .
+'\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' .
+'\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' .
+'\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' .
+'\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' .
+'\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' .
+'\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' .
+'\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' .
+'\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' .
+'\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' .
+'\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' .
+'\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' .
+'\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' .
+'\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' .
+'\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' .
+'\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' .
+'\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' .
+'\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' .
+'\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' .
+'\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' .
+'\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' .
+'\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' .
+'\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' .
+'\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' .
+'\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' .
+'\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' .
+'\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' .
+'\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' .
+'\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' .
+'\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' .
+'\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' .
+'\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' .
+'\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' .
+'\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' .
+'\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' .
+'\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' .
+'\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' .
+'\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' .
+'\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' .
+'\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' .
+'\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' .
+'\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' .
+'\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' .
+'\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' .
+'\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' .
+'\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' .
+'\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' .
+'\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' .
+'\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' .
+'\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' .
+'\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' .
+'\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' .
+'\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' .
+'\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' .
+'\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' .
+'\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' .
+'\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' .
+'\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' .
+'\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' .
+'\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' .
+'\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' .
+'\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' .
+'\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' .
+'\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' .
+'\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' .
+'\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' .
+'\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' .
+'\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' .
+'\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' .
+'\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' .
+'\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' .
+'\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' .
+'\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' .
+'\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' .
+'\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' .
+'\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' .
+'\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' .
+'\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' .
+'\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' .
+'\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' .
+'\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' .
+'\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' .
+'\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' .
+'\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' .
+'\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' .
+'\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' .
+'\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' .
+'\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' .
+'\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' .
+'\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' .
+'\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' .
+'\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' .
+'\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' .
+'\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' .
+'\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' .
+'\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' .
+'\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' .
+'\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' .
+'\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' .
+'\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' .
+'\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' .
+'\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' .
+'\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' .
+'\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' .
+'\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' .
+'\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' .
+'\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' .
+'\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' .
+'\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' .
+'\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' .
+'\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' .
+'\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' .
+'\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' .
+'\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' .
+'\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' .
+'\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' .
+'\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' .
+'\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' .
+'\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' .
+'\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' .
+'\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' .
+'\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' .
+'\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' .
+'\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' .
+'\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' .
+'\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' .
+'\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' .
+'\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' .
+'\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' .
+'\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' .
+'\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' .
+'\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' .
+'\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' .
+'\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' .
+'\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' .
+'\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' .
+'\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' .
+'\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' .
+'\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' .
+'\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' .
+'\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' .
+'\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' .
+'\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' .
+'\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' .
+'\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' .
+'\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' .
+'\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' .
+'\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' .
+'\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' .
+'\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' .
+'\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' .
+'\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' .
+'\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' .
+'\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' .
+'\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' .
+'\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' .
+'\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' .
+'\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' .
+'\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' .
+'\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' .
+'\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' .
+'\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' .
+'\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' .
+'\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' .
+'\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' .
+'\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' .
+'\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' .
+'\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' .
+'\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' .
+'\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' .
+'\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' .
+'\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' .
+'\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' .
+'\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' .
+'\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' .
+'\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' .
+'\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' .
+'\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' .
+'\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' .
+'\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' .
+'\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' .
+'\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' .
+'\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' .
+'\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' .
+'\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' .
+'\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' .
+'\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' .
+'\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' .
+'\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' .
+'\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' .
+'\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' .
+'\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' .
+'\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' .
+'\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' .
+'\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' .
+'\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' .
+'\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' .
+'\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' .
+'\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' .
+'\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' .
+'\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' .
+'\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' .
+'\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' .
+'\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' .
+'\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' .
+'\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' .
+'\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' .
+'\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' .
+'\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' .
+'\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' .
+'\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' .
+'\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' .
+'\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' .
+'\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' .
+'\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' .
+'\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' .
+'\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' .
+'\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' .
+'\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' .
+'\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' .
+'\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' .
+'\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' .
+'\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' .
+'\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' .
+'\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' .
+'\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' .
+'\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' .
+'\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' .
+'\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' .
+'\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' .
+'\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' .
+'\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' .
+'\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' .
+'\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' .
+'\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' .
+'\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' .
+'\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' .
+'\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' .
+'\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' .
+'\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' .
+'\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' .
+'\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' .
+'\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' .
+'\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' .
+'\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' .
+'\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' .
+'\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' .
+'\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' .
+'\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' .
+'\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' .
+'\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' .
+'\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' .
+'\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' .
+'\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' .
+'\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' .
+'\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' .
+'\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' .
+'\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' .
+'\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' .
+'\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' .
+'\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' .
+'\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' .
+'\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' .
+'\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' .
+'\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' .
+'\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' .
+'\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' .
+'\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' .
+'\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' .
+'\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' .
+'\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' .
+'\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' .
+'\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' .
+'\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' .
+'\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' .
+'\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' .
+'\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' .
+'\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' .
+'\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' .
+'\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' .
+'\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' .
+'\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' .
+'\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' .
+'\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' .
+'\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' .
+'\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' .
+'\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' .
+'\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' .
+'\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' .
+'\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' .
+'\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' .
+'\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' .
+'\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' .
+'\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' .
+'\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' .
+'\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' .
+'\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' .
+'\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' .
+'\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' .
+'\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' .
+'\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' .
+'\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' .
+'\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' .
+'\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' .
+'\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' .
+'\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' .
+'\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' .
+'\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' .
+'\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' .
+'\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' .
+'\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' .
+'\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' .
+'\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' .
+'\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' .
+'\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' .
+'\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' .
+'\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' .
+'\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' .
+'\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' .
+'\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' .
+'\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' .
+'\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' .
+'\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' .
+'\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' .
+'\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' .
+'\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' .
+'\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' .
+'\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' .
+'\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' .
+'\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' .
+'\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' .
+'\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' .
+'\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' .
+'\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' .
+'\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' .
+'\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' .
+'\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' .
+'\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' .
+'\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' .
+'\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' .
+'\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' .
+'\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' .
+'\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' .
+'\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' .
+'\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' .
+'\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' .
+'\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' .
+'\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' .
+'\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' .
+'\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' .
+'\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' .
+'\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' .
+'\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' .
+'\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' .
+'\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' .
+'\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' .
+'\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' .
+'\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' .
+'\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' .
+'\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' .
+'\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' .
+'\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' .
+'\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' .
+'\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' .
+'\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' .
+'\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' .
+'\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' .
+'\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' .
+'\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' .
+'\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' .
+'\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' .
+'\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' .
+'\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' .
+'\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' .
+'\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' .
+'\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' .
+'\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' .
+'\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' .
+'\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' .
+'\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' .
+'\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' .
+'\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' .
+'\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' .
+'\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' .
+'\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' .
+'\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' .
+'\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' .
+'\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' .
+'\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' .
+'\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' .
+'\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' .
+'\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' .
+'\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' .
+'\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' .
+'\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' .
+'\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' .
+'\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' .
+'\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' .
+'\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' .
+'\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' .
+'\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' .
+'\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' .
+'\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' .
+'\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' .
+'\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' .
+'\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' .
+'\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' .
+'\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' .
+'\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' .
+'\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' .
+'\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' .
+'\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' .
+'\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' .
+'\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' .
+'\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' .
+'\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' .
+'\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' .
+'\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' .
+'\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' .
+'\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' .
+'\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' .
+'\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' .
+'\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' .
+'\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' .
+'\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' .
+'\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' .
+'\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' .
+'\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' .
+'\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' .
+'\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' .
+'\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' .
+'\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' .
+'\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' .
+'\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' .
+'\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' .
+'\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' .
+'\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' .
+'\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' .
+'\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' .
+'\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' .
+'\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' .
+'\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' .
+'\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' .
+'\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' .
+'\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' .
+'\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' .
+'\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' .
+'\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' .
+'\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' .
+'\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' .
+'\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' .
+'\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' .
+'\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' .
+'\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' .
+'\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' .
+'\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' .
+'\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' .
+'\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' .
+'\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' .
+'\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' .
+'\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' .
+'\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' .
+'\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' .
+'\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' .
+'\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' .
+'\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' .
+'\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' .
+'\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' .
+'\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' .
+'\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' .
+'\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' .
+'\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' .
+'\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' .
+'\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' .
+'\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' .
+'\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' .
+'\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' .
+'\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' .
+'\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' .
+'\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' .
+'\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' .
+'\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' .
+'\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' .
+'\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' .
+'\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' .
+'\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' .
+'\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' .
+'\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' .
+'\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' .
+'\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' .
+'\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' .
+'\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' .
+'\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' .
+'\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' .
+'\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' .
+'\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' .
+'\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' .
+'\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' .
+'\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' .
+'\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' .
+'\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' .
+'\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' .
+'\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' .
+'\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' .
+'\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' .
+'\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' .
+'\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' .
+'\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' .
+'\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' .
+'\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' .
+'\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' .
+'\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' .
+'\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' .
+'\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' .
+'\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' .
+'\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' .
+'\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' .
+'\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' .
+'\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' .
+'\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' .
+'\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' .
+'\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' .
+'\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' .
+'\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' .
+'\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' .
+'\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' .
+'\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' .
+'\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' .
+'\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' .
+'\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' .
+'\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' .
+'\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' .
+'\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' .
+'\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' .
+'\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' .
+'\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' .
+'\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' .
+'\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' .
+'\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' .
+'\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' .
+'\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' .
+'\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' .
+'\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' .
+'\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' .
+'\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' .
+'\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' .
+'\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' .
+'\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' .
+'\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' .
+'\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' .
+'\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' .
+'\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' .
+'\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' .
+'\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' .
+'\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' .
+'\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' .
+'\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' .
+'\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' .
+'\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' .
+'\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' .
+'\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' .
+'\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' .
+'\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' .
+'\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' .
+'\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' .
+'\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' .
+'\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' .
+'\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' .
+'\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' .
+'\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' .
+'\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' .
+'\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' .
+'\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' .
+'\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' .
+'\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' .
+'\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' .
+'\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' .
+'\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' .
+'\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' .
+'\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' .
+'\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' .
+'\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' .
+'\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' .
+'\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' .
+'\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' .
+'\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' .
+'\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' .
+'\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' .
+'\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' .
+'\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' .
+'\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' .
+'\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' .
+'\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' .
+'\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' .
+'\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' .
+'\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' .
+'\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' .
+'\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' .
+'\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' .
+'\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' .
+'\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' .
+'\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' .
+'\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' .
+'\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' .
+'\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' .
+'\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' .
+'\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' .
+'\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' .
+'\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' .
+'\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' .
+'\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' .
+'\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' .
+'\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' .
+'\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' .
+'\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' .
+'\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' .
+'\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' .
+'\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' .
+'\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' .
+'\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' .
+'\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' .
+'\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' .
+'\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' .
+'\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' .
+'\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' .
+'\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' .
+'\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' .
+'\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' .
+'\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' .
+'\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' .
+'\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' .
+'\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' .
+'\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' .
+'\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' .
+'\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' .
+'\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' .
+'\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' .
+'\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' .
+'\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' .
+'\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' .
+'\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' .
+'\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' .
+'\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' .
+'\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' .
+'\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' .
+'\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' .
+'\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' .
+'\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' .
+'\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' .
+'\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' .
+'\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' .
+'\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' .
+'\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu');
diff --git a/Zend/Validate/Hostname/Com.php b/Zend/Validate/Hostname/Com.php
new file mode 100644
index 00000000..a2e403d0
--- /dev/null
+++ b/Zend/Validate/Hostname/Com.php
@@ -0,0 +1,198 @@
+ '/^[\x{002d}0-9\x{0400}-\x{052f}]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9\x{0370}-\x{03ff}]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-z\x{ac00}-\x{d7a3}]{1,17}$/iu',
+ 4 => '/^[\x{002d}0-9a-z·à -öø-ÿÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄÄÄġģĥħĩīÄįıĵķĸĺļľÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅšţťŧũūÅůűųŵŷźżž]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9A-Za-z\x{3400}-\x{3401}\x{3404}-\x{3406}\x{340C}\x{3416}\x{341C}' .
+'\x{3421}\x{3424}\x{3428}-\x{3429}\x{342B}-\x{342E}\x{3430}-\x{3434}\x{3436}' .
+'\x{3438}-\x{343C}\x{343E}\x{3441}-\x{3445}\x{3447}\x{3449}-\x{3451}\x{3453}' .
+'\x{3457}-\x{345F}\x{3463}-\x{3467}\x{346E}-\x{3471}\x{3473}-\x{3477}\x{3479}-\x{348E}\x{3491}-\x{3497}' .
+'\x{3499}-\x{34A1}\x{34A4}-\x{34AD}\x{34AF}-\x{34B0}\x{34B2}-\x{34BF}\x{34C2}-\x{34C5}\x{34C7}-\x{34CC}' .
+'\x{34CE}-\x{34D1}\x{34D3}-\x{34D8}\x{34DA}-\x{34E4}\x{34E7}-\x{34E9}\x{34EC}-\x{34EF}\x{34F1}-\x{34FE}' .
+'\x{3500}-\x{3507}\x{350A}-\x{3513}\x{3515}\x{3517}-\x{351A}\x{351C}-\x{351E}\x{3520}-\x{352A}' .
+'\x{352C}-\x{3552}\x{3554}-\x{355C}\x{355E}-\x{3567}\x{3569}-\x{3573}\x{3575}-\x{357C}\x{3580}-\x{3588}' .
+'\x{358F}-\x{3598}\x{359E}-\x{35AB}\x{35B4}-\x{35CD}\x{35D0}\x{35D3}-\x{35DC}\x{35E2}-\x{35ED}' .
+'\x{35F0}-\x{35F6}\x{35FB}-\x{3602}\x{3605}-\x{360E}\x{3610}-\x{3611}\x{3613}-\x{3616}\x{3619}-\x{362D}' .
+'\x{362F}-\x{3634}\x{3636}-\x{363B}\x{363F}-\x{3645}\x{3647}-\x{364B}\x{364D}-\x{3653}\x{3655}' .
+'\x{3659}-\x{365E}\x{3660}-\x{3665}\x{3667}-\x{367C}\x{367E}\x{3680}-\x{3685}\x{3687}' .
+'\x{3689}-\x{3690}\x{3692}-\x{3698}\x{369A}\x{369C}-\x{36AE}\x{36B0}-\x{36BF}\x{36C1}-\x{36C5}' .
+'\x{36C9}-\x{36CA}\x{36CD}-\x{36DE}\x{36E1}-\x{36E2}\x{36E5}-\x{36FE}\x{3701}-\x{3713}\x{3715}-\x{371E}' .
+'\x{3720}-\x{372C}\x{372E}-\x{3745}\x{3747}-\x{3748}\x{374A}\x{374C}-\x{3759}\x{375B}-\x{3760}' .
+'\x{3762}-\x{3767}\x{3769}-\x{3772}\x{3774}-\x{378C}\x{378F}-\x{379C}\x{379F}\x{37A1}-\x{37AD}' .
+'\x{37AF}-\x{37B7}\x{37B9}-\x{37C1}\x{37C3}-\x{37C5}\x{37C7}-\x{37D4}\x{37D6}-\x{37E0}\x{37E2}' .
+'\x{37E5}-\x{37ED}\x{37EF}-\x{37F6}\x{37F8}-\x{3802}\x{3804}-\x{381D}\x{3820}-\x{3822}\x{3825}-\x{382A}' .
+'\x{382D}-\x{382F}\x{3831}-\x{3832}\x{3834}-\x{384C}\x{384E}-\x{3860}\x{3862}-\x{3863}\x{3865}-\x{386B}' .
+'\x{386D}-\x{3886}\x{3888}-\x{38A1}\x{38A3}\x{38A5}-\x{38AA}\x{38AC}\x{38AE}-\x{38B0}' .
+'\x{38B2}-\x{38B6}\x{38B8}\x{38BA}-\x{38BE}\x{38C0}-\x{38C9}\x{38CB}-\x{38D4}\x{38D8}-\x{38E0}' .
+'\x{38E2}-\x{38E6}\x{38EB}-\x{38ED}\x{38EF}-\x{38F2}\x{38F5}-\x{38F7}\x{38FA}-\x{38FF}\x{3901}-\x{392A}' .
+'\x{392C}\x{392E}-\x{393B}\x{393E}-\x{3956}\x{395A}-\x{3969}\x{396B}-\x{397A}\x{397C}-\x{3987}' .
+'\x{3989}-\x{3998}\x{399A}-\x{39B0}\x{39B2}\x{39B4}-\x{39D0}\x{39D2}-\x{39DA}\x{39DE}-\x{39DF}' .
+'\x{39E1}-\x{39EF}\x{39F1}-\x{3A17}\x{3A19}-\x{3A2A}\x{3A2D}-\x{3A40}\x{3A43}-\x{3A4E}\x{3A50}' .
+'\x{3A52}-\x{3A5E}\x{3A60}-\x{3A6D}\x{3A6F}-\x{3A77}\x{3A79}-\x{3A82}\x{3A84}-\x{3A85}\x{3A87}-\x{3A89}' .
+'\x{3A8B}-\x{3A8F}\x{3A91}-\x{3A93}\x{3A95}-\x{3A96}\x{3A9A}\x{3A9C}-\x{3AA6}\x{3AA8}-\x{3AA9}' .
+'\x{3AAB}-\x{3AB1}\x{3AB4}-\x{3ABC}\x{3ABE}-\x{3AC5}\x{3ACA}-\x{3ACB}\x{3ACD}-\x{3AD5}\x{3AD7}-\x{3AE1}' .
+'\x{3AE4}-\x{3AE7}\x{3AE9}-\x{3AEC}\x{3AEE}-\x{3AFD}\x{3B01}-\x{3B10}\x{3B12}-\x{3B15}\x{3B17}-\x{3B1E}' .
+'\x{3B20}-\x{3B23}\x{3B25}-\x{3B27}\x{3B29}-\x{3B36}\x{3B38}-\x{3B39}\x{3B3B}-\x{3B3C}\x{3B3F}' .
+'\x{3B41}-\x{3B44}\x{3B47}-\x{3B4C}\x{3B4E}\x{3B51}-\x{3B55}\x{3B58}-\x{3B62}\x{3B68}-\x{3B72}' .
+'\x{3B78}-\x{3B88}\x{3B8B}-\x{3B9F}\x{3BA1}\x{3BA3}-\x{3BBA}\x{3BBC}\x{3BBF}-\x{3BD0}' .
+'\x{3BD3}-\x{3BE6}\x{3BEA}-\x{3BFB}\x{3BFE}-\x{3C12}\x{3C14}-\x{3C1B}\x{3C1D}-\x{3C37}\x{3C39}-\x{3C4F}' .
+'\x{3C52}\x{3C54}-\x{3C5C}\x{3C5E}-\x{3C68}\x{3C6A}-\x{3C76}\x{3C78}-\x{3C8F}\x{3C91}-\x{3CA8}' .
+'\x{3CAA}-\x{3CAD}\x{3CAF}-\x{3CBE}\x{3CC0}-\x{3CC8}\x{3CCA}-\x{3CD3}\x{3CD6}-\x{3CE0}\x{3CE4}-\x{3CEE}' .
+'\x{3CF3}-\x{3D0A}\x{3D0E}-\x{3D1E}\x{3D20}-\x{3D21}\x{3D25}-\x{3D38}\x{3D3B}-\x{3D46}\x{3D4A}-\x{3D59}' .
+'\x{3D5D}-\x{3D7B}\x{3D7D}-\x{3D81}\x{3D84}-\x{3D88}\x{3D8C}-\x{3D8F}\x{3D91}-\x{3D98}\x{3D9A}-\x{3D9C}' .
+'\x{3D9E}-\x{3DA1}\x{3DA3}-\x{3DB0}\x{3DB2}-\x{3DB5}\x{3DB9}-\x{3DBC}\x{3DBE}-\x{3DCB}\x{3DCD}-\x{3DDB}' .
+'\x{3DDF}-\x{3DE8}\x{3DEB}-\x{3DF0}\x{3DF3}-\x{3DF9}\x{3DFB}-\x{3DFC}\x{3DFE}-\x{3E05}\x{3E08}-\x{3E33}' .
+'\x{3E35}-\x{3E3E}\x{3E40}-\x{3E47}\x{3E49}-\x{3E67}\x{3E6B}-\x{3E6F}\x{3E71}-\x{3E85}\x{3E87}-\x{3E8C}' .
+'\x{3E8E}-\x{3E98}\x{3E9A}-\x{3EA1}\x{3EA3}-\x{3EAE}\x{3EB0}-\x{3EB5}\x{3EB7}-\x{3EBA}\x{3EBD}' .
+'\x{3EBF}-\x{3EC4}\x{3EC7}-\x{3ECE}\x{3ED1}-\x{3ED7}\x{3ED9}-\x{3EDA}\x{3EDD}-\x{3EE3}\x{3EE7}-\x{3EE8}' .
+'\x{3EEB}-\x{3EF2}\x{3EF5}-\x{3EFF}\x{3F01}-\x{3F02}\x{3F04}-\x{3F07}\x{3F09}-\x{3F44}\x{3F46}-\x{3F4E}' .
+'\x{3F50}-\x{3F53}\x{3F55}-\x{3F72}\x{3F74}-\x{3F75}\x{3F77}-\x{3F7B}\x{3F7D}-\x{3FB0}\x{3FB6}-\x{3FBF}' .
+'\x{3FC1}-\x{3FCF}\x{3FD1}-\x{3FD3}\x{3FD5}-\x{3FDF}\x{3FE1}-\x{400B}\x{400D}-\x{401C}\x{401E}-\x{4024}' .
+'\x{4027}-\x{403F}\x{4041}-\x{4060}\x{4062}-\x{4069}\x{406B}-\x{408A}\x{408C}-\x{40A7}\x{40A9}-\x{40B4}' .
+'\x{40B6}-\x{40C2}\x{40C7}-\x{40CF}\x{40D1}-\x{40DE}\x{40E0}-\x{40E7}\x{40E9}-\x{40EE}\x{40F0}-\x{40FB}' .
+'\x{40FD}-\x{4109}\x{410B}-\x{4115}\x{4118}-\x{411D}\x{411F}-\x{4122}\x{4124}-\x{4133}\x{4136}-\x{4138}' .
+'\x{413A}-\x{4148}\x{414A}-\x{4169}\x{416C}-\x{4185}\x{4188}-\x{418B}\x{418D}-\x{41AD}\x{41AF}-\x{41B3}' .
+'\x{41B5}-\x{41C3}\x{41C5}-\x{41C9}\x{41CB}-\x{41F2}\x{41F5}-\x{41FE}\x{4200}-\x{4227}\x{422A}-\x{4246}' .
+'\x{4248}-\x{4263}\x{4265}-\x{428B}\x{428D}-\x{42A1}\x{42A3}-\x{42C4}\x{42C8}-\x{42DC}\x{42DE}-\x{430A}' .
+'\x{430C}-\x{4335}\x{4337}\x{4342}-\x{435F}\x{4361}-\x{439A}\x{439C}-\x{439D}\x{439F}-\x{43A4}' .
+'\x{43A6}-\x{43EC}\x{43EF}-\x{4405}\x{4407}-\x{4429}\x{442B}-\x{4455}\x{4457}-\x{4468}\x{446A}-\x{446D}' .
+'\x{446F}-\x{4476}\x{4479}-\x{447D}\x{447F}-\x{4486}\x{4488}-\x{4490}\x{4492}-\x{4498}\x{449A}-\x{44AD}' .
+'\x{44B0}-\x{44BD}\x{44C1}-\x{44D3}\x{44D6}-\x{44E7}\x{44EA}\x{44EC}-\x{44FA}\x{44FC}-\x{4541}' .
+'\x{4543}-\x{454F}\x{4551}-\x{4562}\x{4564}-\x{4575}\x{4577}-\x{45AB}\x{45AD}-\x{45BD}\x{45BF}-\x{45D5}' .
+'\x{45D7}-\x{45EC}\x{45EE}-\x{45F2}\x{45F4}-\x{45FA}\x{45FC}-\x{461A}\x{461C}-\x{461D}\x{461F}-\x{4631}' .
+'\x{4633}-\x{4649}\x{464C}\x{464E}-\x{4652}\x{4654}-\x{466A}\x{466C}-\x{4675}\x{4677}-\x{467A}' .
+'\x{467C}-\x{4694}\x{4696}-\x{46A3}\x{46A5}-\x{46AB}\x{46AD}-\x{46D2}\x{46D4}-\x{4723}\x{4729}-\x{4732}' .
+'\x{4734}-\x{4758}\x{475A}\x{475C}-\x{478B}\x{478D}\x{4791}-\x{47B1}\x{47B3}-\x{47F1}' .
+'\x{47F3}-\x{480B}\x{480D}-\x{4815}\x{4817}-\x{4839}\x{483B}-\x{4870}\x{4872}-\x{487A}\x{487C}-\x{487F}' .
+'\x{4883}-\x{488E}\x{4890}-\x{4896}\x{4899}-\x{48A2}\x{48A4}-\x{48B9}\x{48BB}-\x{48C8}\x{48CA}-\x{48D1}' .
+'\x{48D3}-\x{48E5}\x{48E7}-\x{48F2}\x{48F4}-\x{48FF}\x{4901}-\x{4922}\x{4924}-\x{4928}\x{492A}-\x{4931}' .
+'\x{4933}-\x{495B}\x{495D}-\x{4978}\x{497A}\x{497D}\x{4982}-\x{4983}\x{4985}-\x{49A8}' .
+'\x{49AA}-\x{49AF}\x{49B1}-\x{49B7}\x{49B9}-\x{49BD}\x{49C1}-\x{49C7}\x{49C9}-\x{49CE}\x{49D0}-\x{49E8}' .
+'\x{49EA}\x{49EC}\x{49EE}-\x{4A19}\x{4A1B}-\x{4A43}\x{4A45}-\x{4A4D}\x{4A4F}-\x{4A9E}' .
+'\x{4AA0}-\x{4AA9}\x{4AAB}-\x{4B4E}\x{4B50}-\x{4B5B}\x{4B5D}-\x{4B69}\x{4B6B}-\x{4BC2}\x{4BC6}-\x{4BE8}' .
+'\x{4BEA}-\x{4BFA}\x{4BFC}-\x{4C06}\x{4C08}-\x{4C2D}\x{4C2F}-\x{4C32}\x{4C34}-\x{4C35}\x{4C37}-\x{4C69}' .
+'\x{4C6B}-\x{4C73}\x{4C75}-\x{4C86}\x{4C88}-\x{4C97}\x{4C99}-\x{4C9C}\x{4C9F}-\x{4CA3}\x{4CA5}-\x{4CB5}' .
+'\x{4CB7}-\x{4CF8}\x{4CFA}-\x{4D27}\x{4D29}-\x{4DAC}\x{4DAE}-\x{4DB1}\x{4DB3}-\x{4DB5}\x{4E00}-\x{4E54}' .
+'\x{4E56}-\x{4E89}\x{4E8B}-\x{4EEC}\x{4EEE}-\x{4FAC}\x{4FAE}-\x{503C}\x{503E}-\x{51E5}\x{51E7}-\x{5270}' .
+'\x{5272}-\x{56A1}\x{56A3}-\x{5840}\x{5842}-\x{58B5}\x{58B7}-\x{58CB}\x{58CD}-\x{5BC8}\x{5BCA}-\x{5C01}' .
+'\x{5C03}-\x{5C25}\x{5C27}-\x{5D5B}\x{5D5D}-\x{5F08}\x{5F0A}-\x{61F3}\x{61F5}-\x{63BA}\x{63BC}-\x{6441}' .
+'\x{6443}-\x{657C}\x{657E}-\x{663E}\x{6640}-\x{66FC}\x{66FE}-\x{6728}\x{672A}-\x{6766}\x{6768}-\x{67A8}' .
+'\x{67AA}-\x{685B}\x{685D}-\x{685E}\x{6860}-\x{68B9}\x{68BB}-\x{6AC8}\x{6ACA}-\x{6BB0}\x{6BB2}-\x{6C16}' .
+'\x{6C18}-\x{6D9B}\x{6D9D}-\x{6E12}\x{6E14}-\x{6E8B}\x{6E8D}-\x{704D}\x{704F}-\x{7113}\x{7115}-\x{713B}' .
+'\x{713D}-\x{7154}\x{7156}-\x{729F}\x{72A1}-\x{731E}\x{7320}-\x{7362}\x{7364}-\x{7533}\x{7535}-\x{7551}' .
+'\x{7553}-\x{7572}\x{7574}-\x{75E8}\x{75EA}-\x{7679}\x{767B}-\x{783E}\x{7840}-\x{7A62}\x{7A64}-\x{7AC2}' .
+'\x{7AC4}-\x{7B06}\x{7B08}-\x{7B79}\x{7B7B}-\x{7BCE}\x{7BD0}-\x{7D99}\x{7D9B}-\x{7E49}\x{7E4C}-\x{8132}' .
+'\x{8134}\x{8136}-\x{81D2}\x{81D4}-\x{8216}\x{8218}-\x{822D}\x{822F}-\x{83B4}\x{83B6}-\x{841F}' .
+'\x{8421}-\x{86CC}\x{86CE}-\x{874A}\x{874C}-\x{877E}\x{8780}-\x{8A32}\x{8A34}-\x{8B71}\x{8B73}-\x{8B8E}' .
+'\x{8B90}-\x{8DE4}\x{8DE6}-\x{8E9A}\x{8E9C}-\x{8EE1}\x{8EE4}-\x{8F0B}\x{8F0D}-\x{8FB9}\x{8FBB}-\x{9038}' .
+'\x{903A}-\x{9196}\x{9198}-\x{91A3}\x{91A5}-\x{91B7}\x{91B9}-\x{91C7}\x{91C9}-\x{91E0}\x{91E2}-\x{91FB}' .
+'\x{91FD}-\x{922B}\x{922D}-\x{9270}\x{9272}-\x{9420}\x{9422}-\x{9664}\x{9666}-\x{9679}\x{967B}-\x{9770}' .
+'\x{9772}-\x{982B}\x{982D}-\x{98ED}\x{98EF}-\x{99C4}\x{99C6}-\x{9A11}\x{9A14}-\x{9A27}\x{9A29}-\x{9D0D}' .
+'\x{9D0F}-\x{9D2B}\x{9D2D}-\x{9D8E}\x{9D90}-\x{9DC5}\x{9DC7}-\x{9E77}\x{9E79}-\x{9EB8}\x{9EBB}-\x{9F20}' .
+'\x{9F22}-\x{9F61}\x{9F63}-\x{9FA5}\x{FA28}]{1,20}$/iu',
+ 6 => '/^[\x{002d}0-9A-Za-z]{1,63}$/iu',
+ 7 => '/^[\x{00A1}-\x{00FF}]{1,63}$/iu',
+ 8 => '/^[\x{0100}-\x{017f}]{1,63}$/iu',
+ 9 => '/^[\x{0180}-\x{024f}]{1,63}$/iu',
+ 10 => '/^[\x{0250}-\x{02af}]{1,63}$/iu',
+ 11 => '/^[\x{02b0}-\x{02ff}]{1,63}$/iu',
+ 12 => '/^[\x{0300}-\x{036f}]{1,63}$/iu',
+ 13 => '/^[\x{0370}-\x{03ff}]{1,63}$/iu',
+ 14 => '/^[\x{0400}-\x{04ff}]{1,63}$/iu',
+ 15 => '/^[\x{0500}-\x{052f}]{1,63}$/iu',
+ 16 => '/^[\x{0530}-\x{058F}]{1,63}$/iu',
+ 17 => '/^[\x{0590}-\x{05FF}]{1,63}$/iu',
+ 18 => '/^[\x{0600}-\x{06FF}]{1,63}$/iu',
+ 19 => '/^[\x{0700}-\x{074F}]{1,63}$/iu',
+ 20 => '/^[\x{0780}-\x{07BF}]{1,63}$/iu',
+ 21 => '/^[\x{0900}-\x{097F}]{1,63}$/iu',
+ 22 => '/^[\x{0980}-\x{09FF}]{1,63}$/iu',
+ 23 => '/^[\x{0A00}-\x{0A7F}]{1,63}$/iu',
+ 24 => '/^[\x{0A80}-\x{0AFF}]{1,63}$/iu',
+ 25 => '/^[\x{0B00}-\x{0B7F}]{1,63}$/iu',
+ 26 => '/^[\x{0B80}-\x{0BFF}]{1,63}$/iu',
+ 27 => '/^[\x{0C00}-\x{0C7F}]{1,63}$/iu',
+ 28 => '/^[\x{0C80}-\x{0CFF}]{1,63}$/iu',
+ 29 => '/^[\x{0D00}-\x{0D7F}]{1,63}$/iu',
+ 30 => '/^[\x{0D80}-\x{0DFF}]{1,63}$/iu',
+ 31 => '/^[\x{0E00}-\x{0E7F}]{1,63}$/iu',
+ 32 => '/^[\x{0E80}-\x{0EFF}]{1,63}$/iu',
+ 33 => '/^[\x{0F00}-\x{0FFF}]{1,63}$/iu',
+ 34 => '/^[\x{1000}-\x{109F}]{1,63}$/iu',
+ 35 => '/^[\x{10A0}-\x{10FF}]{1,63}$/iu',
+ 36 => '/^[\x{1100}-\x{11FF}]{1,63}$/iu',
+ 37 => '/^[\x{1200}-\x{137F}]{1,63}$/iu',
+ 38 => '/^[\x{13A0}-\x{13FF}]{1,63}$/iu',
+ 39 => '/^[\x{1400}-\x{167F}]{1,63}$/iu',
+ 40 => '/^[\x{1680}-\x{169F}]{1,63}$/iu',
+ 41 => '/^[\x{16A0}-\x{16FF}]{1,63}$/iu',
+ 42 => '/^[\x{1700}-\x{171F}]{1,63}$/iu',
+ 43 => '/^[\x{1720}-\x{173F}]{1,63}$/iu',
+ 44 => '/^[\x{1740}-\x{175F}]{1,63}$/iu',
+ 45 => '/^[\x{1760}-\x{177F}]{1,63}$/iu',
+ 46 => '/^[\x{1780}-\x{17FF}]{1,63}$/iu',
+ 47 => '/^[\x{1800}-\x{18AF}]{1,63}$/iu',
+ 48 => '/^[\x{1E00}-\x{1EFF}]{1,63}$/iu',
+ 49 => '/^[\x{1F00}-\x{1FFF}]{1,63}$/iu',
+ 50 => '/^[\x{2070}-\x{209F}]{1,63}$/iu',
+ 51 => '/^[\x{2100}-\x{214F}]{1,63}$/iu',
+ 52 => '/^[\x{2150}-\x{218F}]{1,63}$/iu',
+ 53 => '/^[\x{2460}-\x{24FF}]{1,63}$/iu',
+ 54 => '/^[\x{2E80}-\x{2EFF}]{1,63}$/iu',
+ 55 => '/^[\x{2F00}-\x{2FDF}]{1,63}$/iu',
+ 56 => '/^[\x{2FF0}-\x{2FFF}]{1,63}$/iu',
+ 57 => '/^[\x{3040}-\x{309F}]{1,63}$/iu',
+ 58 => '/^[\x{30A0}-\x{30FF}]{1,63}$/iu',
+ 59 => '/^[\x{3100}-\x{312F}]{1,63}$/iu',
+ 60 => '/^[\x{3130}-\x{318F}]{1,63}$/iu',
+ 61 => '/^[\x{3190}-\x{319F}]{1,63}$/iu',
+ 62 => '/^[\x{31A0}-\x{31BF}]{1,63}$/iu',
+ 63 => '/^[\x{31F0}-\x{31FF}]{1,63}$/iu',
+ 64 => '/^[\x{3200}-\x{32FF}]{1,63}$/iu',
+ 65 => '/^[\x{3300}-\x{33FF}]{1,63}$/iu',
+ 66 => '/^[\x{3400}-\x{4DBF}]{1,63}$/iu',
+ 67 => '/^[\x{4E00}-\x{9FFF}]{1,63}$/iu',
+ 68 => '/^[\x{A000}-\x{A48F}]{1,63}$/iu',
+ 69 => '/^[\x{A490}-\x{A4CF}]{1,63}$/iu',
+ 70 => '/^[\x{AC00}-\x{D7AF}]{1,63}$/iu',
+ 71 => '/^[\x{D800}-\x{DB7F}]{1,63}$/iu',
+ 72 => '/^[\x{DC00}-\x{DFFF}]{1,63}$/iu',
+ 73 => '/^[\x{F900}-\x{FAFF}]{1,63}$/iu',
+ 74 => '/^[\x{FB00}-\x{FB4F}]{1,63}$/iu',
+ 75 => '/^[\x{FB50}-\x{FDFF}]{1,63}$/iu',
+ 76 => '/^[\x{FE20}-\x{FE2F}]{1,63}$/iu',
+ 77 => '/^[\x{FE70}-\x{FEFF}]{1,63}$/iu',
+ 78 => '/^[\x{FF00}-\x{FFEF}]{1,63}$/iu',
+ 79 => '/^[\x{20000}-\x{2A6DF}]{1,63}$/iu',
+ 80 => '/^[\x{2F800}-\x{2FA1F}]{1,63}$/iu'
+
+);
\ No newline at end of file
diff --git a/Zend/Validate/Hostname/Jp.php b/Zend/Validate/Hostname/Jp.php
new file mode 100644
index 00000000..9a97271b
--- /dev/null
+++ b/Zend/Validate/Hostname/Jp.php
@@ -0,0 +1,739 @@
+ '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}' .
+'\x{30A1}-\x{30F6}\x{30FC}' .
+'\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' .
+'\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' .
+'\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' .
+'\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' .
+'\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' .
+'\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' .
+'\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' .
+'\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' .
+'\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' .
+'\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' .
+'\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' .
+'\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' .
+'\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' .
+'\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' .
+'\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' .
+'\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' .
+'\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' .
+'\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' .
+'\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' .
+'\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' .
+'\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' .
+'\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' .
+'\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' .
+'\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' .
+'\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' .
+'\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' .
+'\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' .
+'\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' .
+'\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' .
+'\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' .
+'\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' .
+'\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' .
+'\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' .
+'\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' .
+'\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' .
+'\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' .
+'\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' .
+'\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' .
+'\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' .
+'\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' .
+'\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' .
+'\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' .
+'\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' .
+'\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' .
+'\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' .
+'\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' .
+'\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' .
+'\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' .
+'\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' .
+'\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' .
+'\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' .
+'\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' .
+'\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' .
+'\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' .
+'\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' .
+'\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' .
+'\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' .
+'\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' .
+'\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' .
+'\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' .
+'\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' .
+'\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' .
+'\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' .
+'\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' .
+'\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' .
+'\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' .
+'\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' .
+'\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' .
+'\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' .
+'\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' .
+'\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' .
+'\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' .
+'\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' .
+'\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' .
+'\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' .
+'\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' .
+'\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' .
+'\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' .
+'\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' .
+'\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' .
+'\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' .
+'\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' .
+'\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' .
+'\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' .
+'\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' .
+'\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' .
+'\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' .
+'\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' .
+'\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' .
+'\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' .
+'\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' .
+'\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' .
+'\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' .
+'\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' .
+'\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' .
+'\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' .
+'\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' .
+'\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' .
+'\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' .
+'\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' .
+'\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' .
+'\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' .
+'\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' .
+'\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' .
+'\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' .
+'\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' .
+'\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' .
+'\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' .
+'\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' .
+'\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' .
+'\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' .
+'\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' .
+'\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' .
+'\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' .
+'\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' .
+'\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' .
+'\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' .
+'\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' .
+'\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' .
+'\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' .
+'\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' .
+'\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' .
+'\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' .
+'\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' .
+'\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' .
+'\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' .
+'\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' .
+'\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' .
+'\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' .
+'\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' .
+'\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' .
+'\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' .
+'\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' .
+'\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' .
+'\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' .
+'\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' .
+'\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' .
+'\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' .
+'\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' .
+'\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' .
+'\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' .
+'\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' .
+'\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' .
+'\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' .
+'\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' .
+'\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' .
+'\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' .
+'\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' .
+'\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' .
+'\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' .
+'\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' .
+'\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' .
+'\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' .
+'\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' .
+'\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' .
+'\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' .
+'\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' .
+'\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' .
+'\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' .
+'\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' .
+'\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' .
+'\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' .
+'\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' .
+'\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' .
+'\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' .
+'\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' .
+'\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' .
+'\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' .
+'\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' .
+'\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' .
+'\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' .
+'\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' .
+'\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' .
+'\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' .
+'\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' .
+'\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' .
+'\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' .
+'\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' .
+'\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' .
+'\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' .
+'\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' .
+'\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' .
+'\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' .
+'\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' .
+'\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' .
+'\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' .
+'\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' .
+'\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' .
+'\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' .
+'\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' .
+'\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' .
+'\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' .
+'\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' .
+'\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' .
+'\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' .
+'\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' .
+'\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' .
+'\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' .
+'\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' .
+'\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' .
+'\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' .
+'\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' .
+'\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' .
+'\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' .
+'\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' .
+'\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' .
+'\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' .
+'\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' .
+'\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' .
+'\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' .
+'\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' .
+'\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' .
+'\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' .
+'\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' .
+'\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' .
+'\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' .
+'\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' .
+'\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' .
+'\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' .
+'\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' .
+'\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' .
+'\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' .
+'\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' .
+'\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' .
+'\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' .
+'\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' .
+'\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' .
+'\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' .
+'\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' .
+'\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' .
+'\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' .
+'\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' .
+'\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' .
+'\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' .
+'\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' .
+'\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' .
+'\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' .
+'\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' .
+'\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' .
+'\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' .
+'\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' .
+'\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' .
+'\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' .
+'\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' .
+'\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' .
+'\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' .
+'\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' .
+'\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' .
+'\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' .
+'\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' .
+'\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' .
+'\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' .
+'\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' .
+'\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' .
+'\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' .
+'\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' .
+'\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' .
+'\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' .
+'\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' .
+'\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' .
+'\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' .
+'\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' .
+'\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' .
+'\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' .
+'\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' .
+'\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' .
+'\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' .
+'\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' .
+'\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' .
+'\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' .
+'\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' .
+'\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' .
+'\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' .
+'\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' .
+'\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' .
+'\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' .
+'\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' .
+'\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' .
+'\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' .
+'\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' .
+'\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' .
+'\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' .
+'\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' .
+'\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' .
+'\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' .
+'\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' .
+'\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' .
+'\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' .
+'\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' .
+'\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' .
+'\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' .
+'\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' .
+'\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' .
+'\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' .
+'\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' .
+'\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' .
+'\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' .
+'\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' .
+'\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' .
+'\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' .
+'\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' .
+'\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' .
+'\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' .
+'\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' .
+'\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' .
+'\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' .
+'\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' .
+'\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' .
+'\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' .
+'\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' .
+'\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' .
+'\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' .
+'\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' .
+'\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' .
+'\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' .
+'\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' .
+'\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' .
+'\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' .
+'\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' .
+'\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' .
+'\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' .
+'\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' .
+'\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' .
+'\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' .
+'\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' .
+'\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' .
+'\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' .
+'\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' .
+'\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' .
+'\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' .
+'\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' .
+'\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' .
+'\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' .
+'\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' .
+'\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' .
+'\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' .
+'\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' .
+'\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' .
+'\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' .
+'\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' .
+'\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' .
+'\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' .
+'\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' .
+'\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' .
+'\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' .
+'\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' .
+'\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' .
+'\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' .
+'\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' .
+'\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' .
+'\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' .
+'\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' .
+'\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' .
+'\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' .
+'\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' .
+'\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' .
+'\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' .
+'\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' .
+'\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' .
+'\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' .
+'\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' .
+'\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' .
+'\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' .
+'\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' .
+'\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' .
+'\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' .
+'\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' .
+'\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' .
+'\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' .
+'\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' .
+'\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' .
+'\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' .
+'\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' .
+'\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' .
+'\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' .
+'\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' .
+'\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' .
+'\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' .
+'\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' .
+'\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' .
+'\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' .
+'\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' .
+'\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' .
+'\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' .
+'\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' .
+'\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' .
+'\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' .
+'\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' .
+'\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' .
+'\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' .
+'\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' .
+'\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' .
+'\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' .
+'\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' .
+'\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' .
+'\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' .
+'\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' .
+'\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' .
+'\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' .
+'\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' .
+'\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' .
+'\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' .
+'\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' .
+'\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' .
+'\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' .
+'\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' .
+'\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' .
+'\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' .
+'\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' .
+'\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' .
+'\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' .
+'\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' .
+'\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' .
+'\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' .
+'\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' .
+'\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' .
+'\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' .
+'\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' .
+'\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' .
+'\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' .
+'\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' .
+'\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' .
+'\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' .
+'\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' .
+'\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' .
+'\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' .
+'\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' .
+'\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' .
+'\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' .
+'\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' .
+'\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' .
+'\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' .
+'\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' .
+'\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' .
+'\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' .
+'\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' .
+'\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' .
+'\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' .
+'\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' .
+'\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' .
+'\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' .
+'\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' .
+'\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' .
+'\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' .
+'\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' .
+'\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' .
+'\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' .
+'\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' .
+'\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' .
+'\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' .
+'\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' .
+'\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' .
+'\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' .
+'\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' .
+'\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' .
+'\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' .
+'\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' .
+'\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' .
+'\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' .
+'\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' .
+'\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' .
+'\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' .
+'\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' .
+'\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' .
+'\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' .
+'\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' .
+'\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' .
+'\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' .
+'\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' .
+'\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' .
+'\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' .
+'\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' .
+'\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' .
+'\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' .
+'\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' .
+'\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' .
+'\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' .
+'\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' .
+'\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' .
+'\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' .
+'\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' .
+'\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' .
+'\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' .
+'\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' .
+'\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' .
+'\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' .
+'\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' .
+'\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' .
+'\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' .
+'\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' .
+'\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' .
+'\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' .
+'\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' .
+'\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' .
+'\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' .
+'\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' .
+'\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' .
+'\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' .
+'\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' .
+'\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' .
+'\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' .
+'\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' .
+'\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' .
+'\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' .
+'\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' .
+'\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' .
+'\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' .
+'\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' .
+'\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' .
+'\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' .
+'\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' .
+'\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' .
+'\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' .
+'\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' .
+'\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' .
+'\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' .
+'\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' .
+'\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' .
+'\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' .
+'\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' .
+'\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' .
+'\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' .
+'\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' .
+'\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' .
+'\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' .
+'\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' .
+'\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' .
+'\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' .
+'\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' .
+'\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' .
+'\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' .
+'\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' .
+'\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' .
+'\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' .
+'\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' .
+'\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' .
+'\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' .
+'\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' .
+'\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' .
+'\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' .
+'\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' .
+'\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' .
+'\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' .
+'\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' .
+'\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' .
+'\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' .
+'\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' .
+'\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' .
+'\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' .
+'\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' .
+'\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' .
+'\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' .
+'\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' .
+'\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' .
+'\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' .
+'\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' .
+'\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' .
+'\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' .
+'\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' .
+'\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' .
+'\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' .
+'\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' .
+'\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' .
+'\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' .
+'\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' .
+'\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' .
+'\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' .
+'\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' .
+'\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' .
+'\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' .
+'\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' .
+'\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' .
+'\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' .
+'\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' .
+'\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' .
+'\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' .
+'\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' .
+'\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' .
+'\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' .
+'\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' .
+'\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' .
+'\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' .
+'\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' .
+'\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' .
+'\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' .
+'\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' .
+'\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' .
+'\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' .
+'\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' .
+'\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' .
+'\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' .
+'\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' .
+'\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' .
+'\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' .
+'\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' .
+'\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' .
+'\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' .
+'\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' .
+'\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' .
+'\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' .
+'\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' .
+'\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' .
+'\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' .
+'\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' .
+'\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' .
+'\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' .
+'\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' .
+'\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' .
+'\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' .
+'\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' .
+'\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' .
+'\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' .
+'\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' .
+'\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' .
+'\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' .
+'\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' .
+'\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' .
+'\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' .
+'\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' .
+'\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' .
+'\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' .
+'\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' .
+'\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' .
+'\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' .
+'\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' .
+'\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' .
+'\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' .
+'\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' .
+'\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' .
+'\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' .
+'\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' .
+'\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' .
+'\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' .
+'\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' .
+'\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' .
+'\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' .
+'\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' .
+'\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' .
+'\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' .
+'\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' .
+'\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' .
+'\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' .
+'\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' .
+'\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' .
+'\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' .
+'\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' .
+'\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' .
+'\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' .
+'\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' .
+'\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' .
+'\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' .
+'\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' .
+'\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' .
+'\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' .
+'\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' .
+'\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' .
+'\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' .
+'\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' .
+'\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' .
+'\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' .
+'\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' .
+'\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' .
+'\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' .
+'\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' .
+'\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' .
+'\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' .
+'\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' .
+'\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' .
+'\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' .
+'\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' .
+'\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' .
+'\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' .
+'\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' .
+'\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' .
+'\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' .
+'\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' .
+'\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' .
+'\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' .
+'\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' .
+'\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' .
+'\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' .
+'\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' .
+'\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' .
+'\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' .
+'\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' .
+'\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu');
diff --git a/Zend/Validate/Interface.php b/Zend/Validate/Interface.php
new file mode 100644
index 00000000..986a7184
--- /dev/null
+++ b/Zend/Validate/Interface.php
@@ -0,0 +1,54 @@
+ "Invalid type given, value should be a string",
+ self::NOT_IP_ADDRESS => "'%value%' does not appear to be a valid IP address",
+ );
+
+ /**
+ * internal options
+ *
+ * @var array
+ */
+ protected $_options = array(
+ 'allowipv6' => true,
+ 'allowipv4' => true
+ );
+
+ /**
+ * Sets validator options
+ *
+ * @param array $options OPTIONAL Options to set, see the manual for all available options
+ * @return void
+ */
+ public function __construct($options = array())
+ {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ } else if (!is_array($options)) {
+ $options = func_get_args();
+ $temp['allowipv6'] = array_shift($options);
+ if (!empty($options)) {
+ $temp['allowipv4'] = array_shift($options);
+ }
+
+ $options = $temp;
+ }
+
+ $options += $this->_options;
+ $this->setOptions($options);
+ }
+
+ /**
+ * Returns all set options
+ *
+ * @return array
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Sets the options for this validator
+ *
+ * @param array $options
+ * @return Zend_Validate_Ip
+ */
+ public function setOptions($options)
+ {
+ if (array_key_exists('allowipv6', $options)) {
+ $this->_options['allowipv6'] = (boolean) $options['allowipv6'];
+ }
+
+ if (array_key_exists('allowipv4', $options)) {
+ $this->_options['allowipv4'] = (boolean) $options['allowipv4'];
+ }
+
+ if (!$this->_options['allowipv4'] && !$this->_options['allowipv6']) {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception('Nothing to validate. Check your options');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Defined by Zend_Validate_Interface
+ *
+ * Returns true if and only if $value is a valid IP address
+ *
+ * @param mixed $value
+ * @return boolean
+ */
+ public function isValid($value)
+ {
+ if (!is_string($value)) {
+ $this->_error(self::INVALID);
+ return false;
+ }
+
+ $this->_setValue($value);
+ if (($this->_options['allowipv4'] && !$this->_options['allowipv6'] && !$this->_validateIPv4($value)) ||
+ (!$this->_options['allowipv4'] && $this->_options['allowipv6'] && !$this->_validateIPv6($value)) ||
+ ($this->_options['allowipv4'] && $this->_options['allowipv6'] && !$this->_validateIPv4($value) && !$this->_validateIPv6($value))) {
+ $this->_error(self::NOT_IP_ADDRESS);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates an IPv4 address
+ *
+ * @param string $value
+ */
+ protected function _validateIPv4($value) {
+ $ip2long = ip2long($value);
+ if($ip2long === false) {
+ return false;
+ }
+
+ return $value == long2ip($ip2long);
+ }
+
+ /**
+ * Validates an IPv6 address
+ *
+ * @param string $value Value to check against
+ * @return boolean True when $value is a valid ipv6 address
+ * False otherwise
+ */
+ protected function _validateIPv6($value) {
+ if (strlen($value) < 3) {
+ return $value == '::';
+ }
+
+ if (strpos($value, '.')) {
+ $lastcolon = strrpos($value, ':');
+ if (!($lastcolon && $this->_validateIPv4(substr($value, $lastcolon + 1)))) {
+ return false;
+ }
+
+ $value = substr($value, 0, $lastcolon) . ':0:0';
+ }
+
+ if (strpos($value, '::') === false) {
+ return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value);
+ }
+
+ $colonCount = substr_count($value, ':');
+ if ($colonCount < 8) {
+ return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value);
+ }
+
+ // special case with ending or starting double colon
+ if ($colonCount == 8) {
+ return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value);
+ }
+
+ return false;
+ }
+}
diff --git a/Zend/Version.php b/Zend/Version.php
new file mode 100644
index 00000000..59ec6fbc
--- /dev/null
+++ b/Zend/Version.php
@@ -0,0 +1,53 @@
+
diff --git a/cache/csv/index.html b/cache/csv/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/csv/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/feeds/index.html b/cache/feeds/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/feeds/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/images/index.html b/cache/images/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/images/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/import/index.html b/cache/import/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/import/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/index.html b/cache/index.html
new file mode 100644
index 00000000..cc72e8ac
--- /dev/null
+++ b/cache/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
diff --git a/cache/layout/index.html b/cache/layout/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/layout/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/pdf/index.html b/cache/pdf/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/pdf/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/upload/index.html b/cache/upload/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/upload/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/cache/xml/index.html b/cache/xml/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/cache/xml/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/campaign_tracker.php b/campaign_tracker.php
new file mode 100644
index 00000000..7009359b
--- /dev/null
+++ b/campaign_tracker.php
@@ -0,0 +1,83 @@
+quote($track);
+
+if(preg_match('/^[0-9A-Za-z\-]*$/', $track))
+{
+ $query = "SELECT refer_url FROM campaigns WHERE tracker_key='$track'";
+ $res = $db->query($query);
+
+ $row = $db->fetchByAssoc($res);
+
+ $redirect_URL = $row['refer_url'];
+ sugar_cleanup();
+ header("Location: $redirect_URL");
+}
+else
+{
+ sugar_cleanup();
+}
+exit;
+?>
diff --git a/campaign_trackerv2.php b/campaign_trackerv2.php
new file mode 100644
index 00000000..0d9f8fdb
--- /dev/null
+++ b/campaign_trackerv2.php
@@ -0,0 +1,46 @@
+
diff --git a/config.php b/config.php
new file mode 100644
index 00000000..e69de29b
diff --git a/cron.php b/cron.php
new file mode 100644
index 00000000..4056a56e
--- /dev/null
+++ b/cron.php
@@ -0,0 +1,112 @@
+getSystemUser();
+
+///////////////////////////////////////////////////////////////////////////////
+//// PREP FOR SCHEDULER PID
+$GLOBALS['log']->debug('--------------------------------------------> at cron.php <--------------------------------------------');
+
+$cachePath = $GLOBALS['sugar_config']['cache_dir'].'modules/Schedulers';
+$pid = 'pid.php';
+if(!is_dir($cachePath)) {
+ mkdir_recursive($cachePath);
+}
+if(!is_file($cachePath.'/'.$pid)) {
+ if(is_writable($cachePath)) { // the "file" does not yet exist
+ write_array_to_file('timestamp', array(strtotime(date('H:i'))) , $cachePath.'/'.$pid);
+ require_once($cachePath.'/'.$pid);
+ } else {
+ $GLOBALS['log']->fatal('Scheduler cannot write PID file. Please check permissions on '.$cachePath);
+ }
+} else {
+ if(is_writable($cachePath.'/'.$pid)) {
+ require_once($cachePath.'/'.$pid);
+ } else {
+ $GLOBALS['log']->fatal('Scheduler cannot read the PID file. Please check permissions on '.$cachePath);
+ }
+}
+//// END PREP FOR SCHEDULER PID
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//// EXECUTE IF VALID TIME (NOT DDOS)
+
+if($timestamp[0] < strtotime(date('H:i'))) {
+ if(is_writable($cachePath.'/'.$pid)) {
+ write_array_to_file('timestamp', array(strtotime(date('H:i'))) , $cachePath.'/'.$pid);
+ require('modules/Schedulers/Scheduler.php');
+ $s = new Scheduler();
+ $s->flushDeadJobs();
+ $s->checkPendingJobs();
+ } else {
+ $GLOBALS['log']->fatal('Scheduler cannot write PID file. Please check permissions on '.$cachePath);
+ }
+} else {
+ $GLOBALS['log']->fatal('If you see a whole string of these, there is a chance someone is attacking your system.');
+}
+$exit_on_cleanup = true;
+
+sugar_cleanup($exit_on_cleanup);
+?>
\ No newline at end of file
diff --git a/custom/index.html b/custom/index.html
new file mode 100644
index 00000000..78913dd9
--- /dev/null
+++ b/custom/index.html
@@ -0,0 +1,5 @@
+
+
+keep me
+
+
diff --git a/data/Link.php b/data/Link.php
new file mode 100644
index 00000000..6221c2f4
--- /dev/null
+++ b/data/Link.php
@@ -0,0 +1,1094 @@
+debug("Link Constructor, relationship name: ".$_rel_name);
+ $GLOBALS['log']->debug("Link Constructor, Table name: ".$_table_name);
+ $GLOBALS['log']->debug("Link Constructor, Key name: ".$_key_name);
+ //_pp(func_get_args());
+ $this->_relationship_name=$_rel_name;
+ $this->relationship_fields = (!empty($fieldDef['rel_fields']))?$fieldDef['rel_fields']: array();
+ $this->_bean=&$_bean;
+ $this->_relationship=new Relationship();
+ //$this->_relationship->retrieve_by_string_fields(array('relationship_name'=>$this->_relationship_name));
+ $this->_relationship->retrieve_by_name($this->_relationship_name);
+
+ $this->_db = DBManagerFactory::getInstance();
+
+ //Following behavior is tied to a property(ignore_role) value in the vardef. It alters the values of 2 properties, ignore_role_filter and add_distinct.
+ //the property values can be altered again before any requests are made.
+ if (!empty($fieldDef) && is_array($fieldDef)) {
+ if (array_key_exists('ignore_role', $fieldDef)) {
+ if ($fieldDef['ignore_role'] == true) {
+ $this->ignore_role_filter=true;
+ $this->add_distinct=true;
+ }
+ }
+ }
+
+ $this->_bean_table_name=(!empty($_table_name)) ? $_table_name : $_bean->table_name;
+ if (!empty($key_name)) {
+ $this->_bean_key_name=$_key_name;
+ } else {
+
+ if ($this->_relationship->lhs_table != $this->_relationship->rhs_table) {
+
+ if ($_bean->table_name == $this->_relationship->lhs_table)
+ $this->_bean_key_name=$this->_relationship->lhs_key;
+
+ if ($_bean->table_name == $this->_relationship->rhs_table)
+ $this->_bean_key_name=$this->_relationship->rhs_key;
+
+ }
+ }
+
+ if ($this->_relationship->lhs_table == $this->_relationship->rhs_table && isset($fieldDef['side']) && $fieldDef['side'] == 'right'){
+ $this->_swap_sides = true;
+ }
+
+ if (!empty($fieldDef['rhs_key_override'])) {
+ $this->_rhs_key_override = true;
+ }
+ if (!empty($fieldDef['bean_filter_field'])) {
+ $this->_bean_filter_field = $fieldDef['bean_filter_field'];
+ }
+
+ //default to id if not set.
+ if (empty($this->_bean_key_name))$this->_bean_key_name='id';
+
+ $GLOBALS['log']->debug("Link Constructor, _bean_table_name: ".$this->_bean_table_name);
+ $GLOBALS['log']->debug("Link Constructor, _bean_key_name: ".$this->_bean_key_name);
+ if (!empty($this->_relationship->id)) $GLOBALS['log']->debug("Link Constructor, relationship record found.");
+ else $GLOBALS['log']->debug("Link Constructor, No relationship record.") ;
+
+ }
+
+ /* This method will return the following based on cardinality of the relationship.
+ * # one-to-many, many-to-many: empty array if not data is found else array of keys.
+ * # if many-to-many and $role set to true : empty array if not data is found else
+ * array of array which contain id+other fields.
+ * # many-to-one, one-to-one: null if no linked data is found, else key value.
+ *
+ * For a self referencing relationship the function will behave as if the user is trying
+ * to access the child records. To get to the parent records use the getParent() method.
+ */
+ function get($role = false) {
+ if($role){
+ $role_field = $this->_get_link_table_role_field($this->_relationship_name);
+ if($role_field !== false){
+ $query = $this->getQuery(false, array(),0, "", false, "", $role_field);
+ }else{
+ return array();
+ }
+ }else{
+ $query = $this->getQuery();
+ }
+ $result = $this->_db->query($query, true);
+ $list = Array();
+ while($row = $this->_db->fetchByAssoc($result))
+ {
+ if($role){
+ $list[] = $row;
+ }else{
+ $list[] = $row['id'];
+ }
+ }
+ return $list;
+ }
+
+ function getRelatedTableName() {
+
+ $bean_is_lhs=$this->_get_bean_position();
+ if (!isset($bean_is_lhs)) {
+ $GLOBALS['log']->debug("Invalid relationship parameters. Exiting..");
+ return null;
+ }
+
+ if ($bean_is_lhs) {
+ return $this->_relationship->rhs_table;
+ } else {
+ return $this->_relationship->lhs_table;
+ }
+ }
+
+ function getRelatedModuleName() {
+
+ $bean_is_lhs=$this->_get_bean_position();
+ if (!isset($bean_is_lhs)) {
+ $GLOBALS['log']->debug("Invalid relationship parameters. Exiting..");
+ return null;
+ }
+
+ if ($bean_is_lhs) {
+ return $this->_relationship->rhs_module;
+ } else {
+ return $this->_relationship->lhs_module;
+ }
+ }
+
+
+ function getRelatedFields(){
+ return $this->relationship_fields;
+ }
+
+ function getRelatedField($name){
+ return (!empty($this->relationship_fields[$name]))? $this->relationship_fields[$name]: null;
+ }
+
+ function getRelationshipObject() {
+ return $this->_relationship;
+ }
+
+ function _get_bean_position() {
+ //current beans module and table are on the left side or the right side.
+ $position = false;
+ if ($this->_relationship->lhs_table == $this->_bean_table_name && $this->_relationship->lhs_key == $this->_bean_key_name) {
+ $position = true;
+
+ }
+ if ($this->_relationship->rhs_table == $this->_bean_table_name && $this->_relationship->rhs_key == $this->_bean_key_name) {
+ $position = false;
+ }
+
+ if($this->_swap_sides){
+ return !$position;
+ }
+ return $position;
+ }
+
+ function _is_self_relationship() {
+ if ($this->_relationship->lhs_table == $this->_relationship->rhs_table) {
+ return true;
+ }
+ return false;
+ }
+
+ function getJoin($params, $return_array =false)
+ {
+ $join_type= ' INNER JOIN ';
+ if(isset($params['join_type'])){
+ $join_type = $params['join_type'];
+ }
+ $id = -1;
+ $join = '';
+ $bean_is_lhs=$this->_get_bean_position();
+
+ if ($this->_relationship->relationship_type=='one-to-one' or $this->_relationship->relationship_type=='many-to-one' or
+ ($this->_relationship->relationship_type=='one-to-many' && !$bean_is_lhs))
+ {
+ if ($bean_is_lhs) {
+ $table = $this->_relationship->rhs_table;
+ $key = $this->_relationship->rhs_key;
+ // check right table alias
+ $other_table = (empty($params['left_join_table_alias']) ? $this->_relationship->lhs_table : $params['left_join_table_alias']);
+ $other_key = $this->_relationship->lhs_key;
+ } else {
+ $key = $this->_relationship->lhs_key;
+ $table = $this->_relationship->lhs_table;
+
+ if ( ! empty($params['join_table_alias']))
+ {
+ $table_with_alias = $table. " ".$params['join_table_alias'];
+ $table = $params['join_table_alias'];
+ }
+ $other_table = (empty($params['right_join_table_alias']) ? $this->_relationship->rhs_table : $params['right_join_table_alias']);
+ $other_key = $this->_relationship->rhs_key;
+ }
+
+ $join = $join_type . ' '. $table_with_alias . " ON\n".$table.'.'.$key.'= '.$other_table.'.'.$other_key ." AND ". $table.".deleted=0\n";
+
+ }
+ if ($this->_relationship->relationship_type == 'one-to-many' && $bean_is_lhs) {
+
+ $table = $this->_relationship->rhs_table;
+ $key = $this->_relationship->rhs_key;
+ $other_table = (empty($params['left_join_table_alias']) ? $this->_relationship->lhs_table : $params['left_join_table_alias']);
+ $other_key = $this->_relationship->lhs_key;
+ if ( ! empty($params['join_table_alias']))
+ {
+ $table_with_alias = $table. " ".$params['join_table_alias'];
+ $table = $params['join_table_alias'];
+ }
+
+ $join = $join_type . ' '.$table_with_alias . " ON\n".$table.'.'.$key.'= '.$other_table.'.'.$other_key ." AND ". $table.".deleted=0\n";
+
+ }
+
+ if ($this->_relationship->relationship_type=='many-to-many' )
+ {
+ if ( ! empty($params['join_table_alias']))
+ {
+ $table_with_alias = $this->_relationship->join_table. " ".$params['join_table_alias'];
+ $table = $params['join_table_alias'];
+ $rel_table_with_alias =
+ $this->_relationship->join_table. " ".
+ $params['join_table_link_alias'];
+ $rel_table = $params['join_table_link_alias'];
+ }
+
+ if ( $bean_is_lhs )
+ {
+ $other_table = (empty($params['left_join_table_alias']) ? $this->_relationship->lhs_table : $params['left_join_table_alias']);
+ $join .= $join_type . ' '.$rel_table_with_alias.' ON '.$other_table.".".$this->_relationship->lhs_key."=".$rel_table.".".$this->_relationship->join_key_lhs." AND ".$rel_table.".deleted=0\n";
+ } else
+ {
+ $other_table = (empty($params['right_join_table_alias']) ? $this->_relationship->rhs_table : $params['right_join_table_alias']);
+ $join .= $join_type . ' '.$rel_table_with_alias.' ON '.$other_table.".".$this->_relationship->rhs_key."=".$rel_table.".".$this->_relationship->join_key_rhs." AND ".$rel_table.".deleted=0\n";
+ }
+ if (!empty($this->_relationship->relationship_role_column) && !$this->ignore_role_filter)
+ {
+ $join.=" AND ".$rel_table.'.'.$this->_relationship->relationship_role_column;
+ //role column value.
+ if (empty($this->_relationship->relationship_role_column_value))
+ {
+ $join.=' IS NULL';
+ } else {
+ $join.= "='".$this->_relationship->relationship_role_column_value."'";
+ }
+ $join.= "\n";
+ }
+ if ( ! empty($params['join_table_alias']))
+ {
+ if ( $bean_is_lhs )
+ {
+ $table_with_alias = $this->_relationship->rhs_table. " ".$params['join_table_alias'];
+ } else {
+ $table_with_alias = $this->_relationship->lhs_table. " ".$params['join_table_alias'];
+ }
+ $table = $params['join_table_alias'];
+ }
+
+ if ( $bean_is_lhs )
+ {
+ if($this->_rhs_key_override){
+ $join .= $join_type . ' '.$table_with_alias.' ON '.$table.".".$this->_relationship->rhs_key."=".$rel_table.".".$this->_relationship->join_key_rhs." AND ".$table.".deleted=0";
+ }else{
+ $join .= $join_type . ' '.$table_with_alias.' ON '.$table.".".$this->_relationship->lhs_key."=".$rel_table.".".$this->_relationship->join_key_rhs." AND ".$table.".deleted=0";
+ }
+ } else {
+ $join .= $join_type . ' '.$table_with_alias.' ON '.$table.".".$this->_relationship->rhs_key."=".$rel_table.".".$this->_relationship->join_key_lhs." AND ".$table.".deleted=0";
+ }
+ $join.= "\n";
+ }
+
+ if($return_array){
+ $ret_arr = array();
+ $ret_arr['join'] = $join;
+ $ret_arr['type'] = $this->_relationship->relationship_type;
+ if ( $bean_is_lhs ){
+
+ $ret_arr['rel_key'] = $this->_relationship->join_key_rhs;
+ }else{
+
+ $ret_arr['rel_key'] = $this->_relationship->join_key_lhs;
+ }
+ return $ret_arr;
+ }
+ return $join;
+ }
+
+
+ function _add_deleted_clause($deleted=0,$add_and='',$prefix='') {
+
+ if (!empty($prefix)) $prefix.='.';
+ if (!empty($add_and)) $add_and=' '.$add_and.' ';
+
+ if ($deleted==0) return $add_and.$prefix.'deleted=0';
+ if ($deleted==1) return $add_and.$prefix.'deleted=1';
+ else return '';
+ }
+
+ function _add_optional_where_clause($optional_array, $add_and='',$prefix='') {
+
+ if (!empty($prefix)) $prefix.='.';
+ if (!empty($add_and)) $add_and=' '.$add_and.' ';
+
+ if(!empty($optional_array)){
+ return $add_and.$prefix."".$optional_array['lhs_field']."".$optional_array['operator']."'".$optional_array['rhs_value']."'";
+ }
+ return '';
+ //end function _add_optional_where_clause
+ }
+
+
+
+ function getQuery($return_as_array=false, $sort_array = array(),$deleted=0, $optional_where="", $return_join = false, $bean_filter="", $role="", $for_subpanels = false){
+
+ $select='';
+ $from='';
+ $join = '';
+ $where='';
+ $join_tables = array();
+ $bean_is_lhs=$this->_get_bean_position();
+
+ if (!isset($bean_is_lhs)) {
+ $GLOBALS['log']->debug("Invalid relationship parameters. Exiting..");
+ return null;
+ }
+
+ if (empty($bean_filter)) {
+ if(!empty($this->_bean_filter_field)){
+ $bean_filter_field = $this->_bean_filter_field;
+ $bean_filter="= '".$this->_bean->$bean_filter_field."'";
+ }else{
+ $bean_filter="= '".$this->_bean->id."'";
+ }
+ }
+
+ $GLOBALS['log']->debug("getQuery, Bean is LHS: ".$bean_is_lhs);
+ $GLOBALS['log']->debug("getQuery, Relationship type=".$this->_relationship->relationship_type);
+ $GLOBALS['log']->debug("getQuery, Relationship role column name=".$this->_relationship->relationship_role_column);
+
+ if ($this->_relationship->relationship_type=='one-to-one' or $this->_relationship->relationship_type=='many-to-one' or
+ ($this->_relationship->relationship_type=='one-to-many' && !$bean_is_lhs)) {
+
+ $GLOBALS['log']->debug("Processing one-to-one,many-to-one,one-to-many.");
+
+ if ($this->add_distinct) {
+ $select='SELECT DISTINCT id';
+ } else {
+ $select='SELECT id';
+ }
+
+ if ($bean_is_lhs) {
+ $from= 'FROM '.$this->_relationship->rhs_table;
+ $where='WHERE '.$this->_relationship->rhs_table.'.'.$this->_relationship->rhs_key.$bean_filter;
+ if (!empty($this->_relationship->relationship_role_column) && !$this->ignore_role_filter) {
+ $where.=" AND ".$this->_relationship->rhs_table.'.'.$this->_relationship->relationship_role_column;
+
+ //role column value.
+ if (empty($this->_relationship->relationship_role_column_value)) {
+ $where.=' IS NULL';
+ } else {
+ $where.= "='".$this->_relationship->relationship_role_column_value."'";
+ }
+ }
+
+ //add deleted clause - but not if we're dealing with a Custom table which will lack the 'deleted' field
+ if(substr_count($this->_relationship->rhs_table, '_cstm') == 0)
+ $where.=$this->_add_deleted_clause($deleted,'AND',$this->_relationship->rhs_table );
+
+ if($optional_where!=""){
+ //process optional where
+ $where.=$this->_add_optional_where_clause($optional_where,'AND');
+ }
+
+
+ }
+ else {
+ $from= 'FROM '.$this->_relationship->lhs_table;
+ $where='WHERE '.$this->_relationship->lhs_table.'.'.$this->_relationship->lhs_key."= '".$this->_bean->{$this->_relationship->rhs_key}."'";
+ //added deleted clause.
+ $where.=$this->_add_deleted_clause($deleted,'AND', $this->_relationship->lhs_table);
+
+
+ if($optional_where!=""){
+ //process optional where
+ $where.=$this->_add_optional_where_clause($optional_where,'AND');
+ }
+
+ }
+ }
+ if ($this->_relationship->relationship_type == 'one-to-many' && $bean_is_lhs) {
+
+ $GLOBALS['log']->debug("Processing one-to-many.");
+
+ if ($this->add_distinct) {
+ $select='SELECT DISTINCT '.$this->_relationship->rhs_table.'.id';
+ } else {
+ $select='SELECT '.$this->_relationship->rhs_table.'.id';
+ }
+ $from= 'FROM '.$this->_relationship->rhs_table;
+ $where='WHERE '.$this->_relationship->rhs_table.'.'.$this->_relationship->rhs_key.$bean_filter;
+ if (!empty($this->_relationship->relationship_role_column) && !$this->ignore_role_filter) {
+ $where.=" AND ".$this->_relationship->rhs_table.'.'.$this->_relationship->relationship_role_column;
+ //role column value.
+ if (empty($this->_relationship->relationship_role_column_value)) {
+ $where.=' IS NULL';
+ } else {
+ $where.= "='".$this->_relationship->relationship_role_column_value."'";
+ }
+ }
+
+ //add deleted clause - but not if we're dealing with a Custom table which will lack the 'deleted' field
+ if(substr_count($this->_relationship->rhs_table, '_cstm') == 0)
+ $where.=$this->_add_deleted_clause($deleted,'AND',$this->_relationship->rhs_table);
+
+ if($optional_where!=""){
+ //process optional where
+ $where.=$this->_add_optional_where_clause($optional_where,'AND');
+ }
+
+ }
+
+ if ($this->_relationship->relationship_type=='many-to-many' ) {
+ $GLOBALS['log']->debug("Processing many-to-many.");
+
+ $swap = !$for_subpanels && $this->_swap_sides;
+ if (($bean_is_lhs && !$swap) || (!$bean_is_lhs && $swap)) {
+ if ($this->add_distinct) {
+ $select="SELECT DISTINCT ".$this->_relationship->rhs_table.".id";
+ } else {
+ $select="SELECT ".$this->_relationship->rhs_table.".id";
+ }
+
+ $from= 'FROM '.$this->_relationship->rhs_table;
+ $subjoin=' INNER JOIN '.$this->_relationship->join_table.' ON ('.$this->_relationship->rhs_table.".".$this->_relationship->rhs_key."=".$this->_relationship->join_table.".".$this->_relationship->join_key_rhs." AND ".$this->_relationship->join_table.".".$this->_relationship->join_key_lhs.$bean_filter;
+ $join_tables[] = $this->_relationship->join_table;
+ if (!empty($this->_relationship->relationship_role_column) && !$this->ignore_role_filter) {
+ $subjoin.=" AND ".$this->_relationship->join_table.'.'.$this->_relationship->relationship_role_column;
+
+ //role column value.
+ if (empty($this->_relationship->relationship_role_column_value)) {
+ $subjoin.=' IS NULL';
+ } else {
+ $subjoin.= "='".$this->_relationship->relationship_role_column_value."'";
+ }
+ }
+ $subjoin.=')';
+ $join .= $subjoin;
+ $from .= $subjoin;
+
+
+ //add deleted clause.
+ if ($deleted == 0 or $deleted==1) {
+ $where.=' WHERE '.$this->_add_deleted_clause($deleted,'',$this->_relationship->join_table).$this->_add_deleted_clause($deleted,'AND',$this->_relationship->rhs_table);
+ }
+
+
+ if($optional_where!=""){
+ //process optional where
+ $where.=$this->_add_optional_where_clause($optional_where,'AND', $this->_relationship->rhs_table);
+ }
+
+
+ }
+ else {
+ if ($this->add_distinct) {
+ $select="SELECT DISTINCT ".$this->_relationship->lhs_table.".id";
+ } else {
+ $select="SELECT ".$this->_relationship->lhs_table.".id";
+ }
+
+ $from= 'FROM '.$this->_relationship->lhs_table;
+ $subjoin=' INNER JOIN '.$this->_relationship->join_table.' ON ('.$this->_relationship->lhs_table.".".$this->_relationship->lhs_key."=".$this->_relationship->join_table.".".$this->_relationship->join_key_lhs." AND ".$this->_relationship->join_table.".".$this->_relationship->join_key_rhs.$bean_filter;
+ $join_tables[] = $this->_relationship->join_table;
+ if (!empty($this->_relationship->relationship_role_column) && !$this->ignore_role_filter) {
+ $subjoin.=" AND ".$this->_relationship->relationship_role_column;
+
+ //role column value.
+ if (empty($this->_relationship->relationship_role_column_value)) {
+ $subjoin.=' IS NULL';
+ } else {
+ $subjoin.= "='".$this->_relationship->relationship_role_column_value."'";
+ }
+ }
+ $subjoin.=')';
+ $join .= $subjoin;
+ $from .= $subjoin;
+ //add deleted clause.
+ if ($deleted == 0 or $deleted==1) {
+ $where.=' WHERE '.$this->_add_deleted_clause($deleted,'',$this->_relationship->join_table).$this->_add_deleted_clause($deleted,'AND',$this->_relationship->lhs_table);
+ }
+
+
+ if($optional_where!=""){
+ //process optional where
+ $where.=$this->_add_optional_where_clause($optional_where,'AND', $this->_relationship->lhs_table);
+ }
+
+ }
+ if (!empty($role)){
+ $select.=", ".$this->_relationship->join_table.".".$role;
+ }
+ }
+ if ($return_as_array) {
+ $query_as_array['select']=$select;
+ $query_as_array['from']=$from;
+ $query_as_array['where']=$where;
+ if($return_join){
+ $query_as_array['join'] = $join;
+ $query_as_array['join_tables'] = $join_tables;
+ }
+ return $query_as_array;
+ }
+ else {
+ $query = $select.' '.$from.' '.$where;
+ $GLOBALS['log']->debug("Link Query=".$query);
+ return $query;
+ }
+ }
+
+ function getBeans($template, $sort_array = array(), $begin_index = 0, $end_index = -1, $deleted=0, $optional_where="") {
+ $query = $this->getQuery(false,array(), $deleted, $optional_where); //get array of IDs
+ return $this->_bean->build_related_list($query, $template);
+ }
+
+ function _add_one_to_many_table_based($key,$bean_is_lhs) {
+
+ if ($bean_is_lhs) {
+ $set_key_value=$this->_bean->id;
+ $where_key_value=$key;
+ }
+ else {
+ $set_key_value=$key;
+ $where_key_value=$this->_bean->id;
+ }
+
+ $query= 'UPDATE '.$this->_relationship->rhs_table;
+ $query.=' SET '.$this->_relationship->rhs_table.'.'.$this->_relationship->rhs_key."='".$set_key_value."'";
+
+ //add role column to the query.
+ if (!empty($this->_relationship->relationship_role_column)) {
+ $query.=' ,'.$this->_relationship->relationship_role_column."='".$this->_relationship->relationship_role_column_value."'";
+ }
+ $query.=' WHERE '.$this->_relationship->rhs_table.".id='".$where_key_value."'";
+
+ $GLOBALS['log']->debug("Relationship Query ".$query);
+
+ $result=$this->_db->query($query, true);
+ }
+
+ /* handles many to one*/
+ function _add_many_to_one_bean_based($key) {
+
+ //make a copy of this bean to avoid recursion.
+ $bean=new $this->_bean->object_name;
+ $bean->retrieve($this->_bean->id);
+
+ $bean->{$this->_relationship->lhs_key}=$key;
+
+ //set relationship role.
+ if (!empty($this->_relationship->relationship_role_column)) {
+ $bean->{$this->_relationship->relationship_role_column}=$this->_relationship->relationship_role_column_value;
+ }
+ $bean->save();
+ }
+
+
+ /* use this function to create link between 2 objects
+ * 1:1 will be treated like 1 to many.
+ * todo handle self referencing relationships
+ * the function also allows for setting of values for additional field in the table being
+ * updated to save the relationship, in case of many-to-many relationships this would be the join table.
+ * the values should be passed as key value pairs with column name as the key name and column value as key value.
+ */
+ function add($rel_keys,$additional_values=array()) {
+
+ if (!isset($rel_keys) or empty($rel_keys)) {
+ $GLOBALS['log']->debug("Link.add, Null key passed, no-op, returning... ");
+ return;
+ }
+
+ //check to ensure that we do in fact have an id on the bean.
+ if(empty($this->_bean->id)){
+ $GLOBALS['log']->debug("Link.add, No id on the bean... ");
+ return;
+ }
+
+ if (!is_array($rel_keys)) {
+ $keys[]=$rel_keys;
+ } else {
+ $keys=$rel_keys;
+ }
+
+ $bean_is_lhs=$this->_get_bean_position();
+ if (!isset($bean_is_lhs)) {
+ $GLOBALS['log']->debug("Invalid relationship parameters. Exiting..");
+ return null;
+ }
+ //if multiple keys are passed then check for unsupported relationship types.
+ if (count($keys) > 1) {
+ if (($this->_relationship->relationship_type == 'one-to-one')
+ or ($this->_relationship->relationship_type == 'one-to-many' and !$bean_is_lhs)
+ or ($this->_relationship->relationship_type == 'many-to-one')) {
+ $GLOBALS['log']->error("Invalid parameters passed to function, the relationship does not support addition of multiple records.");
+ return;
+ }
+ }
+ $GLOBALS['log']->debug("Relationship type = {$this->_relationship->relationship_type}");
+ foreach($keys as $key) {
+
+ //fetch the related record using the key and update.
+ if ($this->_relationship->relationship_type=='one-to-one' or $this->_relationship->relationship_type == 'one-to-many') {
+ $this->_add_one_to_many_table_based($key,$bean_is_lhs);
+ }
+
+ //updates the bean passed to the instance....
+ //todo remove this case.
+ if ($this->_relationship->relationship_type=='many-to-one') {
+ $this->_add_many_to_one_bean_based($key);
+ }
+
+ //insert record in the link table.
+ if ($this->_relationship->relationship_type=='many-to-many' ) {
+
+ //Swap the bean positions for self relationships not coming from subpanels.
+ //such as one-to-many relationship fields generated in studio/MB
+ $swap = !isset($_REQUEST['subpanel_id']) && $this->_swap_sides;
+ //add keys from the 2 tables to the additional keys array..
+ if (($bean_is_lhs && !$swap) || (!$bean_is_lhs && $swap)) {
+ $additional_values[$this->_relationship->join_key_lhs]=$this->_bean->id;
+ $additional_values[$this->_relationship->join_key_rhs]=$key;
+ } else {
+ $additional_values[$this->_relationship->join_key_rhs]=$this->_bean->id;
+ $additional_values[$this->_relationship->join_key_lhs]=$key;
+ }
+ //add the role condition.
+ if (!empty($this->_relationship->relationship_role_column) && !empty($this->_relationship->relationship_role_column_value)) {
+ $additional_values[$this->_relationship->relationship_role_column]=$this->_relationship->relationship_role_column_value;
+ }
+ //add deleted condition.
+ $additional_values['deleted']=0;
+
+ $this->_add_many_to_many($additional_values);
+
+ //reverse will be set to true only for self-referencing many-to-many relationships.
+ if ($this->_is_self_relationship() && !empty($GLOBALS['dictionary'][$this->_relationship_name]) &&
+ !empty($GLOBALS['dictionary'][$this->_relationship_name]['true_relationship_type']) &&
+ $GLOBALS['dictionary'][$this->_relationship_name]['true_relationship_type'] == 'many-to-many' ||
+ (!empty($this->_relationship->reverse) && $this->_relationship->reverse == true )){
+ //swap key values;
+ $temp=$additional_values[$this->_relationship->join_key_lhs];
+ $additional_values[$this->_relationship->join_key_lhs]=$additional_values[$this->_relationship->join_key_rhs];
+ $additional_values[$this->_relationship->join_key_rhs]=$temp;
+
+ $this->_add_many_to_many($additional_values);
+ }
+ }
+ $custom_logic_arguments = array();
+ $custom_reverse_arguments = array();
+ $custom_logic_arguments['related_id'] = $key;
+ $custom_logic_arguments['id'] = $this->_bean->id;
+ $custom_reverse_arguments['related_id'] = $this->_bean->id;
+ $custom_reverse_arguments['id'] = $key;
+ if($bean_is_lhs) {
+ $custom_logic_arguments['module'] = $this->_relationship->lhs_module;
+ $custom_logic_arguments['related_module'] = $this->_relationship->rhs_module;
+ $custom_reverse_arguments['module'] = $this->_relationship->rhs_module;
+ $custom_reverse_arguments['related_module'] = $this->_relationship->lhs_module;
+ } else {
+ $custom_logic_arguments['related_module'] = $this->_relationship->lhs_module;
+ $custom_reverse_arguments['related_module'] = $this->_relationship->rhs_module;
+ $custom_logic_arguments['module'] = $this->_relationship->rhs_module;
+ $custom_reverse_arguments['module'] = $this->_relationship->lhs_module;
+ }
+ /**** CALL IT FROM THE MAIN BEAN FIRST ********/
+ $this->_bean->call_custom_logic('after_relationship_add', $custom_logic_arguments);
+ /**** NOW WE HAVE TO CALL THE LOGIC HOOK THE OTHER WAY SINCE IT TAKES TWO FOR A RELATIONSHIP****/
+ global $beanList;
+ if ( isset($beanList[$custom_logic_arguments['related_module']]) ) {
+ $class = $beanList[$custom_logic_arguments['related_module']];
+ if ( !empty($class) ) {
+ $rbean = new $class();
+ $rbean->id = $key;
+ $rbean->call_custom_logic('after_relationship_add', $custom_reverse_arguments);
+ }
+ }
+ }
+ }
+
+ function _add_many_to_many($add_values) {
+
+ //add date modified.
+ $add_values['date_modified']= $GLOBALS['timedate']->nowDb();
+
+ //check whether duplicate exist or not.
+ if ($this->relationship_exists($this->_relationship->join_table,$add_values)) {
+
+/* switch($this->when_dup_relationship_found) {
+
+ case 1: //do nothing.
+ $GLOBALS['log']->debug("Executing default option, no action.");
+ break;
+
+ case 3: //delete the record first, then create a new entry.
+ $this->_delete_row($this->_relationship->join_table,$this->_duplicate_key);
+ $this->_insert_row($add_values);
+ break;
+
+ default:
+ case 2: //update the record.
+*/ $this->_update_row($add_values,$this->_relationship->join_table,$this->_duplicate_where);
+/* break;
+ }*/
+
+ } else {
+ $this->_insert_row($add_values);
+ }
+ }
+
+ function _delete_row($table_name,$key) {
+ $query="UPDATE $table_name SET deleted=1, date_modified='" .$GLOBALS['timedate']->nowDb()."' WHERE id='$key'";
+ $GLOBALS['log']->debug("Relationship Delete Statement :".$query);
+
+ $result=$this->_db->query($query, true);
+ }
+
+ function _update_row(&$value_array,$table_name,$where) {
+
+ $query='UPDATE '.$table_name.' SET ';
+ $delimiter='';
+ foreach ($value_array as $key=>$value) {
+ $query.=$delimiter.$key."='".$value."' ";
+ $delimiter=",";
+ }
+ $query.=$where;
+ $GLOBALS['log']->debug("Relationship Update Statement :".$query);
+
+ $result=$this->_db->query($query, true);
+ }
+
+ function _insert_row(&$value_array) {
+ //add key column
+ $value_array['id']= create_guid();
+
+ $columns_list='';
+ $values_list='';
+ $delimiter='';
+ foreach ($value_array as $key=>$value) {
+ $columns_list.=$delimiter.$key;
+ $values_list .=$delimiter."'".$value."'";
+ $delimiter=",";
+ }
+ $insert_string='INSERT into '.$this->_relationship->join_table.' ('.$columns_list.') VALUES ('.$values_list.')';
+ $GLOBALS['log']->debug("Relationship Insert String :".$insert_string);
+
+ $result=$this->_db->query($insert_string, true);
+ }
+
+
+
+ /* this method operates on all related record, takes action based on cardinality of the relationship.
+ * one-to-one, one-to-many: update the rhs table's parent id with null
+ * many-to-one: update the lhs table's parent-id with null.
+ * many-to-many: delete rows from the link table. related table must have delted and date_modified column.
+ * if related_is is null, the methods assumes that the parent bean (whose id is passed) is being deleted.
+ * if both id and related_id are passed the metod unlinks a single relationship.
+ * parameters: id of the bean being deleted.
+ *
+ */
+ function delete($id,$related_id='') {
+ $GLOBALS['log']->debug(sprintf("delete called with these parameter values. id=%s, related_id=%s",$id,$related_id));
+
+ $_relationship=&$this->_relationship;
+ $_bean=&$this->_bean;
+
+ $bean_is_lhs=$this->_get_bean_position();
+ if (!isset($bean_is_lhs)) {
+ $GLOBALS['log']->debug("Invalid relationship parameters. Exiting..");
+ return null;
+ }
+ if ($_relationship->relationship_type=='one-to-many' or $_relationship->relationship_type=='one-to-one' ) {
+ if ($bean_is_lhs) {
+ //update rhs_table set rhs_key = null, relation_column_name = null where rhs_key= this_bean_id
+ $query='UPDATE '.$_relationship->rhs_table.' SET '.$_relationship->rhs_key."=NULL, date_modified='".$GLOBALS['timedate']->nowDb()."'";
+
+ if (!empty($_relationship->relationship_role_column) && !empty($_relationship->relationship_role_column_value)) {
+ $query.=','.$_relationship->relationship_role_column."= NULL ";
+ $query.=' WHERE '.$_relationship->relationship_role_column."= '".$_relationship->relationship_role_column_value."' AND ";
+ } else {
+ $query.=' WHERE ';
+ }
+ $query.=$_relationship->rhs_key."= '".$id."' ";
+
+ //restrict to one row if related_id is passed.
+ if (!empty($related_id)) {
+ $query.=" AND ".$_relationship->rhs_table.".id='".$related_id."'";
+ }
+
+ }
+ else {
+ //do nothing because the row that stores the relationship keys is being deleted.
+ //todo log an error message here.
+ //if this is the case and related_id is passed then log a message asking the user
+ //to clear the relationship using the bean.
+ }
+ }
+
+ if ($_relationship->relationship_type=='many-to-one') {
+ //do nothing because the row that stores the relationship keys is being deleted.
+ //todo log an error message here.
+ //if this is the case and related_id is passed then log a message asking the user
+ //to clear the relationship using the bean.
+ }
+
+ if ($_relationship->relationship_type=='many-to-many' ) {
+ $use_bean_is_lhs = isset($_REQUEST['ajaxSubpanel']) || $this->_swap_sides !== true;
+ $query='UPDATE '.$_relationship->join_table." SET deleted=1, date_modified='".$GLOBALS['timedate']->nowDb()."'";
+ if ($bean_is_lhs && $use_bean_is_lhs) {
+ if (!empty($this->_relationship->reverse) && ($this->_relationship->reverse == true or $this->_relationship->reverse == 1)){
+ if (empty($related_id)) {
+ $query.=" WHERE (".$_relationship->join_key_lhs."= '". $id ."' or ".$_relationship->join_key_rhs."='". $id ."')" ;
+ } else {
+ $query.=" WHERE (".$_relationship->join_key_lhs."= '". $id ."' AND ".$_relationship->join_key_rhs."='".$related_id."') OR (".$_relationship->join_key_rhs."='". $id ."' AND ".$_relationship->join_key_lhs."='".$related_id."')";
+ }
+ } else {
+ if (empty($related_id)) {
+ $query.=" WHERE ".$_relationship->join_key_lhs."= '". $id ."'";
+ } else {
+ $query.=" WHERE ".$_relationship->join_key_lhs."= '". $id ."' AND ".$_relationship->join_key_rhs."= '". $related_id."'";
+ }
+ }
+ } else {
+ if (!empty($this->_relationship->reverse) && ($this->_relationship->reverse == true or $this->_relationship->reverse == 1)) {
+ if (empty($related_id)) {
+ $query.=" WHERE (".$_relationship->join_key_rhs."= '". $id ."' or ".$_relationship->join_key_lhs."='". $id ."')" ;
+ } else {
+ $query.=" WHERE (".$_relationship->join_key_rhs."= '". $id ."' AND ".$_relationship->join_key_lhs."='".$related_id."') OR (".$_relationship->join_key_lhs."='". $id ."' AND ".$_relationship->join_key_rhs."='".$related_id."')";
+ }
+ } else {
+ if (empty($related_id)) {
+ $query.=" WHERE ".$_relationship->join_key_rhs."= '". $id ."'" ;
+ } else {
+ $query.=" WHERE ".$_relationship->join_key_rhs."= '". $id ."' AND ".$_relationship->join_key_lhs."= '". $related_id."'" ;
+ }
+ }
+ if (!empty($_relationship->relationship_role_column) && !empty($_relationship->relationship_role_column_value)) {
+ $query.=' AND '.$_relationship->relationship_role_column."= '".$_relationship->relationship_role_column_value."'";
+ }
+ }
+ }
+ //if query string is not empty execute it.
+ if (isset($query)) {
+ $GLOBALS['log']->debug('Link.Delete:Delete Query: '.$query);
+ $this->_db->query($query,true);
+ }
+ $custom_logic_arguments = array();
+ $custom_logic_arguments['id'] = $id;
+ $custom_logic_arguments['related_id'] = $related_id;
+ $custom_reverse_arguments = array();
+ $custom_reverse_arguments['related_id'] = $id;
+ $custom_reverse_arguments['id'] = $related_id;
+ if($bean_is_lhs) {
+ $custom_logic_arguments['module'] = $this->_relationship->lhs_module;
+ $custom_logic_arguments['related_module'] = $this->_relationship->rhs_module;
+ $custom_reverse_arguments['module'] = $this->_relationship->lhs_module;
+ $custom_reverse_arguments['related_module'] = $this->_relationship->rhs_module;
+ } else {
+ $custom_logic_arguments['module'] = $this->_relationship->rhs_module;
+ $custom_logic_arguments['related_module'] = $this->_relationship->lhs_module;
+ $custom_reverse_arguments['module'] = $this->_relationship->lhs_module;
+ $custom_reverse_arguments['related_module'] = $this->_relationship->rhs_module;
+ }
+
+ if (empty($this->_bean->id)) {
+ $this->_bean->retrieve($id);//!$bean_is_lhs || empty($related_id) ? $id : $related_id);
+ }
+ $this->_bean->call_custom_logic('after_relationship_delete', $custom_logic_arguments);
+ //NOW THE REVERSE WAY SINCE A RELATIONSHIP TAKES TWO
+ global $beanList;
+ if ( isset($beanList[$custom_logic_arguments['related_module']]) ) {
+ $class = $beanList[$custom_logic_arguments['related_module']];
+ if ( !empty($class) ) {
+ $rbean = new $class();
+ $rbean->retrieve(empty($related_id) ? $id : $related_id);
+ $rbean->call_custom_logic('after_relationship_delete', $custom_reverse_arguments);
+ }
+ }
+ }
+
+ function relationship_exists($table_name, $join_key_values) {
+
+ //find the key values for the table.
+ $dup_keys=$this->_get_alternate_key_fields($table_name);
+ if (empty($dup_keys)) {
+ $GLOBALS['log']->debug("No alternate key define, skipping duplicate check..");
+ return false;
+ }
+
+ $delimiter='';
+ $this->_duplicate_where=' WHERE ';
+ foreach ($dup_keys as $field) {
+ //look for key in $join_key_values, if found add to filter criteria else abort duplicate checking.
+ if (isset($join_key_values[$field])) {
+
+ $this->_duplicate_where .= $delimiter.' '.$field."='".$join_key_values[$field]."'";
+ $delimiter='AND';
+ } else {
+ $GLOBALS['log']->error('Duplicate checking aborted, Please supply a value for this column '.$field);
+ return false;
+ }
+ }
+ //add deleted check.
+ $this->_duplicate_where .= $delimiter.' deleted=0';
+
+ $query='SELECT id FROM '.$table_name.$this->_duplicate_where;
+
+ $GLOBALS['log']->debug("relationship_exists query(".$query.')');
+
+ $result=$this->_db->query($query, true);
+ $row = $this->_db->fetchByAssoc($result);
+
+ if ($row == null) {
+ return false;
+ }
+ else {
+ $this->_duplicate_key=$row['id'];
+ return true;
+ }
+ }
+
+ /* returns array of keys for duplicate checking, first check for an index of type alternate_key, if not found searches for
+ * primary key.
+ *
+ */
+ function _get_alternate_key_fields($table_name) {
+ $alternateKey=null;
+ $indices=Link::_get_link_table_definition($table_name,'indices');
+ if (!empty($indices)) {
+ foreach ($indices as $index) {
+ if ( isset($index['type']) && $index['type'] == 'alternate_key' ) {
+ return $index['fields'];
+ }
+ }
+ }
+ $relationships=Link::_get_link_table_definition($table_name,'relationships');
+ if (!empty($relationships)) {//bug 32623, when the relationship is built in old version, there is no alternate_key. we have to use join_key_lhs and join_key_lhs.
+ if(!empty($relationships[$this->_relationship_name]) && !empty($relationships[$this->_relationship_name]['join_key_lhs']) && !empty($relationships[$this->_relationship_name]['join_key_rhs'])) {
+ return array($relationships[$this->_relationship_name]['join_key_lhs'], $relationships[$this->_relationship_name]['join_key_rhs']);
+ }
+ }
+ }
+
+ /*
+ */
+ function _get_link_table_definition($table_name,$def_name) {
+ global $dictionary;
+
+ include_once('modules/TableDictionary.php');
+ // first check to see if already loaded - assumes hasn't changed in the meantime
+ if (isset($dictionary[$table_name][$def_name]))
+ {
+ return $dictionary[$table_name][$def_name];
+ }
+ else {
+ if (isset($dictionary[$this->_relationship_name][$def_name])) {
+ return ($dictionary[$this->_relationship_name][$def_name]);
+ }
+ // custom metadata is found in custom/metadata (naturally) and the naming follows the convention $relationship_name_c, and $relationship_name = $table_name$locations = array( 'metadata/' , 'custom/metadata/' ) ;
+ $relationshipName = preg_replace( '/_c$/' , '' , $table_name ) ;
+
+ $locations = array ( 'metadata/' , 'custom/metadata/' ) ;
+
+ foreach ( $locations as $basepath )
+ {
+ $path = $basepath . $relationshipName . 'MetaData.php' ;
+
+ if (file_exists($path))
+ {
+ include($path);
+ if (isset($dictionary[$relationshipName][$def_name])) {
+ return $dictionary[$relationshipName][$def_name];
+ }
+ }
+ }
+ // couldn't find the metadata for the table in either the standard or custom locations
+ $GLOBALS['log']->debug('Error fetching field defs for join table '.$table_name);
+
+ return null;
+ }
+
+
+
+ }
+ /*
+ * Return the name of the role field for the passed many to many table.
+ * if there is no role filed : return false
+ */
+ function _get_link_table_role_field($table_name) {
+ $varDefs = $this->_get_link_table_definition($table_name, 'fields');
+ $role_field = false;
+ if(!empty($varDefs)){
+ $role_field = '';
+ foreach($varDefs as $v){
+ if(strpos($v['name'], '_role') !== false){
+ $role_field = $v['name'];
+ }
+ }
+ }
+ return $role_field;
+ }
+
+
+}
+?>
diff --git a/data/SugarBean.php b/data/SugarBean.php
new file mode 100644
index 00000000..5a49ccab
--- /dev/null
+++ b/data/SugarBean.php
@@ -0,0 +1,5467 @@
+/Import/views/view.step4.php if a module is being imported
+ */
+ var $in_import = false;
+ /**
+ * Constructor for the bean, it performs following tasks:
+ *
+ * 1. Initalized a database connections
+ * 2. Load the vardefs for the module implemeting the class. cache the entries
+ * if needed
+ * 3. Setup row-level security preference
+ * All implementing classes must call this constructor using the parent::SugarBean() class.
+ *
+ */
+ function SugarBean()
+ {
+ global $dictionary, $current_user;
+ static $loaded_defs = array();
+ $this->db = DBManagerFactory::getInstance();
+
+ $this->dbManager = DBManagerFactory::getInstance();
+ if((false == $this->disable_vardefs && empty($loaded_defs[$this->object_name])) || !empty($GLOBALS['reload_vardefs']))
+ {
+ VardefManager::loadVardef($this->module_dir, $this->object_name);
+
+ // build $this->column_fields from the field_defs if they exist
+ if (!empty($dictionary[$this->object_name]['fields'])) {
+ foreach ($dictionary[$this->object_name]['fields'] as $key=>$value_array) {
+ $column_fields[] = $key;
+ if(!empty($value_array['required']) && !empty($value_array['name'])) {
+ $this->required_fields[$value_array['name']] = 1;
+ }
+ }
+ $this->column_fields = $column_fields;
+ }
+
+ //setup custom fields
+ if(!isset($this->custom_fields) &&
+ empty($this->disable_custom_fields))
+ {
+ $this->setupCustomFields($this->module_dir);
+ }
+ //load up field_arrays from CacheHandler;
+ if(empty($this->list_fields))
+ $this->list_fields = $this->_loadCachedArray($this->module_dir, $this->object_name, 'list_fields');
+ if(empty($this->column_fields))
+ $this->column_fields = $this->_loadCachedArray($this->module_dir, $this->object_name, 'column_fields');
+ if(empty($this->required_fields))
+ $this->required_fields = $this->_loadCachedArray($this->module_dir, $this->object_name, 'required_fields');
+
+ if(isset($GLOBALS['dictionary'][$this->object_name]) && !$this->disable_vardefs)
+ {
+ $this->field_name_map = $dictionary[$this->object_name]['fields'];
+ $this->field_defs = $dictionary[$this->object_name]['fields'];
+
+ if(!empty($dictionary[$this->object_name]['optimistic_locking']))
+ {
+ $this->optimistic_lock=true;
+ }
+ }
+ $loaded_defs[$this->object_name]['column_fields'] =& $this->column_fields;
+ $loaded_defs[$this->object_name]['list_fields'] =& $this->list_fields;
+ $loaded_defs[$this->object_name]['required_fields'] =& $this->required_fields;
+ $loaded_defs[$this->object_name]['field_name_map'] =& $this->field_name_map;
+ $loaded_defs[$this->object_name]['field_defs'] =& $this->field_defs;
+ }
+ else
+ {
+ $this->column_fields =& $loaded_defs[$this->object_name]['column_fields'] ;
+ $this->list_fields =& $loaded_defs[$this->object_name]['list_fields'];
+ $this->required_fields =& $loaded_defs[$this->object_name]['required_fields'];
+ $this->field_name_map =& $loaded_defs[$this->object_name]['field_name_map'];
+ $this->field_defs =& $loaded_defs[$this->object_name]['field_defs'];
+ $this->added_custom_field_defs = true;
+
+ if(!isset($this->custom_fields) &&
+ empty($this->disable_custom_fields))
+ {
+ $this->setupCustomFields($this->module_dir, false);
+ }
+ if(!empty($dictionary[$this->object_name]['optimistic_locking']))
+ {
+ $this->optimistic_lock=true;
+ }
+ }
+
+ if($this->bean_implements('ACL') && !empty($GLOBALS['current_user'])){
+ $this->acl_fields = (isset($dictionary[$this->object_name]['acl_fields']) && $dictionary[$this->object_name]['acl_fields'] === false)?false:true;
+ }
+ $this->populateDefaultValues();
+ }
+
+
+ /**
+ * Returns the object name. If object_name is not set, table_name is returned.
+ *
+ * All implementing classes must set a value for the object_name variable.
+ *
+ * @param array $arr row of data fetched from the database.
+ * @return nothing
+ *
+ */
+ function getObjectName()
+ {
+ if ($this->object_name)
+ return $this->object_name;
+
+ // This is a quick way out. The generated metadata files have the table name
+ // as the key. The correct way to do this is to override this function
+ // in bean and return the object name. That requires changing all the beans
+ // as well as put the object name in the generator.
+ return $this->table_name;
+ }
+
+ /**
+ * Returns a list of fields with their definitions that have the audited property set to true.
+ * Before calling this function, check whether audit has been enabled for the table/module or not.
+ * You would set the audit flag in the implemting module's vardef file.
+ *
+ * @return an array of
+ * @see is_AuditEnabled
+ *
+ * Internal function, do not override.
+ */
+ function getAuditEnabledFieldDefinitions()
+ {
+ $aclcheck = $this->bean_implements('ACL');
+ $is_owner = $this->isOwner($GLOBALS['current_user']->id);
+ if (!isset($this->audit_enabled_fields))
+ {
+
+ $this->audit_enabled_fields=array();
+ foreach ($this->field_defs as $field => $properties)
+ {
+
+ if (
+ (
+ !empty($properties['Audited']) || !empty($properties['audited']))
+ )
+ {
+
+ $this->audit_enabled_fields[$field]=$properties;
+ }
+ }
+
+ }
+ return $this->audit_enabled_fields;
+ }
+
+ /**
+ * Return true if auditing is enabled for this object
+ * You would set the audit flag in the implemting module's vardef file.
+ *
+ * @return boolean
+ *
+ * Internal function, do not override.
+ */
+ function is_AuditEnabled()
+ {
+ global $dictionary;
+ if (isset($dictionary[$this->getObjectName()]['audited']))
+ {
+ return $dictionary[$this->getObjectName()]['audited'];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+
+
+ /**
+ * Returns the name of the audit table.
+ * Audit table's name is based on implementing class' table name.
+ *
+ * @return String Audit table name.
+ *
+ * Internal function, do not override.
+ */
+ function get_audit_table_name()
+ {
+ return $this->getTableName().'_audit';
+ }
+
+ /**
+ * If auditing is enabled, create the audit table.
+ *
+ * Function is used by the install scripts and a repair utility in the admin panel.
+ *
+ * Internal function, do not override.
+ */
+ function create_audit_table()
+ {
+ global $dictionary;
+ $table_name=$this->get_audit_table_name();
+
+ require('metadata/audit_templateMetaData.php');
+
+ $fieldDefs = $dictionary['audit']['fields'];
+ $indices = $dictionary['audit']['indices'];
+ // '0' stands for the first index for all the audit tables
+ $indices[0]['name'] = 'idx_' . strtolower($this->getTableName()) . '_' . $indices[0]['name'];
+ $indices[1]['name'] = 'idx_' . strtolower($this->getTableName()) . '_' . $indices[1]['name'];
+ $engine = null;
+ if(isset($dictionary['audit']['engine'])) {
+ $engine = $dictionary['audit']['engine'];
+ } else if(isset($dictionary[$this->getObjectName()]['engine'])) {
+ $engine = $dictionary[$this->getObjectName()]['engine'];
+ }
+
+ $sql=$this->dbManager->helper->createTableSQLParams($table_name, $fieldDefs, $indices, $engine);
+
+ $msg = "Error creating table: ".$table_name. ":";
+ $this->dbManager->query($sql,true,$msg);
+ }
+
+ /**
+ * Returns the implementing class' table name.
+ *
+ * All implementing classes set a value for the table_name variable. This value is returned as the
+ * table name. If not set, table name is extracted from the implementing module's vardef.
+ *
+ * @return String Table name.
+ *
+ * Internal function, do not override.
+ */
+ function getTableName()
+ {
+ global $dictionary;
+ if(isset($this->table_name))
+ {
+ return $this->table_name;
+ }
+ return $dictionary[$this->getObjectName()]['table'];
+ }
+
+ /**
+ * Returns field definitions for the implementing module.
+ *
+ * The definitions were loaded in the constructor.
+ *
+ * @return Array Field definitions.
+ *
+ * Internal function, do not override.
+ */
+ function getFieldDefinitions()
+ {
+ return $this->field_defs;
+ }
+
+ /**
+ * Returns index definitions for the implementing module.
+ *
+ * The definitions were loaded in the constructor.
+ *
+ * @return Array Index definitions.
+ *
+ * Internal function, do not override.
+ */
+ function getIndices()
+ {
+ global $dictionary;
+ if(isset($dictionary[$this->getObjectName()]['indices']))
+ {
+ return $dictionary[$this->getObjectName()]['indices'];
+ }
+ return array();
+ }
+
+ /**
+ * Returns field definition for the requested field name.
+ *
+ * The definitions were loaded in the constructor.
+ *
+ * @param string field name,
+ * @return Array Field properties or boolean false if the field doesn't exist
+ *
+ * Internal function, do not override.
+ */
+ function getFieldDefinition($name)
+ {
+ if ( !isset($this->field_defs[$name]) )
+ return false;
+
+ return $this->field_defs[$name];
+ }
+
+ /**
+ * Returnss definition for the id field name.
+ *
+ * The definitions were loaded in the constructor.
+ *
+ * @return Array Field properties.
+ *
+ * Internal function, do not override.
+ */
+ function getPrimaryFieldDefinition()
+ {
+ $def = $this->getFieldDefinition("id");
+ if (!$def)
+ $def = $this->getFieldDefinition(0);
+ return $def;
+ }
+ /**
+ * Returns the value for the requested field.
+ *
+ * When a row of data is fetched using the bean, all fields are created as variables in the context
+ * of the bean and then fetched values are set in these variables.
+ *
+ * @param string field name,
+ * @return varies Field value.
+ *
+ * Internal function, do not override.
+ */
+ function getFieldValue($name)
+ {
+ if (!isset($this->$name)){
+ return FALSE;
+ }
+ if($this->$name === TRUE){
+ return 1;
+ }
+ if($this->$name === FALSE){
+ return 0;
+ }
+ return $this->$name;
+ }
+
+ /**
+ * Basically undoes the effects of SugarBean::populateDefaultValues(); this method is best called right after object
+ * initialization.
+ */
+ public function unPopulateDefaultValues()
+ {
+ if ( !is_array($this->field_defs) )
+ return;
+
+ foreach ($this->field_defs as $field => $value) {
+ if( !empty($this->$field)
+ && ((isset($value['default']) && $this->$field == $value['default']) || (!empty($value['display_default']) && $this->$field == $value['display_default']))
+ ) {
+ $this->$field = null;
+ continue;
+ }
+ if(!empty($this->$field) && !empty($value['display_default']) && in_array($value['type'], array('date', 'datetime', 'datetimecombo')) &&
+ $this->$field == $this->parseDateDefault($value['display_default'], ($value['type'] != 'date'))) {
+ $this->$field = null;
+ }
+ }
+ }
+
+ /**
+ * Create date string from default value
+ * like '+1 month'
+ * @param string $value
+ * @param bool $time Should be expect time set too?
+ * @return string
+ */
+ protected function parseDateDefault($value, $time = false)
+ {
+ global $timedate;
+ if($time) {
+ $dtAry = explode('&', $value, 2);
+ $dateValue = $timedate->getNow(true)->modify($dtAry[0]);
+ if(!empty($dtAry[1])) {
+ $timeValue = $timedate->fromString($dtAry[1]);
+ $dateValue->setTime($timeValue->hour, $timeValue->min, $timeValue->sec);
+ }
+ return $timedate->asUser($dateValue);
+ } else {
+ return $timedate->asUserDate($timedate->getNow(true)->modify($value));
+ }
+ }
+
+ function populateDefaultValues($force=false){
+ if ( !is_array($this->field_defs) )
+ return;
+ foreach($this->field_defs as $field=>$value){
+ if((isset($value['default']) || !empty($value['display_default'])) && ($force || empty($this->$field))){
+ $type = $value['type'];
+
+ switch($type){
+ case 'date':
+ if(!empty($value['display_default'])){
+ $this->$field = $this->parseDateDefault($value['display_default']);
+ }
+ break;
+ case 'datetime':
+ case 'datetimecombo':
+ if(!empty($value['display_default'])){
+ $this->$field = $this->parseDateDefault($value['display_default'], true);
+ }
+ break;
+ case 'multienum':
+ if(empty($value['default']) && !empty($value['display_default']))
+ $this->$field = $value['display_default'];
+ else
+ $this->$field = $value['default'];
+ break;
+ default:
+ if ( isset($value['default']) && $value['default'] !== '' ) {
+ $this->$field = htmlentities($value['default'], ENT_QUOTES, 'UTF-8');
+ } else {
+ $this->$field = '';
+ }
+ } //switch
+ }
+ } //foreach
+ }
+
+
+ /**
+ * Removes relationship metadata cache.
+ *
+ * Every module that has relationships defined with other modules, has this meta data cached. The cache is
+ * stores in 2 locations: relationships table and file system. This method clears the cache from both locations.
+ *
+ * @param string $key module whose meta cache is to be cleared.
+ * @param string $db database handle.
+ * @param string $tablename table name
+ * @param string $dictionary vardef for the module
+ * @param string $module_dir name of subdirectory where module is installed.
+ *
+ * @return Nothing
+ * @static
+ *
+ * Internal function, do not override.
+ */
+ function removeRelationshipMeta($key,$db,$tablename,$dictionary,$module_dir)
+ {
+ //load the module dictionary if not supplied.
+ if ((!isset($dictionary) or empty($dictionary)) && !empty($module_dir))
+ {
+ $filename='modules/'. $module_dir . '/vardefs.php';
+ if(file_exists($filename))
+ {
+ include($filename);
+ }
+ }
+ if (!is_array($dictionary) or !array_key_exists($key, $dictionary))
+ {
+ $GLOBALS['log']->fatal("removeRelationshipMeta: Metadata for table ".$tablename. " does not exist");
+ display_notice("meta data absent for table ".$tablename." keyed to $key ");
+ }
+ else
+ {
+ if (isset($dictionary[$key]['relationships']))
+ {
+ $RelationshipDefs = $dictionary[$key]['relationships'];
+ foreach ($RelationshipDefs as $rel_name)
+ {
+ Relationship::delete($rel_name,$db);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * This method has been deprecated.
+ *
+ * @see removeRelationshipMeta()
+ * @deprecated 4.5.1 - Nov 14, 2006
+ * @static
+ */
+ function remove_relationship_meta($key,$db,$log,$tablename,$dictionary,$module_dir)
+ {
+ SugarBean::removeRelationshipMeta($key,$db,$tablename,$dictionary,$module_dir);
+ }
+
+
+ /**
+ * Populates the relationship meta for a module.
+ *
+ * It is called during setup/install. It is used statically to create relationship meta data for many-to-many tables.
+ *
+ * @param string $key name of the object.
+ * @param object $db database handle.
+ * @param string $tablename table, meta data is being populated for.
+ * @param array dictionary vardef dictionary for the object. *
+ * @param string module_dir name of subdirectory where module is installed.
+ * @param boolean $iscustom Optional,set to true if module is installed in a custom directory. Default value is false.
+ * @static
+ *
+ * Internal function, do not override.
+ */
+ function createRelationshipMeta($key,$db,$tablename,$dictionary,$module_dir,$iscustom=false)
+ {
+ //load the module dictionary if not supplied.
+ if (empty($dictionary) && !empty($module_dir))
+ {
+ if($iscustom)
+ {
+ $filename='custom/modules/' . $module_dir . '/Ext/Vardefs/vardefs.ext.php';
+ }
+ else
+ {
+ if ($key == 'User')
+ {
+ // a very special case for the Employees module
+ // this must be done because the Employees/vardefs.php does an include_once on
+ // Users/vardefs.php
+ $filename='modules/Users/vardefs.php';
+ }
+ else
+ {
+ $filename='modules/'. $module_dir . '/vardefs.php';
+ }
+ }
+
+ if(file_exists($filename))
+ {
+ include($filename);
+ // cn: bug 7679 - dictionary entries defined as $GLOBALS['name'] not found
+ if(empty($dictionary) || !empty($GLOBALS['dictionary'][$key]))
+ {
+ $dictionary = $GLOBALS['dictionary'];
+ }
+ }
+ else
+ {
+ $GLOBALS['log']->debug("createRelationshipMeta: no metadata file found" . $filename);
+ return;
+ }
+ }
+
+ if (!is_array($dictionary) or !array_key_exists($key, $dictionary))
+ {
+ $GLOBALS['log']->fatal("createRelationshipMeta: Metadata for table ".$tablename. " does not exist");
+ display_notice("meta data absent for table ".$tablename." keyed to $key ");
+ }
+ else
+ {
+ if (isset($dictionary[$key]['relationships']))
+ {
+
+ $RelationshipDefs = $dictionary[$key]['relationships'];
+
+ $delimiter=',';
+ global $beanList;
+ $beanList_ucase=array_change_key_case ( $beanList ,CASE_UPPER);
+ foreach ($RelationshipDefs as $rel_name=>$rel_def)
+ {
+ if (isset($rel_def['lhs_module']) and !isset($beanList_ucase[strtoupper($rel_def['lhs_module'])])) {
+ $GLOBALS['log']->debug('skipping orphaned relationship record ' . $rel_name . ' lhs module is missing ' . $rel_def['lhs_module']);
+ continue;
+ }
+ if (isset($rel_def['rhs_module']) and !isset($beanList_ucase[strtoupper($rel_def['rhs_module'])])) {
+ $GLOBALS['log']->debug('skipping orphaned relationship record ' . $rel_name . ' rhs module is missing ' . $rel_def['rhs_module']);
+ continue;
+ }
+
+
+ //check whether relationship exists or not first.
+ if (Relationship::exists($rel_name,$db))
+ {
+ $GLOBALS['log']->debug('Skipping, reltionship already exists '.$rel_name);
+ }
+ else
+ {
+ // add Id to the insert statement.
+ $column_list='id';
+ $value_list="'".create_guid()."'";
+
+ //add relationship name to the insert statement.
+ $column_list .= $delimiter.'relationship_name';
+ $value_list .= $delimiter."'".$rel_name."'";
+
+ //todo check whether $rel_def is an array or not.
+ //for now make that assumption.
+ //todo specify defaults if meta not defined.
+ foreach ($rel_def as $def_key=>$value)
+ {
+ $column_list.= $delimiter.$def_key;
+ $value_list.= $delimiter."'".$value."'";
+ }
+
+ //create the record. todo add error check.
+ $insert_string = "INSERT into relationships (" .$column_list. ") values (".$value_list.")";
+ $db->query($insert_string, true);
+ }
+ }
+ }
+ else
+ {
+ //todo
+ //log informational message stating no relationships meta was set for this bean.
+ }
+ }
+ }
+
+ /**
+ * This method has been deprecated.
+ * @see createRelationshipMeta()
+ * @deprecated 4.5.1 - Nov 14, 2006
+ * @static
+ */
+ function create_relationship_meta($key,&$db,&$log,$tablename,$dictionary,$module_dir)
+ {
+ SugarBean::createRelationshipMeta($key,$db,$tablename,$dictionary,$module_dir);
+ }
+
+
+ /**
+ * Loads the request relationship. This method should be called before performing any operations on the related data.
+ *
+ * This method searches the vardef array for the requested attribute's definition. If the attribute is of the type
+ * link then it creates a similary named variable and loads the relationship definition.
+ *
+ * @param string $rel_name relationship/attribute name.
+ * @return nothing.
+ */
+ function load_relationship($rel_name)
+ {
+ $GLOBALS['log']->debug("SugarBean.load_relationships, Loading relationship (".$rel_name.").");
+
+ if (empty($rel_name))
+ {
+ $GLOBALS['log']->error("SugarBean.load_relationships, Null relationship name passed.");
+ return false;
+ }
+ $fieldDefs = $this->getFieldDefinitions();
+
+ //find all definitions of type link.
+ if (!empty($fieldDefs))
+ {
+ //if rel_name is provided, search the fieldef array keys by name.
+ if (array_key_exists($rel_name, $fieldDefs))
+ {
+ if (array_search('link',$fieldDefs[$rel_name]) === 'type')
+ {
+ //initialize a variable of type Link
+ require_once('data/Link.php');
+ $class = load_link_class($fieldDefs[$rel_name]);
+
+ $this->$rel_name=new $class($fieldDefs[$rel_name]['relationship'], $this, $fieldDefs[$rel_name]);
+
+ if (empty($this->$rel_name->_relationship->id)) {
+ unset($this->$rel_name);
+ return false;
+ }
+ return true;
+ }
+ }
+ else
+ {
+ $GLOBALS['log']->debug("SugarBean.load_relationships, Error Loading relationship (".$rel_name.").");
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Loads all attributes of type link.
+ *
+ * Method searches the implmenting module's vardef file for attributes of type link, and for each attribute
+ * create a similary named variable and load the relationship definition.
+ *
+ * @return Nothing
+ *
+ * Internal function, do not override.
+ */
+ function load_relationships()
+ {
+
+ $GLOBALS['log']->debug("SugarBean.load_relationships, Loading all relationships of type link.");
+
+ $linked_fields=$this->get_linked_fields();
+ require_once("data/Link.php");
+ foreach($linked_fields as $name=>$properties)
+ {
+ $class = load_link_class($properties);
+
+ $this->$name=new $class($properties['relationship'], $this, $properties);
+ }
+ }
+
+ /**
+ * Returns an array of beans of related data.
+ *
+ * For instance, if an account is related to 10 contacts , this function will return an array of contacts beans (10)
+ * with each bean representing a contact record.
+ * Method will load the relationship if not done so already.
+ *
+ * @param string $field_name relationship to be loaded.
+ * @param string $bean name class name of the related bean.
+ * @param array $sort_array optional, unused
+ * @param int $begin_index Optional, default 0, unused.
+ * @param int $end_index Optional, default -1
+ * @param int $deleted Optional, Default 0, 0 adds deleted=0 filter, 1 adds deleted=1 filter.
+ * @param string $optional_where, Optional, default empty.
+ *
+ * Internal function, do not override.
+ */
+ function get_linked_beans($field_name,$bean_name, $sort_array = array(), $begin_index = 0, $end_index = -1,
+ $deleted=0, $optional_where="")
+ {
+
+ //if bean_name is Case then use aCase
+ if($bean_name=="Case")
+ $bean_name = "aCase";
+
+ //add a references to bean_name if it doe not exist aleady.
+ if (!(class_exists($bean_name)))
+ {
+
+ if (isset($GLOBALS['beanList']) && isset($GLOBALS['beanFiles']))
+ {
+ global $beanFiles;
+ }
+ else
+ {
+
+ }
+ $bean_file=$beanFiles[$bean_name];
+ include_once($bean_file);
+ }
+
+ $this->load_relationship($field_name);
+
+ return $this->$field_name->getBeans(new $bean_name(), $sort_array, $begin_index, $end_index, $deleted, $optional_where);
+ }
+
+ /**
+ * Returns an array of fields that are of type link.
+ *
+ * @return array List of fields.
+ *
+ * Internal function, do not override.
+ */
+ function get_linked_fields()
+ {
+
+ $linked_fields=array();
+
+ // require_once('data/Link.php');
+
+ $fieldDefs = $this->getFieldDefinitions();
+
+ //find all definitions of type link.
+ if (!empty($fieldDefs))
+ {
+ foreach ($fieldDefs as $name=>$properties)
+ {
+ if (array_search('link',$properties) === 'type')
+ {
+ $linked_fields[$name]=$properties;
+ }
+ }
+ }
+
+ return $linked_fields;
+ }
+
+ /**
+ * Returns an array of fields that are able to be Imported into
+ * i.e. 'importable' not set to 'false'
+ *
+ * @return array List of fields.
+ *
+ * Internal function, do not override.
+ */
+ function get_importable_fields()
+ {
+ $importableFields = array();
+
+ $fieldDefs= $this->getFieldDefinitions();
+
+ if (!empty($fieldDefs)) {
+ foreach ($fieldDefs as $key=>$value_array) {
+ if ( (isset($value_array['importable'])
+ && (is_string($value_array['importable']) && $value_array['importable'] == 'false'
+ || is_bool($value_array['importable']) && $value_array['importable'] == false))
+ || (isset($value_array['type']) && $value_array['type'] == 'link')
+ || (isset($value_array['auto_increment'])
+ && ($value_array['type'] == true || $value_array['type'] == 'true')) ) {
+ // only allow import if we force it
+ if (isset($value_array['importable'])
+ && (is_string($value_array['importable']) && $value_array['importable'] == 'true'
+ || is_bool($value_array['importable']) && $value_array['importable'] == true)) {
+ $importableFields[$key]=$value_array;
+ }
+ }
+ else {
+ $importableFields[$key]=$value_array;
+ }
+ }
+ }
+
+ return $importableFields;
+ }
+
+ /**
+ * Returns an array of fields that are of type relate.
+ *
+ * @return array List of fields.
+ *
+ * Internal function, do not override.
+ */
+ function get_related_fields()
+ {
+
+ $related_fields=array();
+
+// require_once('data/Link.php');
+
+ $fieldDefs = $this->getFieldDefinitions();
+
+ //find all definitions of type link.
+ if (!empty($fieldDefs))
+ {
+ foreach ($fieldDefs as $name=>$properties)
+ {
+ if (array_search('relate',$properties) === 'type')
+ {
+ $related_fields[$name]=$properties;
+ }
+ }
+ }
+
+ return $related_fields;
+ }
+
+ /**
+ * Returns an array of fields that are required for import
+ *
+ * @return array
+ */
+ function get_import_required_fields()
+ {
+ $importable_fields = $this->get_importable_fields();
+ $required_fields = array();
+
+ foreach ( $importable_fields as $name => $properties ) {
+ if ( isset($properties['importable']) && is_string($properties['importable']) && $properties['importable'] == 'required' ) {
+ $required_fields[$name] = $properties;
+ }
+ }
+
+ return $required_fields;
+ }
+
+ /**
+ * Iterates through all the relationships and deletes all records for reach relationship.
+ *
+ * @param string $id Primary key value of the parent reocrd
+ */
+ function delete_linked($id)
+ {
+ $linked_fields=$this->get_linked_fields();
+
+ foreach ($linked_fields as $name => $value)
+ {
+ if ($this->load_relationship($name))
+ {
+ $GLOBALS['log']->debug('relationship loaded');
+ $this->$name->delete($id);
+ }
+ else
+ {
+ $GLOBALS['log']->error('error loading relationship');
+ }
+ }
+ }
+
+ /**
+ * Creates tables for the module implementing the class.
+ * If you override this function make sure that your code can handles table creation.
+ *
+ */
+ function create_tables()
+ {
+ global $dictionary;
+
+ $key = $this->getObjectName();
+ if (!array_key_exists($key, $dictionary))
+ {
+ $GLOBALS['log']->fatal("create_tables: Metadata for table ".$this->table_name. " does not exist");
+ display_notice("meta data absent for table ".$this->table_name." keyed to $key ");
+ }
+ else
+ {
+ if(!$this->db->tableExists($this->table_name))
+ {
+ $this->dbManager->createTable($this);
+ if($this->bean_implements('ACL')){
+ if(!empty($this->acltype)){
+ ACLAction::addActions($this->getACLCategory(), $this->acltype);
+ }else{
+ ACLAction::addActions($this->getACLCategory());
+ }
+ }
+ }
+ else
+ {
+ echo "Table already exists : $this->table_name ";
+ }
+ if($this->is_AuditEnabled()){
+ if (!$this->db->tableExists($this->get_audit_table_name())) {
+ $this->create_audit_table();
+ }
+ }
+
+ }
+ }
+
+ /**
+ * Delete the primary table for the module implementing the class.
+ * If custom fields were added to this table/module, the custom table will be removed too, along with the cache
+ * entries that define the custom fields.
+ *
+ */
+ function drop_tables()
+ {
+ global $dictionary;
+ $key = $this->getObjectName();
+ if (!array_key_exists($key, $dictionary))
+ {
+ $GLOBALS['log']->fatal("drop_tables: Metadata for table ".$this->table_name. " does not exist");
+ echo "meta data absent for table ".$this->table_name." \n";
+ } else {
+ if(empty($this->table_name))return;
+ if ($this->db->tableExists($this->table_name))
+
+ $this->dbManager->dropTable($this);
+ if ($this->db->tableExists($this->table_name. '_cstm'))
+ {
+ $this->dbManager->dropTableName($this->table_name. '_cstm');
+ DynamicField::deleteCache();
+ }
+ if ($this->db->tableExists($this->get_audit_table_name())) {
+ $this->dbManager->dropTableName($this->get_audit_table_name());
+ }
+
+
+ }
+ }
+
+
+ /**
+ * Loads the definition of custom fields defined for the module.
+ * Local file system cache is created as needed.
+ *
+ * @param string $module_name setting up custom fields for this module.
+ * @param boolean $clean_load Optional, default true, rebuilds the cache if set to true.
+ */
+ function setupCustomFields($module_name, $clean_load=true)
+ {
+ $this->custom_fields = new DynamicField($module_name);
+ $this->custom_fields->setup($this);
+
+ }
+
+ /**
+ * Cleans char, varchar, text, etc. fields of XSS type materials
+ */
+ function cleanBean() {
+ foreach($this->field_defs as $key => $def) {
+
+ if (isset($def['type'])) {
+ $type=$def['type'];
+ }
+ if(isset($def['dbType']))
+ $type .= $def['dbType'];
+
+ if((strpos($type, 'char') !== false ||
+ strpos($type, 'text') !== false ||
+ $type == 'enum') &&
+ !empty($this->$key)
+ ) {
+ $str = from_html($this->$key);
+ // Julian's XSS cleaner
+ $potentials = clean_xss($str, false);
+
+ if(is_array($potentials) && !empty($potentials)) {
+ foreach($potentials as $bad) {
+ $str = str_replace($bad, "", $str);
+ }
+ $this->$key = to_html($str);
+ }
+ }
+ }
+ }
+
+ /**
+ * Implements a generic insert and update logic for any SugarBean
+ * This method only works for subclasses that implement the same variable names.
+ * This method uses the presence of an id field that is not null to signify and update.
+ * The id field should not be set otherwise.
+ *
+ * @param boolean $check_notify Optional, default false, if set to true assignee of the record is notified via email.
+ * @todo Add support for field type validation and encoding of parameters.
+ */
+ function save($check_notify = FALSE)
+ {
+ // cn: SECURITY - strip XSS potential vectors
+ $this->cleanBean();
+ // This is used so custom/3rd-party code can be upgraded with fewer issues, this will be removed in a future release
+ $this->fixUpFormatting();
+ global $timedate;
+ global $current_user, $action;
+
+ $isUpdate = true;
+ if(empty($this->id))
+ {
+ $isUpdate = false;
+ }
+
+ if ( $this->new_with_id == true )
+ {
+ $isUpdate = false;
+ }
+ if(empty($this->date_modified) || $this->update_date_modified)
+ {
+ $this->date_modified = $GLOBALS['timedate']->nowDb();
+ }
+
+ $this->_checkOptimisticLocking($action, $isUpdate);
+
+ if(!empty($this->modified_by_name)) $this->old_modified_by_name = $this->modified_by_name;
+ if($this->update_modified_by)
+ {
+ $this->modified_user_id = 1;
+
+ if (!empty($current_user))
+ {
+ $this->modified_user_id = $current_user->id;
+ $this->modified_by_name = $current_user->user_name;
+ }
+ }
+ if ($this->deleted != 1)
+ $this->deleted = 0;
+ if($isUpdate)
+ {
+ $query = "Update ";
+ }
+ else
+ {
+ if (empty($this->date_entered))
+ {
+ $this->date_entered = $this->date_modified;
+ }
+ if($this->set_created_by == true)
+ {
+ // created by should always be this user
+ $this->created_by = (isset($current_user)) ? $current_user->id : "";
+ }
+ if( $this->new_with_id == false)
+ {
+ $this->id = create_guid();
+ }
+ $query = "INSERT into ";
+ }
+ if($isUpdate && !$this->update_date_entered)
+ {
+ unset($this->date_entered);
+ }
+ // call the custom business logic
+ $custom_logic_arguments['check_notify'] = $check_notify;
+
+
+ $this->call_custom_logic("before_save", $custom_logic_arguments);
+ unset($custom_logic_arguments);
+
+ if(isset($this->custom_fields))
+ {
+ $this->custom_fields->bean = $this;
+ $this->custom_fields->save($isUpdate);
+ }
+
+ // use the db independent query generator
+ $this->preprocess_fields_on_save();
+
+ //construct the SQL to create the audit record if auditing is enabled.
+ $dataChanges=array();
+ if ($this->is_AuditEnabled())
+ {
+ if ($isUpdate && !isset($this->fetched_row))
+ {
+ $GLOBALS['log']->debug('Auditing: Retrieve was not called, audit record will not be created.');
+ }
+ else
+ {
+ $dataChanges=$this->dbManager->helper->getDataChanges($this);
+ }
+ }
+
+ $this->_sendNotifications($check_notify);
+
+ if ($this->db->dbType == "oci8")
+ {
+ }
+ if ($this->db->dbType == 'mysql')
+ {
+ // write out the SQL statement.
+ $query .= $this->table_name." set ";
+
+ $firstPass = 0;
+
+ foreach($this->field_defs as $field=>$value)
+ {
+ if(!isset($value['source']) || $value['source'] == 'db')
+ {
+ // Do not write out the id field on the update statement.
+ // We are not allowed to change ids.
+ if($isUpdate && ('id' == $field))
+ continue;
+ //custom fields handle there save seperatley
+ if(isset($this->field_name_map) && !empty($this->field_name_map[$field]['custom_type']))
+ continue;
+
+ // Only assign variables that have been set.
+ if(isset($this->$field))
+ {
+ //bug: 37908 - this is to handle the issue where the bool value is false, but strlen(false) <= so it will
+ //set the default value. TODO change this code to esend all fields through getFieldValue() like DbHelper->insertSql
+ if(!empty($value['type']) && $value['type'] == 'bool'){
+ $this->$field = $this->getFieldValue($field);
+ }
+
+ if(strlen($this->$field) <= 0)
+ {
+ if(!$isUpdate && isset($value['default']) && (strlen($value['default']) > 0))
+ {
+ $this->$field = $value['default'];
+ }
+ else
+ {
+ $this->$field = null;
+ }
+ }
+ // Try comparing this element with the head element.
+ if(0 == $firstPass)
+ $firstPass = 1;
+ else
+ $query .= ", ";
+
+ if(is_null($this->$field))
+ {
+ $query .= $field."=null";
+ }
+ else
+ {
+ //added check for ints because sql-server does not like casting varchar with a decimal value
+ //into an int.
+ if(isset($value['type']) and $value['type']=='int') {
+ $query .= $field."=".$this->db->quote($this->$field);
+ } elseif ( isset($value['len']) ) {
+ $query .= $field."='".$this->db->quote($this->db->truncate(from_html($this->$field),$value['len']))."'";
+ } else {
+ $query .= $field."='".$this->db->quote($this->$field)."'";
+ }
+ }
+ }
+ }
+ }
+
+ if($isUpdate)
+ {
+ $query = $query." WHERE ID = '$this->id'";
+ $GLOBALS['log']->info("Update $this->object_name: ".$query);
+ }
+ else
+ {
+ $GLOBALS['log']->info("Insert: ".$query);
+ }
+ $GLOBALS['log']->info("Save: $query");
+ $this->db->query($query, true);
+ }
+ //process if type is set to mssql
+ if ($this->db->dbType == 'mssql')
+ {
+ if($isUpdate)
+ {
+ // build out the SQL UPDATE statement.
+ $query = "UPDATE " . $this->table_name." SET ";
+ $firstPass = 0;
+ foreach($this->field_defs as $field=>$value)
+ {
+ if(!isset($value['source']) || $value['source'] == 'db')
+ {
+ // Do not write out the id field on the update statement.
+ // We are not allowed to change ids.
+ if($isUpdate && ('id' == $field))
+ continue;
+
+ // If the field is an auto_increment field, then we shouldn't be setting it. This was added
+ // specially for Bugs and Cases which have a number associated with them.
+ if ($isUpdate && isset($this->field_name_map[$field]['auto_increment']) &&
+ $this->field_name_map[$field]['auto_increment'] == true)
+ continue;
+
+ //custom fields handle their save seperatley
+ if(isset($this->field_name_map) && !empty($this->field_name_map[$field]['custom_type']))
+ continue;
+
+ // Only assign variables that have been set.
+ if(isset($this->$field))
+ {
+ //bug: 37908 - this is to handle the issue where the bool value is false, but strlen(false) <= so it will
+ //set the default value. TODO change this code to esend all fields through getFieldValue() like DbHelper->insertSql
+ if(!empty($value['type']) && $value['type'] == 'bool'){
+ $this->$field = $this->getFieldValue($field);
+ }
+
+ if(strlen($this->$field) <= 0)
+ {
+ if(!$isUpdate && isset($value['default']) && (strlen($value['default']) > 0))
+ {
+ $this->$field = $value['default'];
+ }
+ else
+ {
+ $this->$field = null;
+ }
+ }
+ // Try comparing this element with the head element.
+ if(0 == $firstPass)
+ $firstPass = 1;
+ else
+ $query .= ", ";
+
+ if(is_null($this->$field))
+ {
+ $query .= $field."=null";
+ }
+ elseif ( isset($value['len']) )
+ {
+ $query .= $field."='".$this->db->quote($this->db->truncate(from_html($this->$field),$value['len']))."'";
+ }
+ else
+ {
+ $query .= $field."='".$this->db->quote($this->$field)."'";
+ }
+ }
+ }
+ }
+ $query = $query." WHERE ID = '$this->id'";
+ $GLOBALS['log']->info("Update $this->object_name: ".$query);
+ }
+ else
+ {
+ $colums = array();
+ $values = array();
+ foreach($this->field_defs as $field=>$value)
+ {
+ if(!isset($value['source']) || $value['source'] == 'db')
+ {
+ // Do not write out the id field on the update statement.
+ // We are not allowed to change ids.
+ //if($isUpdate && ('id' == $field)) continue;
+ //custom fields handle there save seperatley
+
+ if(isset($this->field_name_map) && !empty($this->field_name_map[$field]['custom_module']))
+ continue;
+
+ // Only assign variables that have been set.
+ if(isset($this->$field))
+ {
+ //trim the value in case empty space is passed in.
+ //this will allow default values set in db to take effect, otherwise
+ //will insert blanks into db
+ $trimmed_field = trim($this->$field);
+ //if this value is empty, do not include the field value in statement
+ if($trimmed_field =='')
+ {
+ continue;
+ }
+ //bug: 37908 - this is to handle the issue where the bool value is false, but strlen(false) <= so it will
+ //set the default value. TODO change this code to esend all fields through getFieldValue() like DbHelper->insertSql
+ if(!empty($value['type']) && $value['type'] == 'bool'){
+ $this->$field = $this->getFieldValue($field);
+ }
+ //added check for ints because sql-server does not like casting varchar with a decimal value
+ //into an int.
+ if(isset($value['type']) and $value['type']=='int') {
+ $values[] = $this->db->quote($this->$field);
+ } elseif ( isset($value['len']) ) {
+ $values[] = "'".$this->db->quote($this->db->truncate(from_html($this->$field),$value['len']))."'";
+ } else {
+ $values[] = "'".$this->db->quote($this->$field)."'";
+
+ }
+ $columns[] = $field;
+ }
+ }
+ }
+ // build out the SQL INSERT statement.
+ $query = "INSERT INTO $this->table_name (" .implode("," , $columns). " ) VALUES ( ". implode("," , $values). ')';
+ $GLOBALS['log']->info("Insert: ".$query);
+ }
+
+ $GLOBALS['log']->info("Save: $query");
+ $this->db->query($query, true);
+ }
+ if (!empty($dataChanges) && is_array($dataChanges))
+ {
+ foreach ($dataChanges as $change)
+ {
+ $this->dbManager->helper->save_audit_records($this,$change);
+ }
+ }
+
+
+ // let subclasses save related field changes
+ $this->save_relationship_changes($isUpdate);
+
+ //If we aren't in setup mode and we have a current user and module, then we track
+ if(isset($GLOBALS['current_user']) && isset($this->module_dir))
+ {
+ $this->track_view($current_user->id, $this->module_dir, 'save');
+ }
+
+ $this->call_custom_logic('after_save', '');
+
+ return $this->id;
+ }
+
+
+ /**
+ * Performs a check if the record has been modified since the specified date
+ *
+ * @param date $date Datetime for verification
+ * @param string $modified_user_id User modified by
+ */
+ function has_been_modified_since($date, $modified_user_id)
+ {
+ global $current_user;
+ if (isset($current_user))
+ {
+ if ($this->db->dbType == 'mssql')
+ $date_modified_string = 'CONVERT(varchar(20), date_modified, 120)';
+ else
+ $date_modified_string = 'date_modified';
+
+ $query = "SELECT date_modified FROM $this->table_name WHERE id='$this->id' AND modified_user_id != '$current_user->id' AND (modified_user_id != '$modified_user_id' OR $date_modified_string > " . db_convert("'".$date."'", 'datetime') . ')';
+ $result = $this->db->query($query);
+
+ if($this->db->fetchByAssoc($result))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Determines which users receive a notification
+ */
+ function get_notification_recipients() {
+ $notify_user = new User();
+ $notify_user->retrieve($this->assigned_user_id);
+ $this->new_assigned_user_name = $notify_user->full_name;
+
+ $GLOBALS['log']->info("Notifications: recipient is $this->new_assigned_user_name");
+
+ $user_list = array($notify_user);
+ return $user_list;
+ /*
+ //send notifications to followers, but ensure to not query for the assigned_user.
+ return SugarFollowing::getFollowers($this, $notify_user);
+ */
+ }
+
+ /**
+ * Handles sending out email notifications when items are first assigned to users
+ *
+ * @param string $notify_user user to notify
+ * @param string $admin the admin user that sends out the notification
+ */
+ function send_assignment_notifications($notify_user, $admin)
+ {
+ global $current_user;
+
+ if(($this->object_name == 'Meeting' || $this->object_name == 'Call') || $notify_user->receive_notifications)
+ {
+ $sendToEmail = $notify_user->emailAddress->getPrimaryAddress($notify_user);
+ $sendEmail = TRUE;
+ if(empty($sendToEmail)) {
+ $GLOBALS['log']->warn("Notifications: no e-mail address set for user {$notify_user->user_name}, cancelling send");
+ $sendEmail = FALSE;
+ }
+
+ $notify_mail = $this->create_notification_email($notify_user);
+ $notify_mail->setMailerForSystem();
+
+ if(empty($admin->settings['notify_send_from_assigning_user'])) {
+ $notify_mail->From = $admin->settings['notify_fromaddress'];
+ $notify_mail->FromName = (empty($admin->settings['notify_fromname'])) ? "" : $admin->settings['notify_fromname'];
+ } else {
+ // Send notifications from the current user's e-mail (ifset)
+ $fromAddress = $current_user->emailAddress->getReplyToAddress($current_user);
+ $fromAddress = !empty($fromAddress) ? $fromAddress : $admin->settings['notify_fromaddress'];
+ $notify_mail->From = $fromAddress;
+ //Use the users full name is available otherwise default to system name
+ $from_name = !empty($admin->settings['notify_fromname']) ? $admin->settings['notify_fromname'] : "";
+ $from_name = !empty($current_user->full_name) ? $current_user->full_name : $from_name;
+ $notify_mail->FromName = $from_name;
+ }
+
+ if($sendEmail && !$notify_mail->Send()) {
+ $GLOBALS['log']->fatal("Notifications: error sending e-mail (method: {$notify_mail->Mailer}), (error: {$notify_mail->ErrorInfo})");
+ } else {
+ $GLOBALS['log']->fatal("Notifications: e-mail successfully sent");
+ }
+
+ }
+ }
+
+ /**
+ * This function handles create the email notifications email.
+ * @param string $notify_user the user to send the notification email to
+ */
+ function create_notification_email($notify_user) {
+ global $sugar_version;
+ global $sugar_config;
+ global $app_list_strings;
+ global $current_user;
+ global $locale;
+ global $beanList;
+ $OBCharset = $locale->getPrecedentPreference('default_email_charset');
+
+
+ require_once("include/SugarPHPMailer.php");
+
+ $notify_address = $notify_user->emailAddress->getPrimaryAddress($notify_user);
+ $notify_name = $notify_user->full_name;
+ $GLOBALS['log']->debug("Notifications: user has e-mail defined");
+
+ $notify_mail = new SugarPHPMailer();
+ $notify_mail->AddAddress($notify_address,$locale->translateCharsetMIME(trim($notify_name), 'UTF-8', $OBCharset));
+
+ if(empty($_SESSION['authenticated_user_language'])) {
+ $current_language = $sugar_config['default_language'];
+ } else {
+ $current_language = $_SESSION['authenticated_user_language'];
+ }
+ $xtpl = new XTemplate(get_notify_template_file($current_language));
+ if($this->module_dir == "Cases") {
+ $template_name = "Case"; //we should use Case, you can refer to the en_us.notify_template.html.
+ }
+ else {
+ $template_name = $beanList[$this->module_dir]; //bug 20637, in workflow this->object_name = strange chars.
+ }
+
+ $this->current_notify_user = $notify_user;
+
+ if(in_array('set_notification_body', get_class_methods($this))) {
+ $xtpl = $this->set_notification_body($xtpl, $this);
+ } else {
+ $xtpl->assign("OBJECT", $this->object_name);
+ $template_name = "Default";
+ }
+ if(!empty($_SESSION["special_notification"]) && $_SESSION["special_notification"]) {
+ $template_name = $beanList[$this->module_dir].'Special';
+ }
+ if($this->special_notification) {
+ $template_name = $beanList[$this->module_dir].'Special';
+ }
+ $xtpl->assign("ASSIGNED_USER", $this->new_assigned_user_name);
+ $xtpl->assign("ASSIGNER", $current_user->name);
+ $port = '';
+
+ if(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
+ $port = $_SERVER['SERVER_PORT'];
+ }
+
+ if (!isset($_SERVER['HTTP_HOST'])) {
+ $_SERVER['HTTP_HOST'] = '';
+ }
+
+ $httpHost = $_SERVER['HTTP_HOST'];
+
+ if($colon = strpos($httpHost, ':')) {
+ $httpHost = substr($httpHost, 0, $colon);
+ }
+
+ $parsedSiteUrl = parse_url($sugar_config['site_url']);
+ $host = $parsedSiteUrl['host'];
+ if(!isset($parsedSiteUrl['port'])) {
+ $parsedSiteUrl['port'] = 80;
+ }
+
+ $port = ($parsedSiteUrl['port'] != 80) ? ":".$parsedSiteUrl['port'] : '';
+ $path = !empty($parsedSiteUrl['path']) ? $parsedSiteUrl['path'] : "";
+ $cleanUrl = "{$parsedSiteUrl['scheme']}://{$host}{$port}{$path}";
+
+ $xtpl->assign("URL", $cleanUrl."/index.php?module={$this->module_dir}&action=DetailView&record={$this->id}");
+ $xtpl->assign("SUGAR", "Sugar v{$sugar_version}");
+ $xtpl->parse($template_name);
+ $xtpl->parse($template_name . "_Subject");
+
+ $notify_mail->Body = from_html(trim($xtpl->text($template_name)));
+ $notify_mail->Subject = from_html($xtpl->text($template_name . "_Subject"));
+
+ // cn: bug 8568 encode notify email in User's outbound email encoding
+ $notify_mail->prepForOutbound();
+
+ return $notify_mail;
+ }
+
+ /**
+ * This function is a good location to save changes that have been made to a relationship.
+ * This should be overriden in subclasses that have something to save.
+ *
+ * @param $is_update true if this save is an update.
+ */
+function save_relationship_changes($is_update, $exclude=array())
+ {
+ $new_rel_id = false;
+ $new_rel_link = false;
+ //this allows us to dynamically relate modules without adding it to the relationship_fields array
+ if(!empty($_REQUEST['relate_id']) && !in_array($_REQUEST['relate_to'], $exclude) && $_REQUEST['relate_id'] != $this->id){
+ $new_rel_id = $_REQUEST['relate_id'];
+ $new_rel_relname = $_REQUEST['relate_to'];
+ if(!empty($this->in_workflow) && !empty($this->not_use_rel_in_req)) {
+ $new_rel_id = $this->new_rel_id;
+ $new_rel_relname = $this->new_rel_relname;
+ }
+ $new_rel_link = $new_rel_relname;
+ //Try to find the link in this bean based on the relationship
+ foreach ( $this->field_defs as $key => $def ) {
+ if (isset($def['type']) && $def['type'] == 'link'
+ && isset($def['relationship']) && $def['relationship'] == $new_rel_relname) {
+ $new_rel_link = $key;
+ }
+ }
+ }
+
+ // First we handle the preset fields listed in the fixed relationship_fields array hardcoded into the OOB beans
+ // TODO: remove this mechanism and replace with mechanism exclusively based on the vardefs
+ if (isset($this->relationship_fields) && is_array($this->relationship_fields))
+ {
+ foreach ($this->relationship_fields as $id=>$rel_name)
+ {
+
+ if(in_array($id, $exclude))continue;
+
+ if(!empty($this->$id))
+ {
+ $GLOBALS['log']->debug('save_relationship_changes(): From relationship_field array - adding a relationship record: '.$rel_name . ' = ' . $this->$id);
+ //already related the new relationship id so let's set it to false so we don't add it again using the _REQUEST['relate_i'] mechanism in a later block
+ if($this->$id == $new_rel_id){
+ $new_rel_id = false;
+ }
+ $this->load_relationship($rel_name);
+ $this->$rel_name->add($this->$id);
+ $related = true;
+ }
+ else
+ {
+ //if before value is not empty then attempt to delete relationship
+ if(!empty($this->rel_fields_before_value[$id]))
+ {
+ $GLOBALS['log']->debug('save_relationship_changes(): From relationship_field array - attempting to remove the relationship record, using relationship attribute'.$rel_name);
+ $this->load_relationship($rel_name);
+ $this->$rel_name->delete($this->id,$this->rel_fields_before_value[$id]);
+ }
+ }
+ }
+ }
+
+/* Next, we'll attempt to update all of the remaining relate fields in the vardefs that have 'save' set in their field_def
+ Only the 'save' fields should be saved as some vardef entries today are not for display only purposes and break the application if saved
+ If the vardef has entries for field of type relate, where a->id_name = and field of type link
+ then we receive a value for b from the MVC in the _REQUEST, and it should be set in the bean as $this->$b
+*/
+
+ foreach ( $this->field_defs as $def )
+ {
+ if ($def [ 'type' ] == 'relate' && isset ( $def [ 'id_name'] ) && isset ( $def [ 'link'] ) && isset ( $def[ 'save' ]) )
+ {
+ if ( in_array( $def['id_name'], $exclude) || in_array( $def['id_name'], $this->relationship_fields ) )
+ continue ; // continue to honor the exclude array and exclude any relationships that will be handled by the relationship_fields mechanism
+
+ if (isset( $this->field_defs[ $def [ 'link' ] ] ))
+ {
+
+ $linkfield = $this->field_defs[$def [ 'link' ]] ;
+
+ if ($this->load_relationship ( $def [ 'link' ])){
+ if (!empty($this->rel_fields_before_value[$def [ 'id_name' ]]))
+ {
+ //if before value is not empty then attempt to delete relationship
+ $GLOBALS['log']->debug("save_relationship_changes(): From field_defs - attempting to remove the relationship record: {$def [ 'link' ]} = {$this->rel_fields_before_value[$def [ 'id_name' ]]}");
+ $this->$def ['link' ]->delete($this->id, $this->rel_fields_before_value[$def [ 'id_name' ]] );
+ }
+ if (!empty($this->$def['id_name']) && is_string($this->$def['id_name']))
+ {
+ $GLOBALS['log']->debug("save_relationship_changes(): From field_defs - attempting to add a relationship record - {$def [ 'link' ]} = {$this->$def [ 'id_name' ]}" );
+ $this->$def ['link' ]->add($this->$def['id_name']);
+ }
+ } else {
+ $GLOBALS['log']->fatal("Failed to load relationship {$def [ 'link' ]} while saving {$this->module_dir}");
+ }
+ }
+ }
+ }
+
+ // Finally, we update a field listed in the _REQUEST['*/relate_id']/_REQUEST['relate_to'] mechanism (if it hasn't already been updated above)
+ if(!empty($new_rel_id)){
+
+ if($this->load_relationship($new_rel_link)){
+ $this->$new_rel_link->add($new_rel_id);
+
+ }else{
+ $lower_link = strtolower($new_rel_link);
+ if($this->load_relationship($lower_link)){
+ $this->$lower_link->add($new_rel_id);
+
+ }else{
+ require_once('data/Link.php');
+ $rel = Relationship::retrieve_by_modules($new_rel_link, $this->module_dir, $GLOBALS['db'], 'many-to-many');
+
+ if(!empty($rel)){
+ foreach($this->field_defs as $field=>$def){
+ if($def['type'] == 'link' && !empty($def['relationship']) && $def['relationship'] == $rel){
+ $this->load_relationship($field);
+ $this->$field->add($new_rel_id);
+ return;
+
+ }
+
+ }
+ //ok so we didn't find it in the field defs let's save it anyway if we have the relationshp
+
+ $this->$rel=new Link($rel, $this, array());
+ $this->$rel->add($new_rel_id);
+ }
+ }
+
+ }
+
+ }
+
+ }
+
+ /**
+ * This function retrieves a record of the appropriate type from the DB.
+ * It fills in all of the fields from the DB into the object it was called on.
+ *
+ * @param $id - If ID is specified, it overrides the current value of $this->id. If not specified the current value of $this->id will be used.
+ * @return this - The object that it was called apon or null if exactly 1 record was not found.
+ *
+ */
+
+ function check_date_relationships_load()
+ {
+ global $disable_date_format;
+ global $timedate;
+ if (empty($timedate))
+ $timedate=TimeDate::getInstance();
+
+ if(empty($this->field_defs))
+ {
+ return;
+ }
+ foreach($this->field_defs as $fieldDef)
+ {
+ $field = $fieldDef['name'];
+ if(!isset($this->processed_dates_times[$field]))
+ {
+ $this->processed_dates_times[$field] = '1';
+ if(empty($this->$field)) continue;
+ if($field == 'date_modified' || $field == 'date_entered')
+ {
+ $this->$field = from_db_convert($this->$field, 'datetime');
+ if(empty($disable_date_format)) {
+ $this->$field = $timedate->to_display_date_time($this->$field);
+ }
+ }
+ elseif(isset($this->field_name_map[$field]['type']))
+ {
+ $type = $this->field_name_map[$field]['type'];
+
+ if($type == 'relate' && isset($this->field_name_map[$field]['custom_module']))
+ {
+ $type = $this->field_name_map[$field]['type'];
+ }
+
+ if($type == 'date')
+ {
+ $this->$field = from_db_convert($this->$field, 'date');
+
+ if($this->$field == '0000-00-00')
+ {
+ $this->$field = '';
+ } elseif(!empty($this->field_name_map[$field]['rel_field']))
+ {
+ $rel_field = $this->field_name_map[$field]['rel_field'];
+
+ if(!empty($this->$rel_field))
+ {
+ $this->$rel_field=from_db_convert($this->$rel_field, 'time');
+ if(empty($disable_date_format)) {
+ $mergetime = $timedate->merge_date_time($this->$field,$this->$rel_field);
+ $this->$field = $timedate->to_display_date($mergetime);
+ $this->$rel_field = $timedate->to_display_time($mergetime);
+ }
+ }
+ }
+ else
+ {
+ if(empty($disable_date_format)) {
+ $this->$field = $timedate->to_display_date($this->$field, false);
+ }
+ }
+ } elseif($type == 'datetime' || $type == 'datetimecombo')
+ {
+ if($this->$field == '0000-00-00 00:00:00')
+ {
+ $this->$field = '';
+ }
+ else
+ {
+ $this->$field = from_db_convert($this->$field, 'datetime');
+ if(empty($disable_date_format)) {
+ $this->$field = $timedate->to_display_date_time($this->$field, true, true);
+ }
+ }
+ } elseif($type == 'time')
+ {
+ if($this->$field == '00:00:00')
+ {
+ $this->$field = '';
+ } else
+ {
+ //$this->$field = from_db_convert($this->$field, 'time');
+ if(empty($this->field_name_map[$field]['rel_field']) && empty($disable_date_format))
+ {
+ $this->$field = $timedate->to_display_time($this->$field,true, false);
+ }
+ }
+ } elseif($type == 'encrypt' && empty($disable_date_format)){
+ $this->$field = $this->decrypt_after_retrieve($this->$field);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This function processes the fields before save.
+ * Interal function, do not override.
+ */
+ function preprocess_fields_on_save()
+ {
+ $GLOBALS['log']->deprecated('SugarBean.php: preprocess_fields_on_save() is deprecated');
+ }
+
+ /**
+ * Removes formatting from values posted from the user interface.
+ * It only unformats numbers. Function relies on user/system prefernce for format strings.
+ *
+ * Internal Function, do not override.
+ */
+ function unformat_all_fields()
+ {
+ $GLOBALS['log']->deprecated('SugarBean.php: unformat_all_fields() is deprecated');
+ }
+
+ /**
+ * This functions adds formatting to all number fields before presenting them to user interface.
+ *
+ * Internal function, do not override.
+ */
+ function format_all_fields()
+ {
+ $GLOBALS['log']->deprecated('SugarBean.php: format_all_fields() is deprecated');
+ }
+
+ function format_field($fieldDef)
+ {
+ $GLOBALS['log']->deprecated('SugarBean.php: format_field() is deprecated');
+ }
+
+ /**
+ * Function corrects any bad formatting done by 3rd party/custom code
+ *
+ * This function will be removed in a future release, it is only here to assist upgrading existing code that expects formatted data in the bean
+ */
+ function fixUpFormatting()
+ {
+ global $timedate;
+ static $boolean_false_values = array('off', 'false', '0', 'no');
+
+
+ foreach($this->field_defs as $field=>$def)
+ {
+ if ( !isset($this->$field) ) {
+ continue;
+ }
+ if ( (isset($def['source'])&&$def['source']=='non-db') || $field == 'deleted' ) {
+ continue;
+ }
+ if ( isset($this->fetched_row[$field]) && $this->$field == $this->fetched_row[$field] ) {
+ // Don't hand out warnings because the field was untouched between retrieval and saving, most database drivers hand pretty much everything back as strings.
+ continue;
+ }
+ $reformatted = false;
+ switch($def['type']) {
+ case 'datetime':
+ case 'datetimecombo':
+ if(empty($this->$field)) break;
+ if ( ! preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/',$this->$field) ) {
+ // This appears to be formatted in user date/time
+ $this->$field = $timedate->to_db($this->$field);
+ $reformatted = true;
+ }
+ break;
+ case 'date':
+ if(empty($this->$field)) break;
+ if ( ! preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/',$this->$field) ) {
+ // This date appears to be formatted in the user's format
+ $this->$field = $timedate->to_db_date($this->$field, false);
+ $reformatted = true;
+ }
+ break;
+ case 'time':
+ if(empty($this->$field)) break;
+ if ( preg_match('/(am|pm)/i',$this->$field) ) {
+ // This time appears to be formatted in the user's format
+ $this->$field = $timedate->asDbTime($timedate->fromUserTime($this->$field));
+ $reformatted = true;
+ }
+ break;
+ case 'double':
+ case 'decimal':
+ case 'currency':
+ case 'float':
+ if ( $this->$field === '' || $this->$field == NULL || $this->$field == 'NULL') {
+ continue;
+ }
+ if ( is_string($this->$field) ) {
+ $this->$field = (float)unformat_number($this->$field);
+ $reformatted = true;
+ }
+ break;
+ case 'uint':
+ case 'ulong':
+ case 'long':
+ case 'short':
+ case 'tinyint':
+ case 'int':
+ if ( $this->$field === '' || $this->$field == NULL || $this->$field == 'NULL') {
+ continue;
+ }
+ if ( is_string($this->$field) ) {
+ $this->$field = (int)unformat_number($this->$field);
+ $reformatted = true;
+ }
+ break;
+ case 'bool':
+ if (empty($this->$field)) {
+ $this->$field = false;
+ } else if(true === $this->$field || 1 == $this->$field) {
+ $this->$field = true;
+ } else if(in_array(strval($this->$field), $boolean_false_values)) {
+ $this->$field = false;
+ $reformatted = true;
+ } else {
+ $this->$field = true;
+ $reformatted = true;
+ }
+ break;
+ case 'encrypt':
+ $this->$field = $this->encrpyt_before_save($this->$field);
+ break;
+ }
+ if ( $reformatted ) {
+ $GLOBALS['log']->deprecated('Formatting correction: '.$this->module_dir.'->'.$field.' had formatting automatically corrected. This will be removed in the future, please upgrade your external code');
+ }
+ }
+
+ }
+
+ /**
+ * Function fetches a single row of data given the primary key value.
+ *
+ * The fetched data is then set into the bean. The function also processes the fetched data by formattig
+ * date/time and numeric values.
+ *
+ * @param string $id Optional, default -1, is set to -1 id value from the bean is used, else, passed value is used
+ * @param boolean $encode Optional, default true, encodes the values fetched from the database.
+ * @param boolean $deleted Optional, default true, if set to false deleted filter will not be added.
+ *
+ * Internal function, do not override.
+ */
+ function retrieve($id = -1, $encode=true,$deleted=true)
+ {
+
+ $custom_logic_arguments['id'] = $id;
+ $this->call_custom_logic('before_retrieve', $custom_logic_arguments);
+
+ if ($id == -1)
+ {
+ $id = $this->id;
+ }
+ if(isset($this->custom_fields))
+ {
+ $custom_join = $this->custom_fields->getJOIN();
+ }
+ else
+ $custom_join = false;
+
+ if($custom_join)
+ {
+ $query = "SELECT $this->table_name.*". $custom_join['select']. " FROM $this->table_name ";
+ }
+ else
+ {
+ $query = "SELECT $this->table_name.* FROM $this->table_name ";
+ }
+
+ if($custom_join)
+ {
+ $query .= ' ' . $custom_join['join'];
+ }
+ $query .= " WHERE $this->table_name.id = '$id' ";
+ if ($deleted) $query .= " AND $this->table_name.deleted=0";
+ $GLOBALS['log']->debug("Retrieve $this->object_name : ".$query);
+ //requireSingleResult has beeen deprecated.
+ //$result = $this->db->requireSingleResult($query, true, "Retrieving record by id $this->table_name:$id found ");
+ $result = $this->db->limitQuery($query,0,1,true, "Retrieving record by id $this->table_name:$id found ");
+ if(empty($result))
+ {
+ return null;
+ }
+
+ $row = $this->db->fetchByAssoc($result, -1, $encode);
+ if(empty($row))
+ {
+ return null;
+ }
+
+ //make copy of the fetched row for construction of audit record and for business logic/workflow
+ $this->fetched_row=$row;
+ $this->populateFromRow($row);
+
+ global $module, $action;
+ //Just to get optimistic locking working for this release
+ if($this->optimistic_lock && $module == $this->module_dir && $action =='EditView' )
+ {
+ $_SESSION['o_lock_id']= $id;
+ $_SESSION['o_lock_dm']= $this->date_modified;
+ $_SESSION['o_lock_on'] = $this->object_name;
+ }
+ $this->processed_dates_times = array();
+ $this->check_date_relationships_load();
+
+ if($custom_join)
+ {
+ $this->custom_fields->fill_relationships();
+ }
+
+ $this->fill_in_additional_detail_fields();
+ $this->fill_in_relationship_fields();
+ //make a copy of fields in the relatiosnhip_fields array. these field values will be used to
+ //clear relatioship.
+ foreach ( $this->field_defs as $key => $def )
+ {
+ if ($def [ 'type' ] == 'relate' && isset ( $def [ 'id_name'] ) && isset ( $def [ 'link'] ) && isset ( $def[ 'save' ])) {
+ if (isset($this->$key)) {
+ $this->rel_fields_before_value[$key]=$this->$key;
+ if (isset($this->$def [ 'id_name']))
+ $this->rel_fields_before_value[$def [ 'id_name']]=$this->$def [ 'id_name'];
+ }
+ else
+ $this->rel_fields_before_value[$key]=null;
+ }
+ }
+ if (isset($this->relationship_fields) && is_array($this->relationship_fields))
+ {
+ foreach ($this->relationship_fields as $rel_id=>$rel_name)
+ {
+ if (isset($this->$rel_id))
+ $this->rel_fields_before_value[$rel_id]=$this->$rel_id;
+ else
+ $this->rel_fields_before_value[$rel_id]=null;
+ }
+ }
+
+ // call the custom business logic
+ $custom_logic_arguments['id'] = $id;
+ $custom_logic_arguments['encode'] = $encode;
+ $this->call_custom_logic("after_retrieve", $custom_logic_arguments);
+ unset($custom_logic_arguments);
+ return $this;
+ }
+
+ /**
+ * Sets value from fetched row into the bean.
+ *
+ * @param array $row Fetched row
+ * @todo loop through vardefs instead
+ * @internal runs into an issue when populating from field_defs for users - corrupts user prefs
+ *
+ * Internal function, do not override.
+ */
+ function populateFromRow($row)
+ {
+ $nullvalue='';
+ foreach($this->field_defs as $field=>$field_value)
+ {
+ if($field == 'user_preferences' && $this->module_dir == 'Users')
+ continue;
+ $rfield = $field; // fetch returns it in lowercase only
+ if(isset($row[$rfield]))
+ {
+ $this->$field = $row[$rfield];
+ $owner = $rfield . '_owner';
+ if(!empty($row[$owner])){
+ $this->$owner = $row[$owner];
+ }
+ }
+ else
+ {
+ $this->$field = $nullvalue;
+ }
+ }
+ }
+
+
+
+ /**
+ * Add any required joins to the list count query. The joins are required if there
+ * is a field in the $where clause that needs to be joined.
+ *
+ * @param string $query
+ * @param string $where
+ *
+ * Internal Function, do Not override.
+ */
+ function add_list_count_joins(&$query, $where)
+ {
+ $custom_join = $this->custom_fields->getJOIN();
+ if($custom_join)
+ {
+ $query .= $custom_join['join'];
+ }
+
+ }
+
+ /**
+ * Changes the select expression of the given query to be 'count(*)' so you
+ * can get the number of items the query will return. This is used to
+ * populate the upper limit on ListViews.
+ *
+ * @param string $query Select query string
+ * @return string count query
+ *
+ * Internal function, do not override.
+ */
+ function create_list_count_query($query)
+ {
+ // remove the 'order by' clause which is expected to be at the end of the query
+ $pattern = '/\sORDER BY.*/is'; // ignores the case
+ $replacement = '';
+ $query = preg_replace($pattern, $replacement, $query);
+ //handle distinct clause
+ $star = '*';
+ if(substr_count(strtolower($query), 'distinct')){
+ if (!empty($this->seed) && !empty($this->seed->table_name ))
+ $star = 'DISTINCT ' . $this->seed->table_name . '.id';
+ else
+ $star = 'DISTINCT ' . $this->table_name . '.id';
+
+ }
+
+ // change the select expression to 'count(*)'
+ $pattern = '/SELECT(.*?)(\s){1}FROM(\s){1}/is'; // ignores the case
+ $replacement = 'SELECT count(' . $star . ') c FROM ';
+
+ //if the passed query has union clause then replace all instances of the pattern.
+ //this is very rare. I have seen this happening only from projects module.
+ //in addition to this added a condition that has union clause and uses
+ //sub-selects.
+ if (strstr($query," UNION ALL ") !== false) {
+
+ //seperate out all the queries.
+ $union_qs=explode(" UNION ALL ", $query);
+ foreach ($union_qs as $key=>$union_query) {
+ $star = '*';
+ preg_match($pattern, $union_query, $matches);
+ if (!empty($matches)) {
+ if (stristr($matches[0], "distinct")) {
+ if (!empty($this->seed) && !empty($this->seed->table_name ))
+ $star = 'DISTINCT ' . $this->seed->table_name . '.id';
+ else
+ $star = 'DISTINCT ' . $this->table_name . '.id';
+ }
+ } // if
+ $replacement = 'SELECT count(' . $star . ') c FROM ';
+ $union_qs[$key] = preg_replace($pattern, $replacement, $union_query,1);
+ }
+ $modified_select_query=implode(" UNION ALL ",$union_qs);
+ } else {
+ $modified_select_query = preg_replace($pattern, $replacement, $query,1);
+ }
+
+ return $modified_select_query;
+ }
+
+ /**
+ * This function returns a paged list of the current object type. It is intended to allow for
+ * hopping back and forth through pages of data. It only retrieves what is on the current page.
+ *
+ * @internal This method must be called on a new instance. It trashes the values of all the fields in the current one.
+ * @param string $order_by
+ * @param string $where Additional where clause
+ * @param int $row_offset Optaional,default 0, starting row number
+ * @param init $limit Optional, default -1
+ * @param int $max Optional, default -1
+ * @param boolean $show_deleted Optioanl, default 0, if set to 1 system will show deleted records.
+ * @return array Fetched data.
+ *
+ * Internal function, do not override.
+ *
+ */
+ function get_list($order_by = "", $where = "", $row_offset = 0, $limit=-1, $max=-1, $show_deleted = 0, $singleSelect=false)
+ {
+ $GLOBALS['log']->debug("get_list: order_by = '$order_by' and where = '$where' and limit = '$limit'");
+ if(isset($_SESSION['show_deleted']))
+ {
+ $show_deleted = 1;
+ }
+ $order_by=$this->process_order_by($order_by, null);
+
+ if($this->bean_implements('ACL') && ACLController::requireOwner($this->module_dir, 'list') )
+ {
+ global $current_user;
+ $owner_where = $this->getOwnerWhere($current_user->id);
+
+ //rrs - because $this->getOwnerWhere() can return '' we need to be sure to check for it and
+ //handle it properly else you could get into a situation where you are create a where stmt like
+ //WHERE .. AND ''
+ if(!empty($owner_where)){
+ if(empty($where)){
+ $where = $owner_where;
+ }else{
+ $where .= ' AND '. $owner_where;
+ }
+ }
+ }
+ $query = $this->create_new_list_query($order_by, $where,array(),array(), $show_deleted,'',false,null,$singleSelect);
+ return $this->process_list_query($query, $row_offset, $limit, $max, $where);
+ }
+
+ /**
+ * Prefixes column names with this bean's table name.
+ * This call can be ignored for mysql since it does a better job than Oracle in resolving ambiguity.
+ *
+ * @param string $order_by Order by clause to be processed
+ * @param string $submodule name of the module this order by clause is for
+ * @return string Processed order by clause
+ *
+ * Internal function, do not override.
+ */
+ function process_order_by ($order_by, $submodule)
+ {
+ if (empty($order_by))
+ return $order_by;
+ $bean_queried = "";
+ //submodule is empty,this is for list object in focus
+ if (empty($submodule))
+ {
+ $bean_queried = &$this;
+ }
+ else
+ {
+ //submodule is set, so this is for subpanel, use submodule
+ $bean_queried = $submodule;
+ }
+ $elements = explode(',',$order_by);
+ foreach ($elements as $key=>$value)
+ {
+ if (strchr($value,'.') === false)
+ {
+ //value might have ascending and descending decorations
+ $list_column = explode(' ',trim($value));
+ if (isset($list_column[0]))
+ {
+ $list_column_name=trim($list_column[0]);
+ if (isset($bean_queried->field_defs[$list_column_name]))
+ {
+ $source=isset($bean_queried->field_defs[$list_column_name]['source']) ? $bean_queried->field_defs[$list_column_name]['source']:'db';
+ if (empty($bean_queried->field_defs[$list_column_name]['table']) && $source=='db')
+ {
+ $list_column[0] = $bean_queried->table_name .".".$list_column[0] ;
+ }
+ if (empty($bean_queried->field_defs[$list_column_name]['table']) && $source=='custom_fields')
+ {
+ $list_column[0] = $bean_queried->table_name ."_cstm.".$list_column[0] ;
+ }
+ $value = implode($list_column,' ');
+ // Bug 38803 - Use CONVERT() function when doing an order by on ntext, text, and image fields
+ if ( $this->db->dbType == 'mssql'
+ && $source != 'non-db'
+ && in_array(
+ $this->db->getHelper()->getColumnType($this->db->getHelper()->getFieldType($bean_queried->field_defs[$list_column_name])),
+ array('ntext','text','image')
+ )
+ ) {
+ $value = "CONVERT(varchar(500),{$list_column[0]}) {$list_column[1]}";
+ }
+ // Bug 29011 - Use TO_CHAR() function when doing an order by on a clob field
+ if ( $this->db->dbType == 'oci8'
+ && $source != 'non-db'
+ && in_array(
+ $this->db->getHelper()->getColumnType($this->db->getHelper()->getFieldType($bean_queried->field_defs[$list_column_name])),
+ array('clob')
+ )
+ ) {
+ $value = "TO_CHAR({$list_column[0]}) {$list_column[1]}";
+ }
+ }
+ else
+ {
+ $GLOBALS['log']->debug("process_order_by: ($list_column[0]) does not have a vardef entry.");
+ }
+ }
+ }
+ $elements[$key]=$value;
+ }
+ return implode($elements,',');
+
+ }
+
+
+ /**
+ * Returns a detail object like retrieving of the current object type.
+ *
+ * It is intended for use in navigation buttons on the DetailView. It will pass an offset and limit argument to the sql query.
+ * @internal This method must be called on a new instance. It overrides the values of all the fields in the current one.
+ *
+ * @param string $order_by
+ * @param string $where Additional where clause
+ * @param int $row_offset Optaional,default 0, starting row number
+ * @param init $limit Optional, default -1
+ * @param int $max Optional, default -1
+ * @param boolean $show_deleted Optioanl, default 0, if set to 1 system will show deleted records.
+ * @return array Fetched data.
+ *
+ * Internal function, do not override.
+ */
+ function get_detail($order_by = "", $where = "", $offset = 0, $row_offset = 0, $limit=-1, $max=-1, $show_deleted = 0)
+ {
+ $GLOBALS['log']->debug("get_detail: order_by = '$order_by' and where = '$where' and limit = '$limit' and offset = '$offset'");
+ if(isset($_SESSION['show_deleted']))
+ {
+ $show_deleted = 1;
+ }
+
+ if($this->bean_implements('ACL') && ACLController::requireOwner($this->module_dir, 'list') )
+ {
+ global $current_user;
+ $owner_where = $this->getOwnerWhere($current_user->id);
+
+ if(empty($where))
+ {
+ $where = $owner_where;
+ }
+ else
+ {
+ $where .= ' AND '. $owner_where;
+ }
+ }
+ $query = $this->create_new_list_query($order_by, $where,array(),array(), $show_deleted, $offset);
+
+ //Add Limit and Offset to query
+ //$query .= " LIMIT 1 OFFSET $offset";
+
+ return $this->process_detail_query($query, $row_offset, $limit, $max, $where, $offset);
+ }
+
+ /**
+ * Fetches data from all related tables.
+ *
+ * @param object $child_seed
+ * @param string $related_field_name relation to fetch data for
+ * @param string $order_by Optional, default empty
+ * @param string $where Optional, additional where clause
+ * @return array Fetched data.
+ *
+ * Internal function, do not override.
+ */
+ function get_related_list($child_seed,$related_field_name, $order_by = "", $where = "",
+ $row_offset = 0, $limit=-1, $max=-1, $show_deleted = 0)
+ {
+ global $layout_edit_mode;
+ if(isset($layout_edit_mode) && $layout_edit_mode)
+ {
+ $response = array();
+ $child_seed->assign_display_fields($child_seed->module_dir);
+ $response['list'] = array($child_seed);
+ $response['row_count'] = 1;
+ $response['next_offset'] = 0;
+ $response['previous_offset'] = 0;
+
+ return $response;
+ }
+ $GLOBALS['log']->debug("get_related_list: order_by = '$order_by' and where = '$where' and limit = '$limit'");
+ if(isset($_SESSION['show_deleted']))
+ {
+ $show_deleted = 1;
+ }
+
+ $this->load_relationship($related_field_name);
+ $query_array = $this->$related_field_name->getQuery(true);
+ $entire_where = $query_array['where'];
+ if(!empty($where))
+ {
+ if(empty($entire_where))
+ {
+ $entire_where = ' WHERE ' . $where;
+ }
+ else
+ {
+ $entire_where .= ' AND ' . $where;
+ }
+ }
+
+ $query = 'SELECT '.$child_seed->table_name.'.* ' . $query_array['from'] . ' ' . $entire_where;
+ if(!empty($order_by))
+ {
+ $query .= " ORDER BY " . $order_by;
+ }
+
+ return $child_seed->process_list_query($query, $row_offset, $limit, $max, $where);
+ }
+
+
+ protected static function build_sub_queries_for_union($subpanel_list, $subpanel_def, $parentbean, $order_by)
+ {
+ global $layout_edit_mode, $beanFiles, $beanList;
+ $subqueries = array();
+ foreach($subpanel_list as $this_subpanel)
+ {
+ if(!$this_subpanel->isDatasourceFunction() || ($this_subpanel->isDatasourceFunction()
+ && isset($this_subpanel->_instance_properties['generate_select'])
+ && $this_subpanel->_instance_properties['generate_select']==true))
+ {
+ //the custom query function must return an array with
+ if ($this_subpanel->isDatasourceFunction()) {
+ $shortcut_function_name = $this_subpanel->get_data_source_name();
+ $parameters=$this_subpanel->get_function_parameters();
+ if (!empty($parameters))
+ {
+ //if the import file function is set, then import the file to call the custom function from
+ if (is_array($parameters) && isset($parameters['import_function_file'])){
+ //this call may happen multiple times, so only require if function does not exist
+ if(!function_exists($shortcut_function_name)){
+ require_once($parameters['import_function_file']);
+ }
+ //call function from required file
+ $query_array = $shortcut_function_name($parameters);
+ }else{
+ //call function from parent bean
+ $query_array = $parentbean->$shortcut_function_name($parameters);
+ }
+ }
+ else
+ {
+ $query_array = $parentbean->$shortcut_function_name();
+ }
+ } else {
+ $related_field_name = $this_subpanel->get_data_source_name();
+ if (!$parentbean->load_relationship($related_field_name)){
+ unset ($parentbean->$related_field_name);
+ continue;
+ }
+ $query_array = $parentbean->$related_field_name->getQuery(true,array(),0,'',true, null, null, true);
+ }
+ $table_where = $this_subpanel->get_where();
+ $where_definition = $query_array['where'];
+
+ if(!empty($table_where))
+ {
+ if(empty($where_definition))
+ {
+ $where_definition = $table_where;
+ }
+ else
+ {
+ $where_definition .= ' AND ' . $table_where;
+ }
+ }
+
+ $submodulename = $this_subpanel->_instance_properties['module'];
+ $submoduleclass = $beanList[$submodulename];
+ //require_once($beanFiles[$submoduleclass]);
+ $submodule = new $submoduleclass();
+ $subwhere = $where_definition;
+
+
+
+ $subwhere = str_replace('WHERE', '', $subwhere);
+ $list_fields = $this_subpanel->get_list_fields();
+ foreach($list_fields as $list_key=>$list_field)
+ {
+ if(isset($list_field['usage']) && $list_field['usage'] == 'display_only')
+ {
+ unset($list_fields[$list_key]);
+ }
+ }
+ if(!$subpanel_def->isCollection() && isset($list_fields[$order_by]) && isset($submodule->field_defs[$order_by])&& (!isset($submodule->field_defs[$order_by]['source']) || $submodule->field_defs[$order_by]['source'] == 'db'))
+ {
+ $order_by = $submodule->table_name .'.'. $order_by;
+ }
+ $table_name = $this_subpanel->table_name;
+ $panel_name=$this_subpanel->name;
+ $params = array();
+ $params['distinct'] = $this_subpanel->distinct_query();
+
+ $params['joined_tables'] = $query_array['join_tables'];
+ $params['include_custom_fields'] = !$subpanel_def->isCollection();
+ $params['collection_list'] = $subpanel_def->get_inst_prop_value('collection_list');
+
+ $subquery = $submodule->create_new_list_query('',$subwhere ,$list_fields,$params, 0,'', true,$parentbean);
+
+ $subquery['select'] = $subquery['select']." , '$panel_name' panel_name ";
+ $subquery['from'] = $subquery['from'].$query_array['join'];
+ $subquery['query_array'] = $query_array;
+ $subquery['params'] = $params;
+
+ $subqueries[] = $subquery;
+ }
+ }
+ return $subqueries;
+ }
+
+ /**
+ * Constructs a query to fetch data for supanels and list views
+ *
+ * It constructs union queries for activities subpanel.
+ *
+ * @param Object $parentbean constructing queries for link attributes in this bean
+ * @param string $order_by Optional, order by clause
+ * @param string $sort_order Optional, sort order
+ * @param string $where Optional, additional where clause
+ *
+ * Internal Function, do not overide.
+ */
+ function get_union_related_list($parentbean, $order_by = "", $sort_order='', $where = "",
+ $row_offset = 0, $limit=-1, $max=-1, $show_deleted = 0, $subpanel_def)
+ {
+ $secondary_queries = array();
+ global $layout_edit_mode, $beanFiles, $beanList;
+
+ if(isset($_SESSION['show_deleted']))
+ {
+ $show_deleted = 1;
+ }
+ $final_query = '';
+ $final_query_rows = '';
+ $subpanel_list=array();
+ if ($subpanel_def->isCollection())
+ {
+ $subpanel_def->load_sub_subpanels();
+ $subpanel_list=$subpanel_def->sub_subpanels;
+ }
+ else
+ {
+ $subpanel_list[]=$subpanel_def;
+ }
+
+ $first = true;
+
+ //Breaking the building process into two loops. The first loop gets a list of all the sub-queries.
+ //The second loop merges the queries and forces them to select the same number of columns
+ //All columns in a sub-subpanel group must have the same aliases
+ //If the subpanel is a datasource function, it can't be a collection so we just poll that function for the and return that
+ foreach($subpanel_list as $this_subpanel)
+ {
+ if($this_subpanel->isDatasourceFunction() && empty($this_subpanel->_instance_properties['generate_select']))
+ {
+ $shortcut_function_name = $this_subpanel->get_data_source_name();
+ $parameters=$this_subpanel->get_function_parameters();
+ if (!empty($parameters))
+ {
+ //if the import file function is set, then import the file to call the custom function from
+ if (is_array($parameters) && isset($parameters['import_function_file'])){
+ //this call may happen multiple times, so only require if function does not exist
+ if(!function_exists($shortcut_function_name)){
+ require_once($parameters['import_function_file']);
+ }
+ //call function from required file
+ $tmp_final_query = $shortcut_function_name($parameters);
+ }else{
+ //call function from parent bean
+ $tmp_final_query = $parentbean->$shortcut_function_name($parameters);
+ }
+ }
+ else
+ {
+ $tmp_final_query = $parentbean->$shortcut_function_name();
+ }
+ if(!$first)
+ {
+ $final_query_rows .= ' UNION ALL ( '.$parentbean->create_list_count_query($tmp_final_query, $parameters) . ' )';
+ $final_query .= ' UNION ALL ( '.$tmp_final_query . ' )';
+ } else {
+ $final_query_rows = '(' . $parentbean->create_list_count_query($tmp_final_query, $parameters) . ')';
+ $final_query = '(' . $tmp_final_query . ')';
+ $first = false;
+ }
+ }
+ }
+ //If final_query is still empty, its time to build the sub-queries
+ if (empty($final_query))
+ {
+ $subqueries = SugarBean::build_sub_queries_for_union($subpanel_list, $subpanel_def, $parentbean, $order_by);
+ $all_fields = array();
+ foreach($subqueries as $i => $subquery)
+ {
+ $query_fields = $GLOBALS['db']->helper->getSelectFieldsFromQuery($subquery['select']);
+ foreach($query_fields as $field => $select)
+ {
+ if (!in_array($field, $all_fields))
+ $all_fields[] = $field;
+ }
+ $subqueries[$i]['query_fields'] = $query_fields;
+ }
+ $first = true;
+ //Now ensure the queries have the same set of fields in the same order.
+ foreach($subqueries as $subquery)
+ {
+ $subquery['select'] = "SELECT";
+ foreach($all_fields as $field)
+ {
+ if (!isset($subquery['query_fields'][$field]))
+ {
+ $subquery['select'] .= " ' ' $field,";
+ }
+ else
+ {
+ $subquery['select'] .= " {$subquery['query_fields'][$field]},";
+ }
+ }
+ $subquery['select'] = substr($subquery['select'], 0 , strlen($subquery['select']) - 1);
+ //Put the query into the final_query
+ $query = $subquery['select'] . " " . $subquery['from'] . " " . $subquery['where'];
+ if(!$first)
+ {
+ $query = ' UNION ALL ( '.$query . ' )';
+ $final_query_rows .= " UNION ALL ";
+ } else {
+ $query = '(' . $query . ')';
+ $first = false;
+ }
+ $query_array = $subquery['query_array'];
+ $select_position=strpos($query_array['select'],"SELECT");
+ $distinct_position=strpos($query_array['select'],"DISTINCT");
+ if ($select_position !== false && $distinct_position!= false)
+ {
+ $query_rows = "( ".substr_replace($query_array['select'],"SELECT count(",$select_position,6). ")" . $subquery['from_min'].$query_array['join']. $subquery['where'].' )';
+ }
+ else
+ {
+ //resort to default behavior.
+ $query_rows = "( SELECT count(*)". $subquery['from_min'].$query_array['join']. $subquery['where'].' )';
+ }
+ if(!empty($subquery['secondary_select']))
+ {
+
+ $subquerystring= $subquery['secondary_select'] . $subquery['secondary_from'].$query_array['join']. $subquery['where'];
+ if (!empty($subquery['secondary_where']))
+ {
+ if (empty($subquery['where']))
+ {
+ $subquerystring.=" WHERE " .$subquery['secondary_where'];
+ }
+ else
+ {
+ $subquerystring.=" AND " .$subquery['secondary_where'];
+ }
+ }
+ $secondary_queries[]=$subquerystring;
+ }
+ $final_query .= $query;
+ $final_query_rows .= $query_rows;
+ }
+ }
+
+ if(!empty($order_by))
+ {
+ $submodule = false;
+ if(!$subpanel_def->isCollection())
+ {
+ $submodulename = $subpanel_def->_instance_properties['module'];
+ $submoduleclass = $beanList[$submodulename];
+ $submodule = new $submoduleclass();
+ }
+ if(!empty($submodule) && !empty($submodule->table_name))
+ {
+ $final_query .= " ORDER BY " .$parentbean->process_order_by($order_by, $submodule);
+
+ }
+ else
+ {
+ $final_query .= " ORDER BY ". $order_by . ' ';
+ }
+ if(!empty($sort_order))
+ {
+ $final_query .= ' ' .$sort_order;
+ }
+ }
+
+
+ if(isset($layout_edit_mode) && $layout_edit_mode)
+ {
+ $response = array();
+ if(!empty($submodule))
+ {
+ $submodule->assign_display_fields($submodule->module_dir);
+ $response['list'] = array($submodule);
+ }
+ else
+ {
+ $response['list'] = array();
+ }
+ $response['parent_data'] = array();
+ $response['row_count'] = 1;
+ $response['next_offset'] = 0;
+ $response['previous_offset'] = 0;
+
+ return $response;
+ }
+
+ return $parentbean->process_union_list_query($parentbean, $final_query, $row_offset, $limit, $max, '',$subpanel_def, $final_query_rows, $secondary_queries);
+ }
+
+
+ /**
+ * Returns a full (ie non-paged) list of the current object type.
+ *
+ * @param string $order_by the order by SQL parameter. defaults to ""
+ * @param string $where where clause. defaults to ""
+ * @param boolean $check_dates. defaults to false
+ * @param int $show_deleted show deleted records. defaults to 0
+ */
+ function get_full_list($order_by = "", $where = "", $check_dates=false, $show_deleted = 0)
+ {
+ $GLOBALS['log']->debug("get_full_list: order_by = '$order_by' and where = '$where'");
+ if(isset($_SESSION['show_deleted']))
+ {
+ $show_deleted = 1;
+ }
+ $query = $this->create_new_list_query($order_by, $where,array(),array(), $show_deleted);
+ return $this->process_full_list_query($query, $check_dates);
+ }
+
+ /**
+ * Return the list query used by the list views and export button. Next generation of create_new_list_query function.
+ *
+ * Override this function to return a custom query.
+ *
+ * @param string $order_by custom order by clause
+ * @param string $where custom where clause
+ * @param array $filter Optioanal
+ * @param array $params Optional *
+ * @param int $show_deleted Optional, default 0, show deleted records is set to 1.
+ * @param string $join_type
+ * @param boolean $return_array Optional, default false, response as array
+ * @param object $parentbean creating a subquery for this bean.
+ * @param boolean $singleSelect Optional, default false.
+ * @return String select query string, optionally an array value will be returned if $return_array= true.
+ */
+ function create_new_list_query($order_by, $where,$filter=array(),$params=array(), $show_deleted = 0,$join_type='', $return_array = false,$parentbean=null, $singleSelect = false)
+ {
+ global $beanFiles, $beanList;
+ $selectedFields = array();
+ $secondarySelectedFields = array();
+ $ret_array = array();
+ $distinct = '';
+ if($this->bean_implements('ACL') && ACLController::requireOwner($this->module_dir, 'list') )
+ {
+ global $current_user;
+ $owner_where = $this->getOwnerWhere($current_user->id);
+ if(empty($where))
+ {
+ $where = $owner_where;
+ }
+ else
+ {
+ $where .= ' AND '. $owner_where;
+ }
+ }
+ if(!empty($params['distinct']))
+ {
+ $distinct = ' DISTINCT ';
+ }
+ if(empty($filter))
+ {
+ $ret_array['select'] = " SELECT $distinct $this->table_name.* ";
+ }
+ else
+ {
+ $ret_array['select'] = " SELECT $distinct $this->table_name.id ";
+ }
+ $ret_array['from'] = " FROM $this->table_name ";
+ $ret_array['from_min'] = $ret_array['from'];
+ $ret_array['secondary_from'] = $ret_array['from'] ;
+ $ret_array['where'] = '';
+ $ret_array['order_by'] = '';
+ //secondary selects are selects that need to be run after the primarty query to retrieve additional info on main
+ if($singleSelect)
+ {
+ $ret_array['secondary_select']=& $ret_array['select'];
+ $ret_array['secondary_from'] = & $ret_array['from'];
+ }
+ else
+ {
+ $ret_array['secondary_select'] = '';
+ }
+ $custom_join = false;
+ if((!isset($params['include_custom_fields']) || $params['include_custom_fields']) && isset($this->custom_fields))
+ {
+
+ $custom_join = $this->custom_fields->getJOIN( empty($filter)? true: $filter );
+ if($custom_join)
+ {
+ $ret_array['select'] .= ' ' .$custom_join['select'];
+ }
+ }
+ if($custom_join)
+ {
+ $ret_array['from'] .= ' ' . $custom_join['join'];
+ }
+ $jtcount = 0;
+ //LOOP AROUND FOR FIXIN VARDEF ISSUES
+ require('include/VarDefHandler/listvardefoverride.php');
+ $joined_tables = array();
+ if(isset($params['joined_tables']))
+ {
+ foreach($params['joined_tables'] as $table)
+ {
+ $joined_tables[$table] = 1;
+ }
+ }
+
+ if(!empty($filter))
+ {
+ $filterKeys = array_keys($filter);
+ if(is_numeric($filterKeys[0]))
+ {
+ $fields = array();
+ foreach($filter as $field)
+ {
+ $field = strtolower($field);
+ //remove out id field so we don't duplicate it
+ if ( $field == 'id' && !empty($filter) ) {
+ continue;
+ }
+ if(isset($this->field_defs[$field]))
+ {
+ $fields[$field]= $this->field_defs[$field];
+ }
+ else
+ {
+ $fields[$field] = array('force_exists'=>true);
+ }
+ }
+ }else{
+ $fields = $filter;
+ }
+ }
+ else
+ {
+ $fields = $this->field_defs;
+ }
+
+ $used_join_key = array();
+
+ foreach($fields as $field=>$value)
+ {
+ //alias is used to alias field names
+ $alias='';
+ if (isset($value['alias']))
+ {
+ $alias =' as ' . $value['alias'] . ' ';
+ }
+
+ if(empty($this->field_defs[$field]) || !empty($value['force_blank']) )
+ {
+ if(!empty($filter) && isset($filter[$field]['force_exists']) && $filter[$field]['force_exists'])
+ {
+ if ( isset($filter[$field]['force_default']) )
+ $ret_array['select'] .= ", {$filter[$field]['force_default']} $field ";
+ else
+ //spaces are a fix for length issue problem with unions. The union only returns the maximum number of characters from the first select statemtn.
+ $ret_array['select'] .= ", ' ' $field ";
+ }
+ continue;
+ }
+ else
+ {
+ $data = $this->field_defs[$field];
+ }
+
+ //ignore fields that are a part of the collection and a field has been removed as a result of
+ //layout customization.. this happens in subpanel customizations, use case, from the contacts subpanel
+ //in opportunities module remove the contact_role/opportunity_role field.
+ $process_field=true;
+ if (isset($data['relationship_fields']) and !empty($data['relationship_fields']))
+ {
+ foreach ($data['relationship_fields'] as $field_name)
+ {
+ if (!isset($fields[$field_name]))
+ {
+ $process_field=false;
+ }
+ }
+ }
+ if (!$process_field)
+ {
+ continue;
+ }
+
+ if( (!isset($data['source']) || $data['source'] == 'db') && (!empty($alias) || !empty($filter) ))
+ {
+ $ret_array['select'] .= ", $this->table_name.$field $alias";
+ $selectedFields["$this->table_name.$field"] = true;
+ }
+
+
+
+ if($data['type'] != 'relate' && isset($data['db_concat_fields']))
+ {
+ $ret_array['select'] .= ", " . db_concat($this->table_name, $data['db_concat_fields']) . " as $field";
+ $selectedFields[db_concat($this->table_name, $data['db_concat_fields'])] = true;
+ }
+ //Custom relate field or relate fields built in module builder which have no link field associated.
+ if ($data['type'] == 'relate' && (isset($data['custom_module']) || isset($data['ext2']))) {
+ $joinTableAlias = 'jt' . $jtcount;
+ $relateJoinInfo = $this->custom_fields->getRelateJoin($data, $joinTableAlias);
+ $ret_array['select'] .= $relateJoinInfo['select'];
+ $ret_array['from'] .= $relateJoinInfo['from'];
+ //Replace any references to the relationship in the where clause with the new alias
+ //If the link isn't set, assume that search used the local table for the field
+ $searchTable = isset($data['link']) ? $relateJoinInfo['rel_table'] : $this->table_name;
+ $field_name = $relateJoinInfo['rel_table'] . '.' . !empty($data['name'])?$data['name']:'name';
+ $where = preg_replace('/(^|[\s(])' . $field_name . '/' , '${1}' . $relateJoinInfo['name_field'], $where);
+ $jtcount++;
+ }
+ //Parent Field
+ if ($data['type'] == 'parent') {
+ //See if we need to join anything by inspecting the where clause
+ $match = preg_match('/(^|[\s(])parent_(\w+)_(\w+)\.name/', $where, $matches);
+ if ($match) {
+ $joinTableAlias = 'jt' . $jtcount;
+ $joinModule = $matches[2];
+ $joinTable = $matches[3];
+ $localTable = $this->table_name;
+ if (!empty($data['custom_module'])) {
+ $localTable .= '_cstm';
+ }
+ global $beanFiles, $beanList, $module;
+ require_once($beanFiles[$beanList[$joinModule]]);
+ $rel_mod = new $beanList[$joinModule]();
+ $nameField = "$joinTableAlias.name";
+ if (isset($rel_mod->field_defs['name']))
+ {
+ $name_field_def = $rel_mod->field_defs['name'];
+ if(isset($name_field_def['db_concat_fields']))
+ {
+ $nameField = db_concat($joinTableAlias, $name_field_def['db_concat_fields']);
+ }
+ }
+ $ret_array['select'] .= ", $nameField {$data['name']} ";
+ $ret_array['from'] .= " LEFT JOIN $joinTable $joinTableAlias
+ ON $localTable.{$data['id_name']} = $joinTableAlias.id";
+ //Replace any references to the relationship in the where clause with the new alias
+ $where = preg_replace('/(^|[\s(])parent_' . $joinModule . '_' . $joinTable . '\.name/', '${1}' . $nameField, $where);
+ $jtcount++;
+ }
+ }
+ if($data['type'] == 'relate' && isset($data['link']))
+ {
+ $this->load_relationship($data['link']);
+ if(!empty($this->$data['link']))
+ {
+ $params = array();
+ if(empty($join_type))
+ {
+ $params['join_type'] = ' LEFT JOIN ';
+ }
+ else
+ {
+ $params['join_type'] = $join_type;
+ }
+ if(isset($data['join_name']))
+ {
+ $params['join_table_alias'] = $data['join_name'];
+ }
+ else
+ {
+ $params['join_table_alias'] = 'jt' . $jtcount;
+
+ }
+ if(isset($data['join_link_name']))
+ {
+ $params['join_table_link_alias'] = $data['join_link_name'];
+ }
+ else
+ {
+ $params['join_table_link_alias'] = 'jtl' . $jtcount;
+ }
+ $join_primary = !isset($data['join_primary']) || $data['join_primary'];
+
+ $join = $this->$data['link']->getJoin($params, true);
+ $used_join_key[] = $join['rel_key'];
+ $rel_module = $this->$data['link']->getRelatedModuleName();
+ $table_joined = !empty($joined_tables[$params['join_table_alias']]) || (!empty($joined_tables[$params['join_table_link_alias']]) && isset($data['link_type']) && $data['link_type'] == 'relationship_info');
+
+ //if rnanme is set to 'name', and bean files exist, then check if field should be a concatenated name
+ global $beanFiles, $beanList;
+ if($data['rname'] && !empty($beanFiles[$beanList[$rel_module]])) {
+
+ //create an instance of the related bean
+ require_once($beanFiles[$beanList[$rel_module]]);
+ $rel_mod = new $beanList[$rel_module]();
+ //if bean has first and last name fields, then name should be concatenated
+ if(isset($rel_mod->field_name_map['first_name']) && isset($rel_mod->field_name_map['last_name'])){
+ $data['db_concat_fields'] = array(0=>'first_name', 1=>'last_name');
+ }
+ }
+
+
+ if($join['type'] == 'many-to-many')
+ {
+ if(empty($ret_array['secondary_select']))
+ {
+ $ret_array['secondary_select'] = " SELECT $this->table_name.id ref_id ";
+
+ if(!empty($beanFiles[$beanList[$rel_module]]) && $join_primary)
+ {
+ require_once($beanFiles[$beanList[$rel_module]]);
+ $rel_mod = new $beanList[$rel_module]();
+ if(isset($rel_mod->field_defs['assigned_user_id']))
+ {
+ $ret_array['secondary_select'].= " , ". $params['join_table_alias'] . ".assigned_user_id {$field}_owner, '$rel_module' {$field}_mod";
+
+ }
+ else
+ {
+ if(isset($rel_mod->field_defs['created_by']))
+ {
+ $ret_array['secondary_select'].= " , ". $params['join_table_alias'] . ".created_by {$field}_owner , '$rel_module' {$field}_mod";
+
+ }
+ }
+
+
+ }
+ }
+
+
+
+ if(isset($data['db_concat_fields']))
+ {
+ $ret_array['secondary_select'] .= ' , ' . db_concat($params['join_table_alias'], $data['db_concat_fields']) . ' ' . $field;
+ }
+ else
+ {
+ if(!isset($data['relationship_fields']))
+ {
+ $ret_array['secondary_select'] .= ' , ' . $params['join_table_alias'] . '.' . $data['rname'] . ' ' . $field;
+ }
+ }
+ if(!$singleSelect)
+ {
+ $ret_array['select'] .= ", ' ' $field ";
+ $ret_array['select'] .= ", ' ' " . $join['rel_key'] . ' ';
+ }
+ $count_used =0;
+ if($this->db->dbType != 'mysql') {//bug 26801, these codes are just used to duplicate rel_key in the select sql, or it will throw error in MSSQL and Oracle.
+ foreach($used_join_key as $used_key) {
+ if($used_key == $join['rel_key']) $count_used++;
+ }
+ }
+ if($count_used <= 1) {//27416, the $ret_array['secondary_select'] should always generate, regardless the dbtype
+ $ret_array['secondary_select'] .= ', ' . $params['join_table_link_alias'].'.'. $join['rel_key'] .' ' . $join['rel_key'];
+ }
+ if(isset($data['relationship_fields']))
+ {
+ foreach($data['relationship_fields'] as $r_name=>$alias_name)
+ {
+ if(!empty( $secondarySelectedFields[$alias_name]))continue;
+ $ret_array['secondary_select'] .= ', ' . $params['join_table_link_alias'].'.'. $r_name .' ' . $alias_name;
+ $secondarySelectedFields[$alias_name] = true;
+ }
+ }
+ if(!$table_joined)
+ {
+ $ret_array['secondary_from'] .= ' ' . $join['join']. ' AND ' . $params['join_table_alias'].'.deleted=0';
+ if (isset($data['link_type']) && $data['link_type'] == 'relationship_info' && ($parentbean instanceOf SugarBean))
+ {
+ $ret_array['secondary_where'] = $params['join_table_link_alias'] . '.' . $join['rel_key']. "='" .$parentbean->id . "'";
+ }
+ }
+ }
+ else
+ {
+ if(isset($data['db_concat_fields']))
+ {
+ $ret_array['select'] .= ' , ' . db_concat($params['join_table_alias'], $data['db_concat_fields']) . ' ' . $field;
+ }
+ else
+ {
+ $ret_array['select'] .= ' , ' . $params['join_table_alias'] . '.' . $data['rname'] . ' ' . $field;
+ }
+ if(isset($data['additionalFields'])){
+ foreach($data['additionalFields'] as $k=>$v){
+ $ret_array['select'] .= ' , ' . $params['join_table_alias'] . '.' . $k . ' ' . $v;
+ }
+ }
+ if(!$table_joined)
+ {
+ $ret_array['from'] .= ' ' . $join['join']. ' AND ' . $params['join_table_alias'].'.deleted=0';
+ if(!empty($beanList[$rel_module]) && !empty($beanFiles[$beanList[$rel_module]]))
+ {
+ require_once($beanFiles[$beanList[$rel_module]]);
+ $rel_mod = new $beanList[$rel_module]();
+ if(isset($value['target_record_key']) && !empty($filter))
+ {
+ $selectedFields[$this->table_name.'.'.$value['target_record_key']] = true;
+ $ret_array['select'] .= " , $this->table_name.{$value['target_record_key']} ";
+ }
+ if(isset($rel_mod->field_defs['assigned_user_id']))
+ {
+ $ret_array['select'] .= ' , ' .$params['join_table_alias'] . '.assigned_user_id ' . $field . '_owner';
+ }
+ else
+ {
+ $ret_array['select'] .= ' , ' .$params['join_table_alias'] . '.created_by ' . $field . '_owner';
+ }
+ $ret_array['select'] .= " , '".$rel_module ."' " . $field . '_mod';
+ }
+ }
+ }
+ //Replace references to this table in the where clause with the new alias
+ $join_table_name = $this->$data['link']->getRelatedTableName();
+ // To fix SOAP stuff where we are trying to retrieve all the accounts data where accounts.id = ..
+ // and this code changes accounts to jt4 as there is a self join with the accounts table.
+ //Martin fix #27494
+ if(isset($data['db_concat_fields'])){
+ $buildWhere = false;
+ if(in_array('first_name', $data['db_concat_fields']) && in_array('last_name', $data['db_concat_fields']))
+ {
+ $exp = '/\(\s*?'.$data['name'].'.*?\%\'\s*?\)/';
+ if(preg_match($exp, $where, $matches))
+ {
+ $search_expression = $matches[0];
+ //Create three search conditions - first + last, first, last
+ $first_name_search = str_replace($data['name'], $params['join_table_alias'] . '.first_name', $search_expression);
+ $last_name_search = str_replace($data['name'], $params['join_table_alias'] . '.last_name', $search_expression);
+ $full_name_search = str_replace($data['name'], db_concat($params['join_table_alias'], $data['db_concat_fields']), $search_expression);
+ $buildWhere = true;
+ $where = str_replace($search_expression, '(' . $full_name_search . ' OR ' . $first_name_search . ' OR ' . $last_name_search . ')', $where);
+ }
+ }
+
+ if(!$buildWhere)
+ {
+ $db_field = db_concat($params['join_table_alias'], $data['db_concat_fields']);
+ $where = preg_replace('/'.$data['name'].'/', $db_field, $where);
+ }
+ }else{
+ $where = preg_replace('/(^|[\s(])' . $data['name'] . '/', '${1}' . $params['join_table_alias'] . '.'.$data['rname'], $where);
+ }
+ if(!$table_joined)
+ {
+ $joined_tables[$params['join_table_alias']]=1;
+ $joined_tables[$params['join_table_link_alias']]=1;
+ }
+
+ $jtcount++;
+ }
+ }
+ }
+ if(!empty($filter))
+ {
+ if(isset($this->field_defs['assigned_user_id']) && empty($selectedFields[$this->table_name.'.assigned_user_id']))
+ {
+ $ret_array['select'] .= ", $this->table_name.assigned_user_id ";
+ }
+ else if(isset($this->field_defs['created_by']) && empty($selectedFields[$this->table_name.'.created_by']))
+ {
+ $ret_array['select'] .= ", $this->table_name.created_by ";
+ }
+ if(isset($this->field_defs['system_id']) && empty($selectedFields[$this->table_name.'.system_id']))
+ {
+ $ret_array['select'] .= ", $this->table_name.system_id ";
+ }
+
+ }
+ $where_auto = '1=1';
+ if($show_deleted == 0)
+ {
+ $where_auto = "$this->table_name.deleted=0";
+ }else if($show_deleted == 1)
+ {
+ $where_auto = "$this->table_name.deleted=1";
+ }
+ if($where != "")
+ $ret_array['where'] = " where ($where) AND $where_auto";
+ else
+ $ret_array['where'] = " where $where_auto";
+ if(!empty($order_by))
+ {
+ //make call to process the order by clause
+ $ret_array['order_by'] = " ORDER BY ". $this->process_order_by($order_by, null);
+ }
+ if($singleSelect)
+ {
+ unset($ret_array['secondary_where']);
+ unset($ret_array['secondary_from']);
+ unset($ret_array['secondary_select']);
+ }
+
+ if($return_array)
+ {
+ return $ret_array;
+ }
+
+ return $ret_array['select'] . $ret_array['from'] . $ret_array['where']. $ret_array['order_by'];
+
+
+
+
+ }
+ /**
+ * Returns parent record data for objects that store relationship information
+ *
+ * @param array $type_info
+ *
+ * Interal function, do not override.
+ */
+ function retrieve_parent_fields($type_info)
+ {
+ $queries = array();
+ global $beanList, $beanFiles;
+ $templates = array();
+ $parent_child_map = array();
+ foreach($type_info as $children_info)
+ {
+ foreach($children_info as $child_info)
+ {
+ if($child_info['type'] == 'parent')
+ {
+ if(empty($templates[$child_info['parent_type']]))
+ {
+ //Test emails will have an invalid parent_type, don't try to load the non-existant parent bean
+ if ($child_info['parent_type'] == 'test') {
+ continue;
+ }
+ $class = $beanList[$child_info['parent_type']];
+ // Added to avoid error below; just silently fail and write message to log
+ if ( empty($beanFiles[$class]) ) {
+ $GLOBALS['log']->error($this->object_name.'::retrieve_parent_fields() - cannot load class "'.$class.'", skip loading.');
+ continue;
+ }
+ require_once($beanFiles[$class]);
+ $templates[$child_info['parent_type']] = new $class();
+ }
+
+ if(empty($queries[$child_info['parent_type']]))
+ {
+ $queries[$child_info['parent_type']] = "SELECT id ";
+ $field_def = $templates[$child_info['parent_type']]->field_defs['name'];
+ if(isset($field_def['db_concat_fields']))
+ {
+ $queries[$child_info['parent_type']] .= ' , ' . db_concat($templates[$child_info['parent_type']]->table_name, $field_def['db_concat_fields']) . ' parent_name';
+ }
+ else
+ {
+ $queries[$child_info['parent_type']] .= ' , name parent_name';
+ }
+ if(isset($templates[$child_info['parent_type']]->field_defs['assigned_user_id']))
+ {
+ $queries[$child_info['parent_type']] .= ", assigned_user_id parent_name_owner , '{$child_info['parent_type']}' parent_name_mod";;
+ }else if(isset($templates[$child_info['parent_type']]->field_defs['created_by']))
+ {
+ $queries[$child_info['parent_type']] .= ", created_by parent_name_owner, '{$child_info['parent_type']}' parent_name_mod";
+ }
+ $queries[$child_info['parent_type']] .= " FROM " . $templates[$child_info['parent_type']]->table_name ." WHERE id IN ('{$child_info['parent_id']}'";
+ }
+ else
+ {
+ if(empty($parent_child_map[$child_info['parent_id']]))
+ $queries[$child_info['parent_type']] .= " ,'{$child_info['parent_id']}'";
+ }
+ $parent_child_map[$child_info['parent_id']][] = $child_info['child_id'];
+ }
+ }
+ }
+ $results = array();
+ foreach($queries as $query)
+ {
+ $result = $this->db->query($query . ')');
+ while($row = $this->db->fetchByAssoc($result))
+ {
+ $results[$row['id']] = $row;
+ }
+ }
+
+ $child_results = array();
+ foreach($parent_child_map as $parent_key=>$parent_child)
+ {
+ foreach($parent_child as $child)
+ {
+ if(isset( $results[$parent_key]))
+ {
+ $child_results[$child] = $results[$parent_key];
+ }
+ }
+ }
+ return $child_results;
+ }
+
+ /**
+ * Processes the list query and return fetched row.
+ *
+ * Internal function, do not override.
+ * @param string $query select query to be processed.
+ * @param int $row_offset starting position
+ * @param int $limit Optioanl, default -1
+ * @param int $max_per_page Optional, default -1
+ * @param string $where Optional, additional filter criteria.
+ * @return array Fetched data
+ */
+ function process_list_query($query, $row_offset, $limit= -1, $max_per_page = -1, $where = '')
+ {
+ global $sugar_config;
+ $db = &DBManagerFactory::getInstance('listviews');
+ /**
+ * if the row_offset is set to 'end' go to the end of the list
+ */
+ $toEnd = strval($row_offset) == 'end';
+ $GLOBALS['log']->debug("process_list_query: ".$query);
+ if($max_per_page == -1)
+ {
+ $max_per_page = $sugar_config['list_max_entries_per_page'];
+ }
+ // Check to see if we have a count query available.
+ if(empty($sugar_config['disable_count_query']) || $toEnd)
+ {
+ $count_query = $this->create_list_count_query($query);
+ if(!empty($count_query) && (empty($limit) || $limit == -1))
+ {
+ // We have a count query. Run it and get the results.
+ $result = $db->query($count_query, true, "Error running count query for $this->object_name List: ");
+ $assoc = $db->fetchByAssoc($result);
+ if(!empty($assoc['c']))
+ {
+ $rows_found = $assoc['c'];
+ $limit = $sugar_config['list_max_entries_per_page'];
+ }
+ if( $toEnd)
+ {
+ $row_offset = (floor(($rows_found -1) / $limit)) * $limit;
+ }
+ }
+ }
+ else
+ {
+ if((empty($limit) || $limit == -1))
+ {
+ $limit = $max_per_page + 1;
+ $max_per_page = $limit;
+ }
+ }
+
+ if(empty($row_offset))
+ {
+ $row_offset = 0;
+ }
+ if(!empty($limit) && $limit != -1 && $limit != -99)
+ {
+ $result = $db->limitQuery($query, $row_offset, $limit,true,"Error retrieving $this->object_name list: ");
+ }
+ else
+ {
+ $result = $db->query($query,true,"Error retrieving $this->object_name list: ");
+ }
+
+ $list = Array();
+
+ if(empty($rows_found))
+ {
+ $rows_found = $db->getRowCount($result);
+ }
+
+ $GLOBALS['log']->debug("Found $rows_found ".$this->object_name."s");
+
+ $previous_offset = $row_offset - $max_per_page;
+ $next_offset = $row_offset + $max_per_page;
+
+ $class = get_class($this);
+ if($rows_found != 0 or $db->dbType != 'mysql')
+ {
+ //todo Bug? we should remove the magic number -99
+ //use -99 to return all
+ $index = $row_offset;
+ while ($max_per_page == -99 || ($index < $row_offset + $max_per_page))
+ {
+
+ if(!empty($sugar_config['disable_count_query']))
+ {
+ $row = $db->fetchByAssoc($result);
+ }
+ else
+ {
+ $row = $db->fetchByAssoc($result, $index);
+ }
+ if (empty($row))
+ {
+ break;
+ }
+
+ //instantiate a new class each time. This is because php5 passes
+ //by reference by default so if we continually update $this, we will
+ //at the end have a list of all the same objects
+ $temp = new $class();
+
+ foreach($this->field_defs as $field=>$value)
+ {
+ if (isset($row[$field]))
+ {
+ $temp->$field = $row[$field];
+ $owner_field = $field . '_owner';
+ if(isset($row[$owner_field]))
+ {
+ $temp->$owner_field = $row[$owner_field];
+ }
+
+ $GLOBALS['log']->debug("$temp->object_name({$row['id']}): ".$field." = ".$temp->$field);
+ }else if (isset($row[$this->table_name .'.'.$field]))
+ {
+ $temp->$field = $row[$this->table_name .'.'.$field];
+ }
+ else
+ {
+ $temp->$field = "";
+ }
+ }
+
+ $temp->check_date_relationships_load();
+ $temp->fill_in_additional_list_fields();
+ if($temp->hasCustomFields()) $temp->custom_fields->fill_relationships();
+ $temp->call_custom_logic("process_record");
+
+ $list[] = $temp;
+
+ $index++;
+ }
+ }
+ if(!empty($sugar_config['disable_count_query']) && !empty($limit))
+ {
+
+ $rows_found = $row_offset + count($list);
+
+ unset($list[$limit - 1]);
+ if(!$toEnd)
+ {
+ $next_offset--;
+ $previous_offset++;
+ }
+ }
+ $response = Array();
+ $response['list'] = $list;
+ $response['row_count'] = $rows_found;
+ $response['next_offset'] = $next_offset;
+ $response['previous_offset'] = $previous_offset;
+ $response['current_offset'] = $row_offset ;
+ return $response;
+ }
+
+ /**
+ * Returns the number of rows that the given SQL query should produce
+ *
+ * Internal function, do not override.
+ * @param string $query valid select query
+ * @param boolean $is_count_query Optional, Default false, set to true if passed query is a count query.
+ * @return int count of rows found
+ */
+ function _get_num_rows_in_query($query, $is_count_query=false)
+ {
+ $num_rows_in_query = 0;
+ if (!$is_count_query)
+ {
+ $count_query = SugarBean::create_list_count_query($query);
+ } else
+ $count_query=$query;
+
+ $result = $this->db->query($count_query, true, "Error running count query for $this->object_name List: ");
+ $row_num = 0;
+ $row = $this->db->fetchByAssoc($result, $row_num);
+ while($row)
+ {
+ $num_rows_in_query += current($row);
+ $row_num++;
+ $row = $this->db->fetchByAssoc($result, $row_num);
+ }
+
+ return $num_rows_in_query;
+ }
+
+ /**
+ * Applies pagination window to union queries used by list view and subpanels,
+ * executes the query and returns fetched data.
+ *
+ * Internal function, do not override.
+ * @param object $parent_bean
+ * @param string $query query to be processed.
+ * @param int $row_offset
+ * @param int $limit optional, default -1
+ * @param int $max_per_page Optional, default -1
+ * @param string $where Custom where clause.
+ * @param array $subpanel_def definition of sub-panel to be processed
+ * @param string $query_row_count
+ * @param array $seconday_queries
+ * @return array Fetched data.
+ */
+ function process_union_list_query($parent_bean, $query,
+ $row_offset, $limit= -1, $max_per_page = -1, $where = '', $subpanel_def, $query_row_count='', $secondary_queries = array())
+
+ {
+ $db = &DBManagerFactory::getInstance('listviews');
+ /**
+ * if the row_offset is set to 'end' go to the end of the list
+ */
+ $toEnd = strval($row_offset) == 'end';
+ global $sugar_config;
+ $use_count_query=false;
+ $processing_collection=$subpanel_def->isCollection();
+
+ $GLOBALS['log']->debug("process_list_query: ".$query);
+ if($max_per_page == -1)
+ {
+ $max_per_page = $sugar_config['list_max_entries_per_subpanel'];
+ }
+ if(empty($query_row_count))
+ {
+ $query_row_count = $query;
+ }
+ $distinct_position=strpos($query_row_count,"DISTINCT");
+
+ if ($distinct_position!= false)
+ {
+ $use_count_query=true;
+ }
+ $performSecondQuery = true;
+ if(empty($sugar_config['disable_count_query']) || $toEnd)
+ {
+ $rows_found = $this->_get_num_rows_in_query($query_row_count,$use_count_query);
+ if($rows_found < 1)
+ {
+ $performSecondQuery = false;
+ }
+ if(!empty($rows_found) && (empty($limit) || $limit == -1))
+ {
+ $limit = $sugar_config['list_max_entries_per_subpanel'];
+ }
+ if( $toEnd)
+ {
+ $row_offset = (floor(($rows_found -1) / $limit)) * $limit;
+
+ }
+ }
+ else
+ {
+ if((empty($limit) || $limit == -1))
+ {
+ $limit = $max_per_page + 1;
+ $max_per_page = $limit;
+ }
+ }
+
+ if(empty($row_offset))
+ {
+ $row_offset = 0;
+ }
+ $list = array();
+ $previous_offset = $row_offset - $max_per_page;
+ $next_offset = $row_offset + $max_per_page;
+
+ if($performSecondQuery)
+ {
+ if(!empty($limit) && $limit != -1 && $limit != -99)
+ {
+ $result = $db->limitQuery($query, $row_offset, $limit,true,"Error retrieving $parent_bean->object_name list: ");
+ }
+ else
+ {
+ $result = $db->query($query,true,"Error retrieving $this->object_name list: ");
+ }
+ if(empty($rows_found))
+ {
+ $rows_found = $db->getRowCount($result);
+ }
+
+ $GLOBALS['log']->debug("Found $rows_found ".$parent_bean->object_name."s");
+ if($rows_found != 0 or $db->dbType != 'mysql')
+ {
+ //use -99 to return all
+
+ // get the current row
+ $index = $row_offset;
+ if(!empty($sugar_config['disable_count_query']))
+ {
+ $row = $db->fetchByAssoc($result);
+ }
+ else
+ {
+ $row = $db->fetchByAssoc($result, $index);
+ }
+
+ $post_retrieve = array();
+ $isFirstTime = true;
+ while($row)
+ {
+ $function_fields = array();
+ if(($index < $row_offset + $max_per_page || $max_per_page == -99) or ($db->dbType != 'mysql'))
+ {
+ if ($processing_collection)
+ {
+ $current_bean =$subpanel_def->sub_subpanels[$row['panel_name']]->template_instance;
+ if(!$isFirstTime)
+ {
+ $class = get_class($subpanel_def->sub_subpanels[$row['panel_name']]->template_instance);
+ $current_bean = new $class();
+ }
+ } else {
+ $current_bean=$subpanel_def->template_instance;
+ if(!$isFirstTime)
+ {
+ $class = get_class($subpanel_def->template_instance);
+ $current_bean = new $class();
+ }
+ }
+ $isFirstTime = false;
+ //set the panel name in the bean instance.
+ if (isset($row['panel_name']))
+ {
+ $current_bean->panel_name=$row['panel_name'];
+ }
+ foreach($current_bean->field_defs as $field=>$value)
+ {
+
+ if (isset($row[$field]))
+ {
+ $current_bean->$field = $row[$field];
+ unset($row[$field]);
+ }
+ else if (isset($row[$this->table_name .'.'.$field]))
+ {
+ $current_bean->$field = $row[$current_bean->table_name .'.'.$field];
+ unset($row[$current_bean->table_name .'.'.$field]);
+ }
+ else
+ {
+ $current_bean->$field = "";
+ unset($row[$field]);
+ }
+ if(isset($value['source']) && $value['source'] == 'function')
+ {
+ $function_fields[]=$field;
+ }
+ }
+ foreach($row as $key=>$value)
+ {
+ $current_bean->$key = $value;
+ }
+ foreach($function_fields as $function_field)
+ {
+ $value = $current_bean->field_defs[$function_field];
+ $can_execute = true;
+ $execute_params = array();
+ $execute_function = array();
+ if(!empty($value['function_class']))
+ {
+ $execute_function[] = $value['function_class'];
+ $execute_function[] = $value['function_name'];
+ }
+ else
+ {
+ $execute_function = $value['function_name'];
+ }
+ foreach($value['function_params'] as $param )
+ {
+ if (empty($value['function_params_source']) or $value['function_params_source']=='parent')
+ {
+ if(empty($this->$param))
+ {
+ $can_execute = false;
+ }
+ else
+ {
+ $execute_params[] = $this->$param;
+ }
+ } else if ($value['function_params_source']=='this')
+ {
+ if(empty($current_bean->$param))
+ {
+ $can_execute = false;
+ }
+ else
+ {
+ $execute_params[] = $current_bean->$param;
+ }
+ }
+ else
+ {
+ $can_execute = false;
+ }
+
+ }
+ if($can_execute)
+ {
+ if(!empty($value['function_require']))
+ {
+ require_once($value['function_require']);
+ }
+ $current_bean->$function_field = call_user_func_array($execute_function, $execute_params);
+ }
+ }
+ if(!empty($current_bean->parent_type) && !empty($current_bean->parent_id))
+ {
+ if(!isset($post_retrieve[$current_bean->parent_type]))
+ {
+ $post_retrieve[$current_bean->parent_type] = array();
+ }
+ $post_retrieve[$current_bean->parent_type][] = array('child_id'=>$current_bean->id, 'parent_id'=> $current_bean->parent_id, 'parent_type'=>$current_bean->parent_type, 'type'=>'parent');
+ }
+ //$current_bean->fill_in_additional_list_fields();
+ $list[$current_bean->id] = $current_bean;
+ }
+ // go to the next row
+ $index++;
+ $row = $db->fetchByAssoc($result, $index);
+ }
+ }
+ //now handle retrieving many-to-many relationships
+ if(!empty($list))
+ {
+ foreach($secondary_queries as $query2)
+ {
+ $result2 = $db->query($query2);
+
+ $row2 = $db->fetchByAssoc($result2);
+ while($row2)
+ {
+ $id_ref = $row2['ref_id'];
+
+ if(isset($list[$id_ref]))
+ {
+ foreach($row2 as $r2key=>$r2value)
+ {
+ if($r2key != 'ref_id')
+ {
+ $list[$id_ref]->$r2key = $r2value;
+ }
+ }
+ }
+ $row2 = $db->fetchByAssoc($result2);
+ }
+ }
+
+ }
+
+ if(isset($post_retrieve))
+ {
+ $parent_fields = $this->retrieve_parent_fields($post_retrieve);
+ }
+ else
+ {
+ $parent_fields = array();
+ }
+ if(!empty($sugar_config['disable_count_query']) && !empty($limit))
+ {
+ $rows_found = $row_offset + count($list);
+ if(count($list) >= $limit)
+ {
+ array_pop($list);
+ }
+ if(!$toEnd)
+ {
+ $next_offset--;
+ $previous_offset++;
+ }
+ }
+ }
+ else
+ {
+ $row_found = 0;
+ $parent_fields = array();
+ }
+ $response = array();
+ $response['list'] = $list;
+ $response['parent_data'] = $parent_fields;
+ $response['row_count'] = $rows_found;
+ $response['next_offset'] = $next_offset;
+ $response['previous_offset'] = $previous_offset;
+ $response['current_offset'] = $row_offset ;
+ $response['query'] = $query;
+
+ return $response;
+ }
+
+ /**
+ * Applies pagination window to select queries used by detail view,
+ * executes the query and returns fetched data.
+ *
+ * Internal function, do not override.
+ * @param string $query query to be processed.
+ * @param int $row_offset
+ * @param int $limit optional, default -1
+ * @param int $max_per_page Optional, default -1
+ * @param string $where Custom where clause.
+ * @param int $offset Optional, default 0
+ * @return array Fetched data.
+ *
+ */
+ function process_detail_query($query, $row_offset, $limit= -1, $max_per_page = -1, $where = '', $offset = 0)
+ {
+ global $sugar_config;
+ $GLOBALS['log']->debug("process_list_query: ".$query);
+ if($max_per_page == -1)
+ {
+ $max_per_page = $sugar_config['list_max_entries_per_page'];
+ }
+
+ // Check to see if we have a count query available.
+ $count_query = $this->create_list_count_query($query);
+
+ if(!empty($count_query) && (empty($limit) || $limit == -1))
+ {
+ // We have a count query. Run it and get the results.
+ $result = $this->db->query($count_query, true, "Error running count query for $this->object_name List: ");
+ $assoc = $this->db->fetchByAssoc($result);
+ if(!empty($assoc['c']))
+ {
+ $total_rows = $assoc['c'];
+ }
+ }
+
+ if(empty($row_offset))
+ {
+ $row_offset = 0;
+ }
+
+ $result = $this->db->limitQuery($query, $offset, 1, true,"Error retrieving $this->object_name list: ");
+
+ $rows_found = $this->db->getRowCount($result);
+
+ $GLOBALS['log']->debug("Found $rows_found ".$this->object_name."s");
+
+ $previous_offset = $row_offset - $max_per_page;
+ $next_offset = $row_offset + $max_per_page;
+
+ if($rows_found != 0 or $this->db->dbType != 'mysql')
+ {
+ $index = 0;
+ $row = $this->db->fetchByAssoc($result, $index);
+ $this->retrieve($row['id']);
+ }
+
+ $response = Array();
+ $response['bean'] = $this;
+ if (empty($total_rows))
+ $total_rows=0;
+ $response['row_count'] = $total_rows;
+ $response['next_offset'] = $next_offset;
+ $response['previous_offset'] = $previous_offset;
+
+ return $response;
+ }
+
+ /**
+ * Processes fetched list view data
+ *
+ * Internal function, do not override.
+ * @param string $query query to be processed.
+ * @param boolean $check_date Optional, default false. if set to true date time values are processed.
+ * @return array Fetched data.
+ *
+ */
+ function process_full_list_query($query, $check_date=false)
+ {
+
+ $GLOBALS['log']->debug("process_full_list_query: query is ".$query);
+ $result = $this->db->query($query, false);
+ $GLOBALS['log']->debug("process_full_list_query: result is ".print_r($result,true));
+ $class = get_class($this);
+ $isFirstTime = true;
+ $bean = new $class();
+
+ //if($this->db->getRowCount($result) > 0){
+
+
+ // We have some data.
+ //while ($row = $this->db->fetchByAssoc($result)) {
+ while (($row = $bean->db->fetchByAssoc($result)) != null)
+ {
+ if(!$isFirstTime)
+ {
+ $bean = new $class();
+ }
+ $isFirstTime = false;
+
+ foreach($bean->field_defs as $field=>$value)
+ {
+ if (isset($row[$field]))
+ {
+ $bean->$field = $row[$field];
+ $GLOBALS['log']->debug("process_full_list: $bean->object_name({$row['id']}): ".$field." = ".$bean->$field);
+ }
+ else
+ {
+ $bean->$field = '';
+ }
+ }
+ if($check_date)
+ {
+ $bean->processed_dates_times = array();
+ $bean->check_date_relationships_load();
+ }
+ $bean->fill_in_additional_list_fields();
+ $bean->call_custom_logic("process_record");
+ $bean->fetched_row = $row;
+
+ $list[] = $bean;
+ }
+ //}
+ if (isset($list)) return $list;
+ else return null;
+ }
+
+ /**
+ * Tracks the viewing of a detail record.
+ * This leverages get_summary_text() which is object specific.
+ *
+ * Internal function, do not override.
+ * @param string $user_id - String value of the user that is viewing the record.
+ * @param string $current_module - String value of the module being processed.
+ * @param string $current_view - String value of the current view
+ */
+ function track_view($user_id, $current_module, $current_view='')
+ {
+ $trackerManager = TrackerManager::getInstance();
+ if($monitor = $trackerManager->getMonitor('tracker')){
+ $monitor->setValue('date_modified', $GLOBALS['timedate']->nowDb());
+ $monitor->setValue('user_id', $user_id);
+ $monitor->setValue('module_name', $current_module);
+ $monitor->setValue('action', $current_view);
+ $monitor->setValue('item_id', $this->id);
+ $monitor->setValue('item_summary', $this->get_summary_text());
+ $monitor->setValue('visible', $this->tracker_visibility);
+ $trackerManager->saveMonitor($monitor);
+ }
+ }
+
+ /**
+ * Returns the summary text that should show up in the recent history list for this object.
+ *
+ * @return string
+ */
+ public function get_summary_text()
+ {
+ return "Base Implementation. Should be overridden.";
+ }
+
+ /**
+ * This is designed to be overridden and add specific fields to each record.
+ * This allows the generic query to fill in the major fields, and then targeted
+ * queries to get related fields and add them to the record. The contact's
+ * account for instance. This method is only used for populating extra fields
+ * in lists.
+ */
+ function fill_in_additional_list_fields(){
+ if(!empty($this->field_defs['parent_name']) && empty($this->parent_name)){
+ $this->fill_in_additional_parent_fields();
+ }
+ }
+
+ /**
+ * This is designed to be overridden and add specific fields to each record.
+ * This allows the generic query to fill in the major fields, and then targeted
+ * queries to get related fields and add them to the record. The contact's
+ * account for instance. This method is only used for populating extra fields
+ * in the detail form
+ */
+ function fill_in_additional_detail_fields()
+ {
+ if(!empty($this->field_defs['assigned_user_name']) && !empty($this->assigned_user_id)){
+
+ $this->assigned_user_name = get_assigned_user_name($this->assigned_user_id);
+
+ }
+ if(!empty($this->field_defs['created_by']) && !empty($this->created_by))
+ $this->created_by_name = get_assigned_user_name($this->created_by);
+ if(!empty($this->field_defs['modified_user_id']) && !empty($this->modified_user_id))
+ $this->modified_by_name = get_assigned_user_name($this->modified_user_id);
+
+ if(!empty($this->field_defs['parent_name'])){
+ $this->fill_in_additional_parent_fields();
+ }
+ }
+
+ /**
+ * This is desgined to be overridden or called from extending bean. This method
+ * will fill in any parent_name fields.
+ */
+ function fill_in_additional_parent_fields() {
+
+ if(!empty($this->parent_id) && !empty($this->last_parent_id) && $this->last_parent_id == $this->parent_id){
+ return false;
+ }else{
+ $this->parent_name = '';
+ }
+ if(!empty($this->parent_type)) {
+ $this->last_parent_id = $this->parent_id;
+ $this->getRelatedFields($this->parent_type, $this->parent_id, array('name'=>'parent_name', 'document_name' => 'parent_document_name', 'first_name'=>'parent_first_name', 'last_name'=>'parent_last_name'));
+ if(!empty($this->parent_first_name) || !empty($this->parent_last_name) ){
+ $this->parent_name = $GLOBALS['locale']->getLocaleFormattedName($this->parent_first_name, $this->parent_last_name);
+ } else if(!empty($this->parent_document_name)){
+ $this->parent_name = $this->parent_document_name;
+ }
+ }
+ }
+
+/*
+ * Fill in a link field
+ */
+
+ function fill_in_link_field( $linkFieldName )
+ {
+ if ($this->load_relationship($linkFieldName))
+ {
+ $list=$this->$linkFieldName->get();
+ $this->$linkFieldName = '' ; // match up with null value in $this->populateFromRow()
+ if (!empty($list))
+ $this->$linkFieldName = $list[0];
+ }
+ }
+
+ /**
+ * Fill in fields where type = relate
+ */
+ function fill_in_relationship_fields(){
+ if(!empty($this->relDepth)) {
+ if($this->relDepth > 1)return;
+ }else $this->relDepth = 0;
+
+ foreach($this->field_defs as $field)
+ {
+ if(0 == strcmp($field['type'],'relate') && !empty($field['module']))
+ {
+ $name = $field['name'];
+ if(empty($this->$name))
+ {
+ // set the value of this relate field in this bean ($this->$field['name']) to the value of the 'name' field in the related module for the record identified by the value of $this->$field['id_name']
+ $related_module = $field['module'];
+ $id_name = $field['id_name'];
+ if (empty($this->$id_name)){
+ $this->fill_in_link_field($id_name);
+ }
+ if(!empty($this->$id_name) && ( $this->object_name != $related_module || ( $this->object_name == $related_module && $this->$id_name != $this->id ))){
+ if(isset($GLOBALS['beanList'][ $related_module])){
+ $class = $GLOBALS['beanList'][$related_module];
+
+ if(!empty($this->$id_name) && file_exists($GLOBALS['beanFiles'][$class]) && isset($this->$name)){
+ require_once($GLOBALS['beanFiles'][$class]);
+ $mod = new $class();
+ $mod->relDepth = $this->relDepth + 1;
+ $mod->retrieve($this->$id_name);
+ if (!empty($field['rname'])) {
+ $this->$name = $mod->$field['rname'];
+ } else if (isset($mod->name)) {
+ $this->$name = $mod->name;
+ }
+ }
+ }
+ }
+ if(!empty($this->$id_name) && isset($this->$name))
+ {
+ if(!isset($field['additionalFields']))
+ $field['additionalFields'] = array();
+ if(!empty($field['rname']))
+ {
+ $field['additionalFields'][$field['rname']]= $name;
+ }
+ else
+ {
+ $field['additionalFields']['name']= $name;
+ }
+ $this->getRelatedFields($related_module, $this->$id_name, $field['additionalFields']);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This is a helper function that is used to quickly created indexes when creating tables.
+ */
+ function create_index($query)
+ {
+ $GLOBALS['log']->info($query);
+
+ $result = $this->db->query($query, true, "Error creating index:");
+ }
+
+ /**
+ * This function should be overridden in each module. It marks an item as deleted.
+ *
+ * If it is not overridden, then marking this type of item is not allowed
+ */
+ function mark_deleted($id)
+ {
+ global $current_user;
+ $date_modified = $GLOBALS['timedate']->nowDb();
+ if(isset($_SESSION['show_deleted']))
+ {
+ $this->mark_undeleted($id);
+ }
+ else
+ {
+ // call the custom business logic
+ $custom_logic_arguments['id'] = $id;
+ $this->call_custom_logic("before_delete", $custom_logic_arguments);
+
+ if ( isset($this->field_defs['modified_user_id']) ) {
+ if (!empty($current_user)) {
+ $this->modified_user_id = $current_user->id;
+ } else {
+ $this->modified_user_id = 1;
+ }
+ $query = "UPDATE $this->table_name set deleted=1 , date_modified = '$date_modified', modified_user_id = '$this->modified_user_id' where id='$id'";
+ } else
+ $query = "UPDATE $this->table_name set deleted=1 , date_modified = '$date_modified' where id='$id'";
+ $this->db->query($query, true,"Error marking record deleted: ");
+ $this->deleted = 1;
+ $this->mark_relationships_deleted($id);
+
+ // Take the item off the recently viewed lists
+ $tracker = new Tracker();
+ $tracker->makeInvisibleForAll($id);
+
+ // call the custom business logic
+ $this->call_custom_logic("after_delete", $custom_logic_arguments);
+ }
+ }
+
+ /**
+ * Restores data deleted by call to mark_deleted() function.
+ *
+ * Internal function, do not override.
+ */
+ function mark_undeleted($id)
+ {
+ // call the custom business logic
+ $custom_logic_arguments['id'] = $id;
+ $this->call_custom_logic("before_restore", $custom_logic_arguments);
+
+ $date_modified = $GLOBALS['timedate']->nowDb();
+ $query = "UPDATE $this->table_name set deleted=0 , date_modified = '$date_modified' where id='$id'";
+ $this->db->query($query, true,"Error marking record undeleted: ");
+
+ // call the custom business logic
+ $this->call_custom_logic("after_restore", $custom_logic_arguments);
+ }
+
+ /**
+ * This function deletes relationships to this object. It should be overridden
+ * to handle the relationships of the specific object.
+ * This function is called when the item itself is being deleted.
+ *
+ * @param int $id id of the relationship to delete
+ */
+ function mark_relationships_deleted($id)
+ {
+ $this->delete_linked($id);
+ }
+
+ /**
+ * This function is used to execute the query and create an array template objects
+ * from the resulting ids from the query.
+ * It is currently used for building sub-panel arrays.
+ *
+ * @param string $query - the query that should be executed to build the list
+ * @param object $template - The object that should be used to copy the records.
+ * @param int $row_offset Optional, default 0
+ * @param int $limit Optional, default -1
+ * @return array
+ */
+ function build_related_list($query, &$template, $row_offset = 0, $limit = -1)
+ {
+ $GLOBALS['log']->debug("Finding linked records $this->object_name: ".$query);
+ $db = &DBManagerFactory::getInstance('listviews');
+
+ if(!empty($row_offset) && $row_offset != 0 && !empty($limit) && $limit != -1)
+ {
+ $result = $db->limitQuery($query, $row_offset, $limit,true,"Error retrieving $template->object_name list: ");
+ }
+ else
+ {
+ $result = $db->query($query, true);
+ }
+
+ $list = Array();
+ $isFirstTime = true;
+ $class = get_class($template);
+ while($row = $this->db->fetchByAssoc($result))
+ {
+ if(!$isFirstTime)
+ {
+ $template = new $class();
+ }
+ $isFirstTime = false;
+ $record = $template->retrieve($row['id']);
+
+ if($record != null)
+ {
+ // this copies the object into the array
+ $list[] = $template;
+ }
+ }
+ return $list;
+ }
+
+ /**
+ * This function is used to execute the query and create an array template objects
+ * from the resulting ids from the query.
+ * It is currently used for building sub-panel arrays. It supports an additional
+ * where clause that is executed as a filter on the results
+ *
+ * @param string $query - the query that should be executed to build the list
+ * @param object $template - The object that should be used to copy the records.
+ */
+ function build_related_list_where($query, &$template, $where='', $in='', $order_by, $limit='', $row_offset = 0)
+ {
+ $db = &DBManagerFactory::getInstance('listviews');
+ // No need to do an additional query
+ $GLOBALS['log']->debug("Finding linked records $this->object_name: ".$query);
+ if(empty($in) && !empty($query))
+ {
+ $idList = $this->build_related_in($query);
+ $in = $idList['in'];
+ }
+ // MFH - Added Support For Custom Fields in Searches
+ $custom_join="";
+ if(isset($this->custom_fields)) {
+ $custom_join = $this->custom_fields->getJOIN();
+ }
+
+ $query = "SELECT id ";
+
+ if (!empty($custom_join)) {
+ $query .= $custom_join['select'];
+ }
+ $query .= " FROM $this->table_name ";
+
+ if (!empty($custom_join) && !empty($custom_join['join'])) {
+ $query .= " " . $custom_join['join'];
+ }
+
+ $query .= " WHERE deleted=0 AND id IN $in";
+ if(!empty($where))
+ {
+ $query .= " AND $where";
+ }
+
+
+ if(!empty($order_by))
+ {
+ $query .= "ORDER BY $order_by";
+ }
+ if (!empty($limit))
+ {
+ $result = $db->limitQuery($query, $row_offset, $limit,true,"Error retrieving $this->object_name list: ");
+ }
+ else
+ {
+ $result = $db->query($query, true);
+ }
+
+ $list = Array();
+ $isFirstTime = true;
+ $class = get_class($template);
+
+ $disable_security_flag = ($template->disable_row_level_security) ? true : false;
+ while($row = $db->fetchByAssoc($result))
+ {
+ if(!$isFirstTime)
+ {
+ $template = new $class();
+ $template->disable_row_level_security = $disable_security_flag;
+ }
+ $isFirstTime = false;
+ $record = $template->retrieve($row['id']);
+ if($record != null)
+ {
+ // this copies the object into the array
+ $list[] = $template;
+ }
+ }
+
+ return $list;
+ }
+
+ /**
+ * Constructs an comma seperated list of ids from passed query results.
+ *
+ * @param string @query query to be executed.
+ *
+ */
+ function build_related_in($query)
+ {
+ $idList = array();
+ $result = $this->db->query($query, true);
+ $ids = '';
+ while($row = $this->db->fetchByAssoc($result))
+ {
+ $idList[] = $row['id'];
+ if(empty($ids))
+ {
+ $ids = "('" . $row['id'] . "'";
+ }
+ else
+ {
+ $ids .= ",'" . $row['id'] . "'";
+ }
+ }
+ if(empty($ids))
+ {
+ $ids = "('')";
+ }else{
+ $ids .= ')';
+ }
+
+ return array('list'=>$idList, 'in'=>$ids);
+ }
+
+ /**
+ * Optionally copies values from fetched row into the bean.
+ *
+ * Internal function, do not override.
+ *
+ * @param string $query - the query that should be executed to build the list
+ * @param object $template - The object that should be used to copy the records
+ * @param array $field_list List of fields.
+ * @return array
+ */
+ function build_related_list2($query, &$template, &$field_list)
+ {
+ $GLOBALS['log']->debug("Finding linked values $this->object_name: ".$query);
+
+ $result = $this->db->query($query, true);
+
+ $list = Array();
+ $isFirstTime = true;
+ $class = get_class($template);
+ while($row = $this->db->fetchByAssoc($result))
+ {
+ // Create a blank copy
+ $copy = $template;
+ if(!$isFirstTime)
+ {
+ $copy = new $class();
+ }
+ $isFirstTime = false;
+ foreach($field_list as $field)
+ {
+ // Copy the relevant fields
+ $copy->$field = $row[$field];
+
+ }
+
+ // this copies the object into the array
+ $list[] = $copy;
+ }
+
+ return $list;
+ }
+
+ /**
+ * Let implementing classes to fill in row specific columns of a list view form
+ *
+ */
+ function list_view_parse_additional_sections(&$list_form)
+ {
+ }
+
+ /**
+ * Assigns all of the values into the template for the list view
+ */
+ function get_list_view_array()
+ {
+ static $cache = array();
+ // cn: bug 12270 - sensitive fields being passed arbitrarily in listViews
+ $sensitiveFields = array('user_hash' => '');
+
+ $return_array = Array();
+ global $app_list_strings, $mod_strings;
+ foreach($this->field_defs as $field=>$value){
+
+ if(isset($this->$field)){
+
+ // cn: bug 12270 - sensitive fields being passed arbitrarily in listViews
+ if(isset($sensitiveFields[$field]))
+ continue;
+ if(!isset($cache[$field]))
+ $cache[$field] = strtoupper($field);
+
+ //Fields hidden by Dependent Fields
+ if (isset($value['hidden']) && $value['hidden'] === true) {
+ $return_array[$cache[$field]] = "";
+
+ }
+ //cn: if $field is a _dom, detect and return VALUE not KEY
+ //cl: empty function check for meta-data enum types that have values loaded from a function
+ else if (((!empty($value['type']) && ($value['type'] == 'enum' || $value['type'] == 'radioenum') )) && empty($value['function'])){
+ if(!empty($app_list_strings[$value['options']][$this->$field])){
+ $return_array[$cache[$field]] = $app_list_strings[$value['options']][$this->$field];
+ }
+ //nsingh- bug 21672. some modules such as manufacturers, Releases do not have a listing for select fields in the $app_list_strings. Must also check $mod_strings to localize.
+ elseif(!empty($mod_strings[$value['options']][$this->$field]))
+ {
+ $return_array[$cache[$field]] = $mod_strings[$value['options']][$this->$field];
+ }
+ else{
+ $return_array[$cache[$field]] = $this->$field;
+ }
+ //end bug 21672
+// tjy: no need to do this str_replace as the changes in 29994 for ListViewGeneric.tpl for translation handle this now
+// }elseif(!empty($value['type']) && $value['type'] == 'multienum'&& empty($value['function'])){
+// $return_array[strtoupper($field)] = str_replace('^,^', ', ', $this->$field );
+ }elseif(!empty($value['custom_module']) && $value['type'] != 'currency'){
+// $this->format_field($value);
+ $return_array[$cache[$field]] = $this->$field;
+ }else{
+ $return_array[$cache[$field]] = $this->$field;
+ }
+ // handle "Assigned User Name"
+ if($field == 'assigned_user_name'){
+ $return_array['ASSIGNED_USER_NAME'] = get_assigned_user_name($this->assigned_user_id);
+ }
+ }
+ }
+ return $return_array;
+ }
+ /**
+ * Override this function to set values in the array used to render list view data.
+ *
+ */
+ function get_list_view_data()
+ {
+ return $this->get_list_view_array();
+ }
+
+ /**
+ * Construct where clause from a list of name-value pairs.
+ *
+ */
+ function get_where(&$fields_array)
+ {
+ $where_clause = "WHERE ";
+ $first = 1;
+ foreach ($fields_array as $name=>$value)
+ {
+ if ($first)
+ {
+ $first = 0;
+ }
+ else
+ {
+ $where_clause .= " AND ";
+ }
+
+ $where_clause .= "$name = '".$this->db->quote($value,false)."'";
+ }
+ $where_clause .= " AND deleted=0";
+ return $where_clause;
+ }
+
+
+ /**
+ * Constructs a select query and fetch 1 row using this query, and then process the row
+ *
+ * Internal function, do not override.
+ * @param array @fields_array array of name value pairs used to construct query.
+ * @param boolean $encode Optional, default true, encode fetched data.
+ * @return object Instance of this bean with fetched data.
+ */
+ function retrieve_by_string_fields($fields_array, $encode=true)
+ {
+ $where_clause = $this->get_where($fields_array);
+ if(isset($this->custom_fields))
+ $custom_join = $this->custom_fields->getJOIN();
+ else $custom_join = false;
+ if($custom_join)
+ {
+ $query = "SELECT $this->table_name.*". $custom_join['select']. " FROM $this->table_name " . $custom_join['join'];
+ }
+ else
+ {
+ $query = "SELECT $this->table_name.* FROM $this->table_name ";
+ }
+ $query .= " $where_clause";
+ $GLOBALS['log']->debug("Retrieve $this->object_name: ".$query);
+ //requireSingleResult has beeen deprecated.
+ //$result = $this->db->requireSingleResult($query, true, "Retrieving record $where_clause:");
+ $result = $this->db->limitQuery($query,0,1,true, "Retrieving record $where_clause:");
+
+
+ if( empty($result))
+ {
+ return null;
+ }
+ if($this->db->getRowCount($result) > 1)
+ {
+ $this->duplicates_found = true;
+ }
+ $row = $this->db->fetchByAssoc($result, -1, $encode);
+ if(empty($row))
+ {
+ return null;
+ }
+ $this->fetched_row = $row;
+ $this->fromArray($row);
+ $this->fill_in_additional_detail_fields();
+ return $this;
+ }
+
+ /**
+ * This method is called during an import before inserting a bean
+ * Define an associative array called $special_fields
+ * the keys are user defined, and don't directly map to the bean's fields
+ * the value is the method name within that bean that will do extra
+ * processing for that field. example: 'full_name'=>'get_names_from_full_name'
+ *
+ */
+ function process_special_fields()
+ {
+ foreach ($this->special_functions as $func_name)
+ {
+ if ( method_exists($this,$func_name) )
+ {
+ $this->$func_name();
+ }
+ }
+ }
+
+ /**
+ * Override this function to build a where clause based on the search criteria set into bean .
+ * @abstract
+ */
+ function build_generic_where_clause($value)
+ {
+ }
+
+ function getRelatedFields($module, $id, $fields, $return_array = false){
+ if(empty($GLOBALS['beanList'][$module]))return '';
+ $object = $GLOBALS['beanList'][$module];
+ if ($object == 'aCase') {
+ $object = 'Case';
+ }
+
+ VardefManager::loadVardef($module, $object);
+ if(empty($GLOBALS['dictionary'][$object]['table']))return '';
+ $table = $GLOBALS['dictionary'][$object]['table'];
+ $query = 'SELECT id';
+ foreach($fields as $field=>$alias){
+ if(!empty($GLOBALS['dictionary'][$object]['fields'][$field]['db_concat_fields'])){
+ $query .= ' ,' .db_concat($table, $GLOBALS['dictionary'][$object]['fields'][$field]['db_concat_fields']) . ' as ' . $alias ;
+ }else if(!empty($GLOBALS['dictionary'][$object]['fields'][$field]) &&
+ (empty($GLOBALS['dictionary'][$object]['fields'][$field]['source']) ||
+ $GLOBALS['dictionary'][$object]['fields'][$field]['source'] != "non-db"))
+ {
+ $query .= ' ,' .$table . '.' . $field . ' as ' . $alias;
+ }
+ if(!$return_array)$this->$alias = '';
+ }
+ if($query == 'SELECT id' || empty($id)){
+ return '';
+ }
+
+
+ if(isset($GLOBALS['dictionary'][$object]['fields']['assigned_user_id']))
+ {
+ $query .= " , ". $table . ".assigned_user_id owner";
+
+ }
+ else if(isset($GLOBALS['dictionary'][$object]['fields']['created_by']))
+ {
+ $query .= " , ". $table . ".created_by owner";
+
+ }
+ $query .= ' FROM ' . $table . ' WHERE deleted=0 AND id=';
+ $result = $GLOBALS['db']->query($query . "'$id'" );
+ $row = $GLOBALS['db']->fetchByAssoc($result);
+ if($return_array){
+ return $row;
+ }
+ $owner = (empty($row['owner']))?'':$row['owner'];
+ foreach($fields as $alias){
+ $this->$alias = (!empty($row[$alias]))? $row[$alias]: '';
+ $alias = $alias .'_owner';
+ $this->$alias = $owner;
+ $a_mod = $alias .'_mod';
+ $this->$a_mod = $module;
+ }
+
+
+ }
+
+
+ function &parse_additional_headers(&$list_form, $xTemplateSection)
+ {
+ return $list_form;
+ }
+
+ function assign_display_fields($currentModule)
+ {
+ global $timedate;
+ foreach($this->column_fields as $field)
+ {
+ if(isset($this->field_name_map[$field]) && empty($this->$field))
+ {
+ if($this->field_name_map[$field]['type'] != 'date' && $this->field_name_map[$field]['type'] != 'enum')
+ $this->$field = $field;
+ if($this->field_name_map[$field]['type'] == 'date')
+ {
+ $this->$field = $timedate->to_display_date('1980-07-09');
+ }
+ if($this->field_name_map[$field]['type'] == 'enum')
+ {
+ $dom = $this->field_name_map[$field]['options'];
+ global $current_language, $app_list_strings;
+ $mod_strings = return_module_language($current_language, $currentModule);
+
+ if(isset($mod_strings[$dom]))
+ {
+ $options = $mod_strings[$dom];
+ foreach($options as $key=>$value)
+ {
+ if(!empty($key) && empty($this->$field ))
+ {
+ $this->$field = $key;
+ }
+ }
+ }
+ if(isset($app_list_strings[$dom]))
+ {
+ $options = $app_list_strings[$dom];
+ foreach($options as $key=>$value)
+ {
+ if(!empty($key) && empty($this->$field ))
+ {
+ $this->$field = $key;
+ }
+ }
+ }
+
+
+ }
+ }
+ }
+ }
+
+ /*
+ * RELATIONSHIP HANDLING
+ */
+
+ function set_relationship($table, $relate_values, $check_duplicates = true,$do_update=false,$data_values=null)
+ {
+ $where = '';
+
+ // make sure there is a date modified
+ $date_modified = $this->db->convert("'".$GLOBALS['timedate']->nowDb()."'", 'datetime');
+
+ $row=null;
+ if($check_duplicates)
+ {
+ $query = "SELECT * FROM $table ";
+ $where = "WHERE deleted = '0' ";
+ foreach($relate_values as $name=>$value)
+ {
+ $where .= " AND $name = '$value' ";
+ }
+ $query .= $where;
+ $result = $this->db->query($query, false, "Looking For Duplicate Relationship:" . $query);
+ $row=$this->db->fetchByAssoc($result);
+ }
+
+ if(!$check_duplicates || empty($row) )
+ {
+ unset($relate_values['id']);
+ if ( isset($data_values))
+ {
+ $relate_values = array_merge($relate_values,$data_values);
+ }
+ $query = "INSERT INTO $table (id, ". implode(',', array_keys($relate_values)) . ", date_modified) VALUES ('" . create_guid() . "', " . "'" . implode("', '", $relate_values) . "', ".$date_modified.")" ;
+
+ $this->db->query($query, false, "Creating Relationship:" . $query);
+ }
+ else if ($do_update)
+ {
+ $conds = array();
+ foreach($data_values as $key=>$value)
+ {
+ array_push($conds,$key."='".$this->db->quote($value)."'");
+ }
+ $query = "UPDATE $table SET ". implode(',', $conds).",date_modified=".$date_modified." ".$where;
+ $this->db->query($query, false, "Updating Relationship:" . $query);
+ }
+ }
+
+ function retrieve_relationships($table, $values, $select_id)
+ {
+ $query = "SELECT $select_id FROM $table WHERE deleted = 0 ";
+ foreach($values as $name=>$value)
+ {
+ $query .= " AND $name = '$value' ";
+ }
+ $query .= " ORDER BY $select_id ";
+ $result = $this->db->query($query, false, "Retrieving Relationship:" . $query);
+ $ids = array();
+ while($row = $this->db->fetchByAssoc($result))
+ {
+ $ids[] = $row;
+ }
+ return $ids;
+ }
+
+ // TODO: this function needs adjustment
+ function loadLayoutDefs()
+ {
+ global $layout_defs;
+ if(empty( $this->layout_def) && file_exists('modules/'. $this->module_dir . '/layout_defs.php'))
+ {
+ include_once('modules/'. $this->module_dir . '/layout_defs.php');
+ if(file_exists('custom/modules/'. $this->module_dir . '/Ext/Layoutdefs/layoutdefs.ext.php'))
+ {
+ include_once('custom/modules/'. $this->module_dir . '/Ext/Layoutdefs/layoutdefs.ext.php');
+ }
+ if ( empty( $layout_defs[get_class($this)]))
+ {
+ echo "\$layout_defs[" . get_class($this) . "]; does not exist";
+ }
+
+ $this->layout_def = $layout_defs[get_class($this)];
+ }
+ }
+
+ /**
+ * Trigger custom logic for this module that is defined for the provided hook
+ * The custom logic file is located under custom/modules/[CURRENT_MODULE]/logic_hooks.php.
+ * That file should define the $hook_version that should be used.
+ * It should also define the $hook_array. The $hook_array will be a two dimensional array
+ * the first dimension is the name of the event, the second dimension is the information needed
+ * to fire the hook. Each entry in the top level array should be defined on a single line to make it
+ * easier to automatically replace this file. There should be no contents of this file that are not replacable.
+ *
+ * $hook_array['before_save'][] = Array(1, testtype, 'custom/modules/Leads/test12.php', 'TestClass', 'lead_before_save_1');
+ * This sample line creates a before_save hook. The hooks are procesed in the order in which they
+ * are added to the array. The second dimension is an array of:
+ * processing index (for sorting before exporting the array)
+ * A logic type hook
+ * label/type
+ * php file to include
+ * php class the method is in
+ * php method to call
+ *
+ * The method signature for version 1 hooks is:
+ * function NAME(&$bean, $event, $arguments)
+ * $bean - $this bean passed in by reference.
+ * $event - The string for the current event (i.e. before_save)
+ * $arguments - An array of arguments that are specific to the event.
+ */
+ function call_custom_logic($event, $arguments = null)
+ {
+ if(!isset($this->processed) || $this->processed == false){
+ //add some logic to ensure we do not get into an infinite loop
+ if(!empty($this->logicHookDepth[$event])) {
+ if($this->logicHookDepth[$event] > 10)
+ return;
+ }else
+ $this->logicHookDepth[$event] = 0;
+
+ //we have to put the increment operator here
+ //otherwise we may never increase the depth for that event in the case
+ //where one event will trigger another as in the case of before_save and after_save
+ //Also keeping the depth per event allow any number of hooks to be called on the bean
+ //and we only will return if one event gets caught in a loop. We do not increment globally
+ //for each event called.
+ $this->logicHookDepth[$event]++;
+
+ //method defined in 'include/utils/LogicHook.php'
+
+ $logicHook = new LogicHook();
+ $logicHook->setBean($this);
+ $logicHook->call_custom_logic($this->module_dir, $event, $arguments);
+ }
+ }
+
+
+ /* When creating a custom field of type Dropdown, it creates an enum row in the DB.
+ A typical get_list_view_array() result will have the *KEY* value from that drop-down.
+ Since custom _dom objects are flat-files included in the $app_list_strings variable,
+ We need to generate a key-key pair to get the true value like so:
+ ([module]_cstm->fields_meta_data->$app_list_strings->*VALUE*)*/
+ function getRealKeyFromCustomFieldAssignedKey($name)
+ {
+ if ($this->custom_fields->avail_fields[$name]['ext1'])
+ {
+ $realKey = 'ext1';
+ }
+ elseif ($this->custom_fields->avail_fields[$name]['ext2'])
+ {
+ $realKey = 'ext2';
+ }
+ elseif ($this->custom_fields->avail_fields[$name]['ext3'])
+ {
+ $realKey = 'ext3';
+ }
+ else
+ {
+ $GLOBALS['log']->fatal("SUGARBEAN: cannot find Real Key for custom field of type dropdown - cannot return Value.");
+ return false;
+ }
+ if(isset($realKey))
+ {
+ return $this->custom_fields->avail_fields[$name][$realKey];
+ }
+ }
+
+ function bean_implements($interface)
+ {
+ return false;
+ }
+ /**
+ * Check whether the user has access to a particular view for the current bean/module
+ * @param $view string required, the view to determine access for i.e. DetailView, ListView...
+ * @param $is_owner bool optional, this is part of the ACL check if the current user is an owner they will receive different access
+ */
+ function ACLAccess($view,$is_owner='not_set')
+ {
+ global $current_user;
+ if(is_admin($current_user)||is_admin_for_module($current_user,$this->getACLCategory()))return true;
+ $not_set = false;
+ if($is_owner == 'not_set')
+ {
+ $not_set = true;
+ $is_owner = $this->isOwner($current_user->id);
+ }
+
+ //if we don't implent acls return true
+ if(!$this->bean_implements('ACL'))
+ return true;
+ $view = strtolower($view);
+ switch ($view)
+ {
+ case 'list':
+ case 'index':
+ case 'listview':
+ return ACLController::checkAccess($this->module_dir,'list', true);
+ case 'edit':
+ case 'save':
+ if( !$is_owner && $not_set && !empty($this->id)){
+ $class = get_class($this);
+ $temp = new $class();
+ if(!empty($this->fetched_row) && !empty($this->fetched_row['id']) && !empty($this->fetched_row['assigned_user_id']) && !empty($this->fetched_row['created_by'])){
+ $temp->populateFromRow($this->fetched_row);
+ }else{
+ $temp->retrieve($this->id);
+ }
+ $is_owner = $temp->isOwner($current_user->id);
+ }
+ case 'popupeditview':
+ case 'editview':
+ return ACLController::checkAccess($this->module_dir,'edit', $is_owner, $this->acltype);
+ case 'view':
+ case 'detail':
+ case 'detailview':
+ return ACLController::checkAccess($this->module_dir,'view', $is_owner, $this->acltype);
+ case 'delete':
+ return ACLController::checkAccess($this->module_dir,'delete', $is_owner, $this->acltype);
+ case 'export':
+ return ACLController::checkAccess($this->module_dir,'export', $is_owner, $this->acltype);
+ case 'import':
+ return ACLController::checkAccess($this->module_dir,'import', true, $this->acltype);
+ }
+ //if it is not one of the above views then it should be implemented on the page level
+ return true;
+ }
+ /**
+ * Returns true of false if the user_id passed is the owner
+ *
+ * @param GUID $user_id
+ * @return boolean
+ */
+ function isOwner($user_id)
+ {
+ //if we don't have an id we must be the owner as we are creating it
+ if(!isset($this->id))
+ {
+ return true;
+ }
+ //if there is an assigned_user that is the owner
+ if(isset($this->assigned_user_id))
+ {
+ if($this->assigned_user_id == $user_id) return true;
+ return false;
+ }
+ else
+ {
+ //other wise if there is a created_by that is the owner
+ if(isset($this->created_by) && $this->created_by == $user_id)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ /**
+ * Gets there where statement for checking if a user is an owner
+ *
+ * @param GUID $user_id
+ * @return STRING
+ */
+ function getOwnerWhere($user_id)
+ {
+ if(isset($this->field_defs['assigned_user_id']))
+ {
+ return " $this->table_name.assigned_user_id ='$user_id' ";
+ }
+ if(isset($this->field_defs['created_by']))
+ {
+ return " $this->table_name.created_by ='$user_id' ";
+ }
+ return '';
+ }
+
+ /**
+ *
+ * Used in order to manage ListView links and if they should
+ * links or not based on the ACL permissions of the user
+ *
+ * @return ARRAY of STRINGS
+ */
+ function listviewACLHelper()
+ {
+ $array_assign = array();
+ if($this->ACLAccess('DetailView'))
+ {
+ $array_assign['MAIN'] = 'a';
+ }
+ else
+ {
+ $array_assign['MAIN'] = 'span';
+ }
+ return $array_assign;
+ }
+
+ /**
+ * returns this bean as an array
+ *
+ * @return array of fields with id, name, access and category
+ */
+ function toArray($dbOnly = false, $stringOnly = false, $upperKeys=false)
+ {
+ static $cache = array();
+ $arr = array();
+
+ foreach($this->field_defs as $field=>$data)
+ {
+ if( !$dbOnly || !isset($data['source']) || $data['source'] == 'db')
+ if(!$stringOnly || is_string($this->$field))
+ if($upperKeys)
+ {
+ if(!isset($cache[$field])){
+ $cache[$field] = strtoupper($field);
+ }
+ $arr[$cache[$field]] = $this->$field;
+ }
+ else
+ {
+ if(isset($this->$field)){
+ $arr[$field] = $this->$field;
+ }else{
+ $arr[$field] = '';
+ }
+ }
+ }
+ return $arr;
+ }
+
+ /**
+ * Converts an array into an acl mapping name value pairs into files
+ *
+ * @param Array $arr
+ */
+ function fromArray($arr)
+ {
+ foreach($arr as $name=>$value)
+ {
+ $this->$name = $value;
+ }
+ }
+
+ /**
+ * Loads a row of data into instance of a bean. The data is passed as an array to this function
+ *
+ * @param array $arr row of data fetched from the database.
+ * @return nothing
+ *
+ * Internal function do not override.
+ */
+ function loadFromRow($arr)
+ {
+ $this->populateFromRow($arr);
+ $this->processed_dates_times = array();
+ $this->check_date_relationships_load();
+
+ $this->fill_in_additional_list_fields();
+
+ if($this->hasCustomFields())$this->custom_fields->fill_relationships();
+ $this->call_custom_logic("process_record");
+ }
+
+ function hasCustomFields(){
+ return !empty($GLOBALS['dictionary'][$this->object_name]['custom_fields']);
+ }
+
+ /**
+ * Ensure that fields within order by clauses are properly qualified with
+ * their tablename. This qualification is a requirement for sql server support.
+ *
+ * @param string $order_by original order by from the query
+ * @param string $qualify prefix for columns in the order by list.
+ * @return prefixed
+ *
+ * Internal function do not override.
+ */
+ function create_qualified_order_by( $order_by, $qualify)
+ { // if the column is empty, but the sort order is defined, the value will throw an error, so do not proceed if no order by is given
+ if (empty($order_by))
+ {
+ return $order_by;
+ }
+ $order_by_clause = " ORDER BY ";
+ $tmp = explode(",", $order_by);
+ $comma = ' ';
+ foreach ( $tmp as $stmp)
+ {
+ $stmp = (substr_count($stmp, ".") > 0?trim($stmp):"$qualify." . trim($stmp));
+ $order_by_clause .= $comma . $stmp;
+ $comma = ", ";
+ }
+ return $order_by_clause;
+ }
+
+ /**
+ * Combined the contents of street field 2 thru 4 into the main field
+ *
+ * @param string $street_field
+ */
+
+ function add_address_streets(
+ $street_field
+ )
+ {
+ $street_field_2 = $street_field.'_2';
+ $street_field_3 = $street_field.'_3';
+ $street_field_4 = $street_field.'_4';
+ if ( isset($this->$street_field_2)) {
+ $this->$street_field .= "\n". $this->$street_field_2;
+ unset($this->$street_field_2);
+ }
+ if ( isset($this->$street_field_3)) {
+ $this->$street_field .= "\n". $this->$street_field_3;
+ unset($this->$street_field_3);
+ }
+ if ( isset($this->$street_field_4)) {
+ $this->$street_field .= "\n". $this->$street_field_4;
+ unset($this->$street_field_4);
+ }
+ if ( isset($this->$street_field)) {
+ $this->$street_field = trim($this->$street_field, "\n");
+ }
+ }
+/**
+ * Encrpyt and base64 encode an 'encrypt' field type in the bean using Blowfish. The default system key is stored in cache/Blowfish/{keytype}
+ * @param STRING value -plain text value of the bean field.
+ * @return string
+ */
+ function encrpyt_before_save($value)
+ {
+ require_once("include/utils/encryption_utils.php");
+ return blowfishEncode(blowfishGetKey('encrypt_field'),$value);
+ }
+
+/**
+ * Decode and decrypt a base 64 encoded string with field type 'encrypt' in this bean using Blowfish.
+ * @param STRING value - an encrypted and base 64 encoded string.
+ * @return string
+ */
+ function decrypt_after_retrieve($value)
+ {
+ require_once("include/utils/encryption_utils.php");
+ return blowfishDecode(blowfishGetKey('encrypt_field'), $value);
+ }
+
+ /**
+ * Moved from save() method, functionality is the same, but this is intended to handle
+ * Optimistic locking functionality.
+ */
+ private function _checkOptimisticLocking($action, $isUpdate){
+ if($this->optimistic_lock && !isset($_SESSION['o_lock_fs'])){
+ if(isset($_SESSION['o_lock_id']) && $_SESSION['o_lock_id'] == $this->id && $_SESSION['o_lock_on'] == $this->object_name)
+ {
+ if($action == 'Save' && $isUpdate && isset($this->modified_user_id) && $this->has_been_modified_since($_SESSION['o_lock_dm'], $this->modified_user_id))
+ {
+ $_SESSION['o_lock_class'] = get_class($this);
+ $_SESSION['o_lock_module'] = $this->module_dir;
+ $_SESSION['o_lock_object'] = $this->toArray();
+ $saveform = "";
+ foreach($_POST as $key=>$arg)
+ {
+ $saveform .= " ";
+ }
+ $saveform .= " ";
+ $_SESSION['o_lock_save'] = $saveform;
+ header('Location: index.php?module=OptimisticLock&action=LockResolve');
+ die();
+ }
+ else
+ {
+ unset ($_SESSION['o_lock_object']);
+ unset ($_SESSION['o_lock_id']);
+ unset ($_SESSION['o_lock_dm']);
+ }
+ }
+ }
+ else
+ {
+ if(isset($_SESSION['o_lock_object'])) { unset ($_SESSION['o_lock_object']); }
+ if(isset($_SESSION['o_lock_id'])) { unset ($_SESSION['o_lock_id']); }
+ if(isset($_SESSION['o_lock_dm'])) { unset ($_SESSION['o_lock_dm']); }
+ if(isset($_SESSION['o_lock_fs'])) { unset ($_SESSION['o_lock_fs']); }
+ if(isset($_SESSION['o_lock_save'])) { unset ($_SESSION['o_lock_save']); }
+ }
+ }
+
+ /**
+ * Send assignment notifications and invites for meetings and calls
+ */
+ private function _sendNotifications($check_notify){
+ if($check_notify || (isset($this->notify_inworkflow) && $this->notify_inworkflow == true)){ // cn: bug 5795 - no invites sent to Contacts, and also bug 25995, in workflow, it will set the notify_on_save=true.
+
+ $admin = new Administration();
+ $admin->retrieveSettings();
+ $sendNotifications = false;
+
+ if ($admin->settings['notify_on'])
+ {
+ $GLOBALS['log']->info("Notifications: user assignment has changed, checking if user receives notifications");
+ $sendNotifications = true;
+ }
+ elseif(isset($_REQUEST['send_invites']) && $_REQUEST['send_invites'] == 1)
+ {
+ // cn: bug 5795 Send Invites failing for Contacts
+ $sendNotifications = true;
+ }
+ else
+ {
+ $GLOBALS['log']->info("Notifications: not sending e-mail, notify_on is set to OFF");
+ }
+
+
+ if($sendNotifications == true)
+ {
+ $notify_list = $this->get_notification_recipients();
+ foreach ($notify_list as $notify_user)
+ {
+ $this->send_assignment_notifications($notify_user, $admin);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Called from ImportFieldSanitize::relate(), when creating a new bean in a related module. Will
+ * copies fields over from the current bean into the related. Designed to be overriden in child classes.
+ *
+ * @param SugarBean $newbean newly created related bean
+ */
+ public function populateRelatedBean(
+ SugarBean $newbean
+ )
+ {
+ }
+
+ /**
+ * Called during the import process before a bean save, to handle any needed pre-save logic when
+ * importing a record
+ */
+ public function beforeImportSave()
+ {
+ }
+
+ /**
+ * Called during the import process after a bean save, to handle any needed post-save logic when
+ * importing a record
+ */
+ public function afterImportSave()
+ {
+ }
+
+ /**
+ * This function is designed to cache references to field arrays that were previously stored in the
+ * bean files and have since been moved to seperate files. Was previously in include/CacheHandler.php
+ *
+ * @deprecated
+ * @param $module_dir string the module directory
+ * @param $module string the name of the module
+ * @param $key string the type of field array we are referencing, i.e. list_fields, column_fields, required_fields
+ **/
+ private function _loadCachedArray(
+ $module_dir,
+ $module,
+ $key
+ )
+ {
+ static $moduleDefs = array();
+
+ $fileName = 'field_arrays.php';
+
+ $cache_key = "load_cached_array.$module_dir.$module.$key";
+ $result = sugar_cache_retrieve($cache_key);
+ if(!empty($result))
+ {
+ // Use SugarCache::EXTERNAL_CACHE_NULL_VALUE to store null values in the cache.
+ if($result == SugarCache::EXTERNAL_CACHE_NULL_VALUE)
+ {
+ return null;
+ }
+
+ return $result;
+ }
+
+ if(file_exists('modules/'.$module_dir.'/'.$fileName))
+ {
+ // If the data was not loaded, try loading again....
+ if(!isset($moduleDefs[$module]))
+ {
+ include('modules/'.$module_dir.'/'.$fileName);
+ $moduleDefs[$module] = $fields_array;
+ }
+ // Now that we have tried loading, make sure it was loaded
+ if(empty($moduleDefs[$module]) || empty($moduleDefs[$module][$module][$key]))
+ {
+ // It was not loaded.... Fail. Cache null to prevent future repeats of this calculation
+ sugar_cache_put($cache_key, SugarCache::EXTERNAL_CACHE_NULL_VALUE);
+ return null;
+ }
+
+ // It has been loaded, cache the result.
+ sugar_cache_put($cache_key, $moduleDefs[$module][$module][$key]);
+ return $moduleDefs[$module][$module][$key];
+ }
+
+ // It was not loaded.... Fail. Cache null to prevent future repeats of this calculation
+ sugar_cache_put($cache_key, SugarCache::EXTERNAL_CACHE_NULL_VALUE);
+ return null;
+ }
+
+ /**
+ * Returns the ACL category for this module; defaults to the SugarBean::$acl_category if defined
+ * otherwise it is SugarBean::$module_dir
+ *
+ * @return string
+ */
+ public function getACLCategory()
+ {
+ return !empty($this->acl_category)?$this->acl_category:$this->module_dir;
+ }
+
+ /**
+ * Returns the query used for the export functionality for a module. Override this method if you wish
+ * to have a custom query to pull this data together instead
+ *
+ * @param string $order_by
+ * @param string $where
+ * @return string SQL query
+ */
+ public function create_export_query($order_by, $where)
+ {
+ return $this->create_new_list_query($order_by, $where, array(), array(), 0, '', false, $this, true);
+ }
+}
diff --git a/data/Tracker.php b/data/Tracker.php
new file mode 100644
index 00000000..a53f8fed
--- /dev/null
+++ b/data/Tracker.php
@@ -0,0 +1,50 @@
+
\ No newline at end of file
diff --git a/data/upload/index.html b/data/upload/index.html
new file mode 100644
index 00000000..f9236827
--- /dev/null
+++ b/data/upload/index.html
@@ -0,0 +1 @@
+This directory must be writable by the webserver user.
\ No newline at end of file
diff --git a/dictionary.php b/dictionary.php
new file mode 100644
index 00000000..f3127aa9
--- /dev/null
+++ b/dictionary.php
@@ -0,0 +1,42 @@
+
diff --git a/download.php b/download.php
new file mode 100644
index 00000000..e7ef57f6
--- /dev/null
+++ b/download.php
@@ -0,0 +1,180 @@
+retrieve($_SESSION['authenticated_user_id']);
+ $GLOBALS['current_language'] = $_SESSION['authenticated_user_language'];
+ $app_strings = return_application_language($GLOBALS['current_language']);
+ $mod_strings = return_module_language($GLOBALS['current_language'], 'ACL');
+ if(!isset($_REQUEST['isTempFile'])) {
+ //Custom modules may have capilizations anywhere in thier names. We should check the passed in format first.
+ require('include/modules.php');
+ $module = $db->quote($_REQUEST['type']);
+ $file_type = strtolower($_REQUEST['type']);
+ if(empty($beanList[$module])) {
+ //start guessing at a module name
+ $module = ucfirst($file_type);
+ if(empty($beanList[$module])) {
+ die($app_strings['ERROR_TYPE_NOT_VALID']);
+ }
+ }
+ $bean_name = $beanList[$module];
+ if(!file_exists('modules/' . $module . '/' . $bean_name . '.php')) {
+ die($app_strings['ERROR_TYPE_NOT_VALID']);
+ }
+ require_once('modules/' . $module . '/' . $bean_name . '.php');
+ $focus = new $bean_name();
+ $focus->retrieve($_REQUEST['id']);
+ if(!$focus->ACLAccess('view')){
+ die($mod_strings['LBL_NO_ACCESS']);
+ } // if
+
+ // Pull up the document revision, if it's of type Document
+ if ( isset($focus->object_name) && $focus->object_name == 'Document' ) {
+ // It's a document, get the revision that really stores this file
+ $focusRevision = new DocumentRevision();
+ $focusRevision->retrieve($_REQUEST['id']);
+
+ if ( empty($focusRevision->id) ) {
+ // This wasn't a document revision id, it's probably actually a document id, we need to grab that, get the latest revision and use that
+ $focusDocument = new Document();
+ $focusDocument->retrieve($_REQUEST['id']);
+
+ $focusRevision->retrieve($focusDocument->document_revision_id);
+
+ if ( !empty($focusRevision->id) ) {
+ $_REQUEST['id'] = $focusRevision->id;
+ }
+ }
+ }
+
+ // See if it is a remote file, if so, send them that direction
+ if ( isset($focus->doc_url) && !empty($focus->doc_url) ) {
+ header('Location: '.$focus->doc_url);
+ sugar_die();
+ }
+
+ if ( isset($focusRevision) && isset($focusRevision->doc_url) && !empty($focusRevision->doc_url) ) {
+ header('Location: '.$focusRevision->doc_url);
+ sugar_die();
+ }
+
+ } // if
+
+ $local_location = (isset($_REQUEST['isTempFile'])) ? "{$GLOBALS['sugar_config']['cache_dir']}/modules/Emails/{$_REQUEST['ieId']}/attachments/{$_REQUEST['id']}"
+ : $GLOBALS['sugar_config']['upload_dir']."/".$_REQUEST['id'];
+
+ if(isset($_REQUEST['isTempFile']) && ($_REQUEST['type']=="SugarFieldImage")) {
+ $local_location = $GLOBALS['sugar_config']['upload_dir']."/".$_REQUEST['id'];
+ }
+
+ if(!file_exists( $local_location ) || strpos($local_location, "..")) {
+ die($app_strings['ERR_INVALID_FILE_REFERENCE']);
+ }
+ else {
+ $doQuery = true;
+
+ if($file_type == 'documents') {
+ // cn: bug 9674 document_revisions table has no 'name' column.
+ $query = "SELECT filename name FROM document_revisions INNER JOIN documents ON documents.id = document_revisions.document_id ";
+ $query .= "WHERE document_revisions.id = '".$db->quote($_REQUEST['id'])."' ";
+ } elseif($file_type == 'kbdocuments') {
+ $query="SELECT document_revisions.filename name FROM document_revisions INNER JOIN kbdocument_revisions ON document_revisions.id = kbdocument_revisions.document_revision_id INNER JOIN kbdocuments ON kbdocument_revisions.kbdocument_id = kbdocuments.id ";
+ $query .= "WHERE document_revisions.id = '" . $db->quote($_REQUEST['id']) ."'";
+ } elseif($file_type == 'notes') {
+ $query = "SELECT filename name FROM notes ";
+ $query .= "WHERE notes.id = '" . $db->quote($_REQUEST['id']) ."'";
+ } elseif( !isset($_REQUEST['isTempFile']) && !isset($_REQUEST['tempName'] ) && isset($_REQUEST['type']) && $file_type!='temp' ){ //make sure not email temp file.
+ $query = "SELECT filename name FROM ". $file_type ." ";
+ $query .= "WHERE ". $file_type .".id= '".$db->quote($_REQUEST['id'])."'";
+ }elseif( $file_type == 'temp'){
+ $doQuery = false;
+ }
+
+ if($doQuery && isset($query)) {
+ $rs = $GLOBALS['db']->query($query);
+ $row = $GLOBALS['db']->fetchByAssoc($rs);
+
+ if(empty($row)){
+ die($app_strings['ERROR_NO_RECORD']);
+ }
+ $name = $row['name'];
+ $download_location = $GLOBALS['sugar_config']['upload_dir']."/".$_REQUEST['id'];
+ } else if(isset( $_REQUEST['tempName'] ) && isset($_REQUEST['isTempFile']) ){
+ // downloading a temp file (email 2.0)
+ $download_location = $local_location;
+ $name = $_REQUEST['tempName'];
+ }
+ else if(isset($_REQUEST['isTempFile']) && ($_REQUEST['type']=="SugarFieldImage")) {
+ $download_location = $local_location;
+ $name = $_REQUEST['tempName'];
+ }
+
+ if(isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']))
+ {
+ $name = urlencode($name);
+ $name = str_replace("+", "_", $name);
+ }
+
+ header("Pragma: public");
+ header("Cache-Control: maxage=1, post-check=0, pre-check=0");
+ if(isset($_REQUEST['isTempFile']) && ($_REQUEST['type']=="SugarFieldImage"))
+ header("Content-type: image");
+ else {
+ header("Content-type: application/force-download");
+ header("Content-disposition: attachment; filename=\"".$name."\";");
+ }
+ header("Content-Length: " . filesize($local_location));
+ header("Expires: 0");
+ set_time_limit(0);
+
+ @ob_end_clean();
+ ob_start();
+
+ echo file_get_contents($download_location);
+ @ob_flush();
+ }
+}
+?>
diff --git a/emailmandelivery.php b/emailmandelivery.php
new file mode 100644
index 00000000..023b4c2d
--- /dev/null
+++ b/emailmandelivery.php
@@ -0,0 +1,41 @@
+
\ No newline at end of file
diff --git a/examples/EXAMPLES_README.txt b/examples/EXAMPLES_README.txt
new file mode 100644
index 00000000..cf7e212d
--- /dev/null
+++ b/examples/EXAMPLES_README.txt
@@ -0,0 +1,7 @@
+To enable access to the ./examples/ directory, open .htaccess in the main Sugar directory and find the following line:
+
+ RedirectMatch /dev/sugar/maint450/examples/(.*).php http://julian/dev/sugar/maint450/index.php
+
+Change it to:
+
+ # RedirectMatch /dev/sugar/maint450/examples/(.*).php http://julian/dev/sugar/maint450/index.php
\ No newline at end of file
diff --git a/examples/ExampleLeadCapture.php b/examples/ExampleLeadCapture.php
new file mode 100644
index 00000000..1a69dd74
--- /dev/null
+++ b/examples/ExampleLeadCapture.php
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+ Please fill out this form so we can better server your game playing and food eating needs. It will redirect you to the form validation test.
+
+
\ No newline at end of file
diff --git a/examples/FormValidationTest.php b/examples/FormValidationTest.php
new file mode 100644
index 00000000..bb13b626
--- /dev/null
+++ b/examples/FormValidationTest.php
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
diff --git a/examples/ProgressBarTest.php b/examples/ProgressBarTest.php
new file mode 100644
index 00000000..a791f2aa
--- /dev/null
+++ b/examples/ProgressBarTest.php
@@ -0,0 +1,48 @@
+
\ No newline at end of file
diff --git a/examples/SoapTest.php b/examples/SoapTest.php
new file mode 100644
index 00000000..dd347ba2
--- /dev/null
+++ b/examples/SoapTest.php
@@ -0,0 +1,122 @@
+$value){
+ $$name = $value;
+}
+echo <<
+
+
+
+
+EOQ;
+if(!empty($user_name)){
+$offset = 0;
+if(isset($_REQUEST['offset'])){
+ $offset = $_REQUEST['offset'] + 20;
+ echo $offset;
+}
+require_once('include/nusoap/nusoap.php'); //must also have the nusoap code on the ClientSide.
+$soapclient = new nusoapclient($GLOBALS['sugar_config']['site_url'].'/soap.php'); //define the SOAP Client an
+
+echo 'LOGIN: ';
+$result = $soapclient->call('login',array('user_auth'=>array('user_name'=>$user_name,'password'=>md5($user_password), 'version'=>'.01'), 'application_name'=>'SoapTest'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$session = $result['id'];
+
+echo 'GET Case fields: ';
+$result = $soapclient->call('get_module_fields',array('session'=>$session , 'module_name'=>'Cases'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo 'Update a portal user fields: ';
+$result = $soapclient->call('update_portal_user',array('session'=>$session,'portal_name'=>'dan','name_value_list'=>array(array('name'=>'email1', 'value'=>'Dan_Aarons@example.com'))));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo 'Get list of contacts: ';
+$result = $soapclient->call('get_entry_list',array('session'=>$session,'module_name'=>'Contacts','query'=>'','order_by'=>'contacts.last_name asc','offset'=>$offset, 'select_fields'=>array(), 'max_results'=>'5'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo 'LOGOUT: ';
+$result = $soapclient->call('logout',array('session'=>$session));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+}
+?>
\ No newline at end of file
diff --git a/examples/SoapTestPortal.php b/examples/SoapTestPortal.php
new file mode 100644
index 00000000..34303baf
--- /dev/null
+++ b/examples/SoapTestPortal.php
@@ -0,0 +1,262 @@
+$value){
+ $$name = $value;
+}
+echo <<
+
+
+
+
+EOQ;
+
+if(!empty($portal_name)){
+$portal_password = md5($portal_password);
+require_once('../include/nusoap/nusoap.php'); //must also have the nusoap code on the ClientSide.
+$soapclient = new nusoapclient('http://localhost/sugarcrm/soap.php'); //define the SOAP Client an
+//application_name is the client application connecting to sugar CRM for example mambo
+echo 'LOGIN: ';
+$result = $soapclient->call('portal_login',array('portal_auth'=>array('user_name'=>$portal_name,'password'=>$portal_password, 'version'=>'.01'),'user_name'=>$user_name, 'application_name'=>'SoapTestPortal'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+echo ' ';
+echo $soapclient->responseHeaders;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$session = $result['id'];
+echo 'GET CASES: ';
+$result = $soapclient->call('portal_get_entry_list',array('session'=>$session , 'module_name'=>'Cases','where'=>"date_entered > '".date($GLOBALS['timedate']->dbDayFormat) ."'", 'order_by'=>'', 'select_fields'=>array('name', 'description', 'priority', 'status')));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$case_id = $result['entry_list'][0]['id'];
+
+echo 'GET Case fields: ';
+$result = $soapclient->call('portal_get_module_fields',array('session'=>$session , 'module_name'=>'Cases'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo 'CREATE Case: ';
+$result = $soapclient->call('portal_set_entry',array('session'=>$session , 'module_name'=>'Cases', 'name_value_list'=>array(array('name'=>'name', 'value'=>'a case'), array('name'=>'description', 'value'=>'A case created through webservices'))));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+$case_id = $result['id'];
+echo 'CREATE Note: ';
+$result = $soapclient->call('portal_set_entry',array('session'=>$session , 'module_name'=>'Notes', 'name_value_list'=>array(array('name'=>'name', 'value'=>'a note attached to a case'), array('name'=>'description', 'value'=>'A note created through webservices'))));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$note_id = $result['id'];
+echo 'ATTACH A FILE: ';
+$file = base64_encode('this would be the contents of your file');
+$result = $soapclient->call('portal_set_note_attachment',array('session'=>$session, 'note_attachment'=>array('id'=>$note_id, 'filename'=>'an attached file', 'file'=>$file)));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo 'ATTACH NOTE TO THE CASE: ';
+
+$result = $soapclient->call('portal_relate_note_to_module',array('session'=>$session, 'note_id'=>$note_id, 'module_name'=>'Cases', 'module_id'=>$case_id));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo 'GET NOTES RELATED TO A CASE: ';
+$result = $soapclient->call('portal_get_related_notes',array('session'=>$session , 'module_name'=>'Cases', 'module_id'=>$case_id, 'select_fields'=>array('name', 'description', 'filename')));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$note_id = $result['entry_list'][0]['id'];
+
+echo 'GET ATTACHMENT TO A NOTE: ';
+$result = $soapclient->call('portal_get_note_attachment',array('session'=>$session , 'id'=>$note_id));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+echo ' It Reads:' . base64_decode($result['note_attachment']['file']);
+
+echo 'LOGOUT: ';
+$result = $soapclient->call('portal_logout',array('session'=>$session));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+
+echo 'LOG BACK IN: ';
+$result = $soapclient->call('portal_login',array('portal_auth'=>array('user_name'=>$portal_name,'password'=>$portal_password, 'version'=>'.01'),'user_name'=>$user_name, 'application_name'=>'SoapTestPortal'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$session = $result['id'];
+
+
+echo 'GET CASES: ';
+$result = $soapclient->call('portal_get_entry_list',array('session'=>$session , 'module_name'=>'Cases','where'=>"date_entered > '".date($GLOBALS['timedate']->dbDayFormat) ."'", 'order_by'=>'', 'select_fields'=>array('name', 'description', 'priority', 'status')));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$case_id = $result['entry_list'][0]['id'];
+//FOR AUTHENTICATION YOU MUST DO A LOOK UP OF CASES BEFORE YOU TRY TO GET A NOTE RELATED TO A CASE
+echo 'GET NOTES RELATED TO A CASE: ';
+$result = $soapclient->call('portal_get_related_notes',array('session'=>$session , 'module_name'=>'Cases', 'module_id'=>$case_id, 'select_fields'=>array('name', 'description', 'filename')));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$note_id = $result['entry_list'][0]['id'];
+
+echo 'GET ATTACHMENT TO A NOTE: ';
+$result = $soapclient->call('portal_get_note_attachment',array('session'=>$session , 'id'=>$note_id));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+//does not have accesss to this case
+$case_id = 'bf90ee6f-c7fa-520c-f4b4-4212a55eb969';
+echo 'GET NOTES RELATED TO A CASE NOT RELATED TO THE LOGGED IN CONTACT: ';
+$result = $soapclient->call('portal_get_related_notes',array('session'=>$session , 'module_name'=>'Cases', 'module_id'=>$case_id, 'select_fields'=>array('name', 'description')));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$note_id = $result['entry_list'][0]['id'];
+
+
+
+echo 'LOGOUT: ';
+$result = $soapclient->call('portal_logout',array('session'=>$session));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+}
+?>
\ No newline at end of file
diff --git a/examples/SoapTestPortal2.php b/examples/SoapTestPortal2.php
new file mode 100644
index 00000000..2ae5e136
--- /dev/null
+++ b/examples/SoapTestPortal2.php
@@ -0,0 +1,105 @@
+$value){
+ $$name = $value;
+}
+echo <<
+
+
+
+
+EOQ;
+if(!empty($portal_name)){
+$portal_password = md5($portal_password);
+require_once('include/nusoap/nusoap.php'); //must also have the nusoap code on the ClientSide.
+$soapclient = new nusoapclient($GLOBALS['sugar_config']['site_url'].'/soap.php'); //define the SOAP Client an
+
+echo 'LOGIN: ';
+$result = $soapclient->call('portal_login',array('portal_auth'=>array('user_name'=>$portal_name,'password'=>$portal_password, 'version'=>'.01'),'user_name'=>$user_name, 'application_name'=>'SoapTestPortal'));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+$session = $result['id'];
+
+
+echo 'CREATE LEAD: ';
+$result = $soapclient->call('portal_set_entry',array('session'=>$session , 'module_name'=>'Leads', 'name_value_list'=>array(array('name'=>'first_name', 'value'=>'Test'), array('name'=>'last_name', 'value'=>'Lead'), array('name'=>'portal_name', 'value'=>'portal_name'), array('name'=>'portal_app', 'value'=>'SoapTestPortal'), array('name'=>'description', 'value'=>'A lead created through webservices'))));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+
+
+
+
+echo 'LOGOUT: ';
+$result = $soapclient->call('portal_logout',array('session'=>$session));
+echo 'HERE IS ERRORS: ';
+echo $soapclient->error_str;
+
+echo 'HERE IS RESPONSE: ';
+echo $soapclient->response;
+
+echo 'HERE IS RESULT: ';
+echo print_r($result);
+}
+
+?>
\ No newline at end of file
diff --git a/export.php b/export.php
new file mode 100644
index 00000000..ecce4584
--- /dev/null
+++ b/export.php
@@ -0,0 +1,78 @@
+id,$the_module, 'access') == ACL_ALLOW_ENABLED &&
+ (ACLAction::getUserAccessLevel($current_user->id, $the_module, 'admin') == ACL_ALLOW_ADMIN ||
+ ACLAction::getUserAccessLevel($current_user->id, $the_module, 'admin') == ACL_ALLOW_ADMIN_DEV))))){
+ die($GLOBALS['app_strings']['ERR_EXPORT_DISABLED']);
+}
+
+if(!empty($_REQUEST['uid'])){
+ $content = export(clean_string($_REQUEST['module']), $_REQUEST['uid'], isset($_REQUEST['members']) ? $_REQUEST['members'] : false);
+}else{
+ $content = export(clean_string($_REQUEST['module']));
+}
+$filename = $_REQUEST['module'];
+if($_REQUEST['members'] == true)
+ $filename .= '_'.'members';
+///////////////////////////////////////////////////////////////////////////////
+//// BUILD THE EXPORT FILE
+ob_clean();
+header("Pragma: cache");
+header("Content-type: application/octet-stream; charset=".$GLOBALS['locale']->getExportCharset());
+header("Content-Disposition: attachment; filename={$filename}.csv");
+header("Content-transfer-encoding: binary");
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
+header("Last-Modified: " . TimeDate::httpTime() );
+header("Cache-Control: post-check=0, pre-check=0", false );
+header("Content-Length: ".strlen($content));
+
+print $GLOBALS['locale']->translateCharset($content, 'UTF-8', $GLOBALS['locale']->getExportCharset());
+
+sugar_cleanup(true);
+?>
\ No newline at end of file
diff --git a/files.md5 b/files.md5
new file mode 100644
index 00000000..3005a4f5
--- /dev/null
+++ b/files.md5
@@ -0,0 +1,5781 @@
+ 'd3f150e4a5bed444763ebe8a81742a95',
+ './.htaccess' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './config.php' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './vcal_server.php' => '71af6a5b63afd073c3b9f54346072ef2',
+ './vCard.php' => 'fad02d68a8a43a6498ecd71b9edc8e90',
+ './themes/default/js/style.js' => 'de82df7a57a937110f3fa1ed85e752bb',
+ './themes/default/images/start_meeting_inline.png' => '64eff1bab8d34659c583ca84ce36dd2a',
+ './themes/default/images/join_meeting_inline.png' => 'edf7837b58451bbfb4e9e827d9a13a22',
+ './themes/default/images/join_imeeting.gif' => 'efd4a8747417083048b1a256d1d715cd',
+ './themes/default/images/create-record.gif' => '26aa1d757ecdaa1f886cd2bfb24eddd5',
+ './themes/default/images/chartBg.png' => 'b2688aa9e2154d8f6c25fc16f94bf6e7',
+ './themes/default/images/backtotop.gif' => '81711b80ed00519d3c474f5e6cb76062',
+ './themes/default/images/yes.gif' => '5d3f887e0dbcd70a4708534be3bfa41a',
+ './themes/default/images/yellow_camp.gif' => '593075b0d0f3dca3343e500f0bc1b4f7',
+ './themes/default/images/xls_image_inline.gif' => 'e68c72edc63f0f8ab22a9b2cd49909c4',
+ './themes/default/images/view_status.gif' => '4e9aeb2524553f094d4e3ad9de90839c',
+ './themes/default/images/view_inline.gif' => 'a2f2198fc7a571a88cf6661ac22b1d8b',
+ './themes/default/images/view.gif' => 'a2f2198fc7a571a88cf6661ac22b1d8b',
+ './themes/default/images/uparrow_inline.gif' => '305e2d1a68316e78cf9b7059b1fd632f',
+ './themes/default/images/uparrow_big.gif' => '52a135285919ae19e94af09fcc8b556c',
+ './themes/default/images/uparrow.gif' => '52a135285919ae19e94af09fcc8b556c',
+ './themes/default/images/unscheduled_inline.gif' => 'fa3ecb4c47ae31097e011c514945023b',
+ './themes/default/images/unpublish_inline.gif' => '75cf70a4e97129cd0a2f9c8edc915d9d',
+ './themes/default/images/txt_image_inline.gif' => 'd5a939c64c645f0ebc69e436372ca9e0',
+ './themes/default/images/themePreview.png' => 'c96b4e856127506f10b2bdd2b2c71764',
+ './themes/default/images/tentative_inline.gif' => '7ce50732e43bbdde45b954694b14ec4b',
+ './themes/default/images/tabRowRedBg.gif' => '87d0b28828b106e5563dddeff1110544',
+ './themes/default/images/tabRowPurpleBg.gif' => 'dbd04a0929960614f412bcae69e50d09',
+ './themes/default/images/tabRowOcherBg.gif' => 'b030681c7db2a9bed844878f13b2d92d',
+ './themes/default/images/tabRowGreenBg.gif' => '9c7ccd42de0599e6647d9bae6b99d54d',
+ './themes/default/images/tabRowGrayBg.gif' => '52a8224e5fd67b0dcf27e4ab02759e06',
+ './themes/default/images/tabRowBlueBg.gif' => '46bde460b237581287809ad4cb0b92d0',
+ './themes/default/images/sugarupdate.gif' => 'f5ea1dae8f86aeb87a536ceaaa09208d',
+ './themes/default/images/sugar_icon.png' => '8a98242f1aae07923bf0c7289405b93b',
+ './themes/default/images/sugar_icon.ico' => '92f1ffd4b2fef157613e48d2d2c7d9c8',
+ './themes/default/images/sugar_document.png' => '649eeaf6da95e66caa7f961a25995e65',
+ './themes/default/images/sugarColors.xml' => 'b62043bbf28f32ef441238580ef6cc8a',
+ './themes/default/images/sugar-yui-sprites-grey.png' => '25009499774224ae1f35d19cd65df6a6',
+ './themes/default/images/studio_undo.gif' => 'a8e4ca30f12eb152391782ebc1519264',
+ './themes/default/images/studio_save.gif' => '9a879acb70dda07e06e7719461ac7fe4',
+ './themes/default/images/studio_redo.gif' => 'd3a7aa42cc4d72047c6e97e36cec2d21',
+ './themes/default/images/studio_publish.gif' => '17b3a4edb24c576e9056fbf8a7d00576',
+ './themes/default/images/studio_history.gif' => 'ba2fdf14b162abf38ad809a4849944d8',
+ './themes/default/images/studio_blank.gif' => 'e2cc44b623bd7213fd8f18e1312f765a',
+ './themes/default/images/studio_addRows.gif' => 'b34fb09271096f03e497429c62a6c877',
+ './themes/default/images/studio_addField.gif' => 'f082ee05c412853e73f3e5fda1e0fa0f',
+ './themes/default/images/start_off.gif' => '0b357d4c67ded4c86d1c70c2c920ba70',
+ './themes/default/images/start.gif' => '52087392225974936d6ce7d2bb48babd',
+ './themes/default/images/sqsWait.gif' => '118ce5b9645fbadb2464ef0bd12ff895',
+ './themes/default/images/spacer.gif' => 'ed280a0ea3cc38f3cbbc747acfbef47d',
+ './themes/default/images/slot.gif' => '2859963e00e5456e56054fee1bb84964',
+ './themes/default/images/show_submenu_shortcuts.gif' => '2cf2f044333c693c0235eca6de839532',
+ './themes/default/images/show.gif' => 'db40a21333e315e8f66b58b8fe7c8663',
+ './themes/default/images/shortCutsBg.png' => '63e1fd767d54dcf0d43476bb7ac9bb4b',
+ './themes/default/images/searchMore.gif' => 'a69208b341a41938f65d88abe12f493b',
+ './themes/default/images/scheduled_inline.gif' => '9812da8482e09a3c4a2a54b99d717c20',
+ './themes/default/images/rightarrow_big.gif' => '6261e365b6f205ed19984eca672f3d4b',
+ './themes/default/images/rightarrow.gif' => 'aa8546cb02723ec14c7025159f254ade',
+ './themes/default/images/red_camp.gif' => '39110cd4e707f3f1ceb24dde98d65a9a',
+ './themes/default/images/publish_inline.gif' => '8a3c3103256b3592ec15c376835c0f04',
+ './themes/default/images/print.gif' => '0fc719a26f62a06dbfcacdb9b6447d4f',
+ './themes/default/images/previous_off.gif' => '62dc03295c496475543d5c3ee2ab51b9',
+ './themes/default/images/previous.gif' => 'c3d538b6c67aa6ce5fcc911cb062536f',
+ './themes/default/images/ppt_image_inline.gif' => '23151c677be1d3285d3acc07471ed39d',
+ './themes/default/images/plus_inline.gif' => '9c0fa5216c6c52a5ba56c2cc8d86740f',
+ './themes/default/images/plus.gif' => '2246c11e24af9ea5873c1b550e1a3850',
+ './themes/default/images/plug-in_Word.gif' => '7f1abcf70479023cf72375238bc2ff9f',
+ './themes/default/images/plug-in_Outlook.gif' => 'f63d982d8892f22bce62907e8ea30f76',
+ './themes/default/images/plug-in_Excel.gif' => 'ba18135f4a74f4d35f90f786bdbbdb87',
+ './themes/default/images/pdf_logo_small.jpg' => '683ba9871d516df7eb4725af810f3533',
+ './themes/default/images/pdf_logo.jpg' => '753f0a7f4f10c9d15de230d8615e2934',
+ './themes/default/images/pdf_image_inline.gif' => '9c36962a5402ca969451093579cd8261',
+ './themes/default/images/pdf_header_logo_pdf_header_logo_SugarCRMheader.jpg' => '11d1c10d3e0b0342d0280963a3218c36',
+ './themes/default/images/pdf_header_logo_img_left_arrow.jpg' => '42a3bd20247df71df2f3b4af7d79469d',
+ './themes/default/images/pdf_header_logo_company_logo.png' => '8b694e583b9342379a4d57eb313978f7',
+ './themes/default/images/pdf_header_logo_SugarCRMheader.jpg' => '8c44edddada692f70d809cd003789024',
+ './themes/default/images/otherTabRed.gif' => '2d7fcbfb0e362659e32b7fe07f8d88b7',
+ './themes/default/images/otherTabPurple.gif' => '25390753d4f155296e6593ebb01356e9',
+ './themes/default/images/otherTabOcher.gif' => '7d543589ef9a75e121a149e02adf6040',
+ './themes/default/images/otherTabGreen.gif' => '250a64b44884e23e183f1f6ee526bb1c',
+ './themes/default/images/otherTabGray.gif' => '1b5e086627979c27a1eb883db0562afb',
+ './themes/default/images/otherTabBlue.gif' => 'd7e3090fcbe30db44bba3513c604b913',
+ './themes/default/images/otherTab.png' => 'cb2887bd33e7adc62cfe69a9f0df1fa0',
+ './themes/default/images/otherTab.gif' => '87a4aca38528ca5aba1e54d6660e4a31',
+ './themes/default/images/open_multiple.gif' => 'c372922f378956f6b3bf56931d9ce2c8',
+ './themes/default/images/no.gif' => '262c91d4e47946e1d4aeff7f0f22614b',
+ './themes/default/images/next_off.gif' => '75c75524f41553432332b4ec0c99f9c7',
+ './themes/default/images/next.gif' => '834dc6b2b1b6aadd68f4677af017d5c7',
+ './themes/default/images/new_inline.gif' => '26aa1d757ecdaa1f886cd2bfb24eddd5',
+ './themes/default/images/more.gif' => '0fb09987f349939666c7ed893e336e87',
+ './themes/default/images/minus_inline.gif' => 'f051e7dc179ff6ab3f3c8b380f686501',
+ './themes/default/images/minus.gif' => '367ebb3ec8e01f8878dc252b56f0ab07',
+ './themes/default/images/menuarrow.gif' => 'b15abb42a41d475bf9f93755e971737e',
+ './themes/default/images/mass_update.gif' => '9b855db1e593f1e916dc478fa52648b6',
+ './themes/default/images/login-bg.png' => 'fbf77f7ca25f06f2fc77076360fb1614',
+ './themes/default/images/loading.gif' => '50c5e3e79b276c92df6cc52caeb464f0',
+ './themes/default/images/loadSignedDocument.gif' => 'afcccbee3447ffada5033d0cb7cb2b59',
+ './themes/default/images/listViewHR.gif' => 'eaa707253f1b7c4aab6f4841034ee7e3',
+ './themes/default/images/listViewBg.gif' => 'bb253dddfd00429a83bdb9e9a2b25305',
+ './themes/default/images/list.gif' => 'a4c8b293d7fa762d2c706bd68284cd67',
+ './themes/default/images/line.gif' => '5da41b8dfa2826bcecd84922b5e30ac7',
+ './themes/default/images/leftarrow_big.gif' => '1a1e6044a007b7f6be704544c1ab3d9b',
+ './themes/default/images/leftarrow.gif' => '5d56c1a6a00589aff97b8c9b9911d005',
+ './themes/default/images/jscalendar.gif' => '753d9d9f7e1e78f0fe75f25f8996692d',
+ './themes/default/images/info_inline.gif' => '9db230bae1c0ecdf0052806eb1b684f0',
+ './themes/default/images/info-layout.gif' => '6ba1fa243664fb3cfa0cab4b24592d2d',
+ './themes/default/images/info-help.gif' => 'ea88b2a7841ae9e84005b5c126df88e3',
+ './themes/default/images/info-add.gif' => '9c0fa5216c6c52a5ba56c2cc8d86740f',
+ './themes/default/images/img_right_arrow.jpg' => 'd4f8e8aa3ab1a663d1a55f8e3275e5d7',
+ './themes/default/images/img_loading.gif' => '00ef871b291bc03a497d608a5bd8ec99',
+ './themes/default/images/img_left_arrow.jpg' => '42a3bd20247df71df2f3b4af7d79469d',
+ './themes/default/images/img_close_search.gif' => '357d905eec06febe8ed2d3948f2eadcc',
+ './themes/default/images/id-ff-vcard.png' => '5f31da1405a984feb4e91bf61d54e336',
+ './themes/default/images/id-ff-select.png' => '721e35ee703e8c2a903cc34fc34c0160',
+ './themes/default/images/id-ff-remove.png' => '18ab7c295adec58e3512988e2a8a9326',
+ './themes/default/images/id-ff-copy.png' => '7e6cc0abddb5e5f368da4457d7fcfc3c',
+ './themes/default/images/id-ff-clear.png' => 'f47d3cd19fdbfa8540024af7a5831dcc',
+ './themes/default/images/id-ff-add.png' => '3d14fd627f15f5d8221a2321d0a8f8c4',
+ './themes/default/images/icon_therevisions.gif' => '3f0f5b717ad53c0d551e5b03e9268f8b',
+ './themes/default/images/icon_sale.gif' => '709cf48456c82ccbfa4a038817e0c5e1',
+ './themes/default/images/icon_person.gif' => '19a7896996fac88e1bf4c7314cf126f2',
+ './themes/default/images/icon_package_create.gif' => 'e728aedae3a86f557a4431bcfb3b11b0',
+ './themes/default/images/icon_package.gif' => '6fe230ae81d0c1bfdc02f12554bfe5a6',
+ './themes/default/images/icon_opportunity.gif' => 'e8c75374653922482d1d5b71ee569909',
+ './themes/default/images/icon_new_package.gif' => 'e728aedae3a86f557a4431bcfb3b11b0',
+ './themes/default/images/icon_issue.gif' => 'dbe274a88ad4b289cf1f80be391620b3',
+ './themes/default/images/icon_iFrames_32.gif' => '264e84da5b4c48a4970f71550df86084',
+ './themes/default/images/icon_home.gif' => '15a02d5f4fd368aff08023822401bd39',
+ './themes/default/images/icon_file.gif' => '0037a12c8c4b623c5e0ea1803a6e95b5',
+ './themes/default/images/icon_expression_types.gif' => '34e7314d67aad0251bce11b1f7912aba',
+ './themes/default/images/icon_email_view3.gif' => '77592a420b9f1fd37da050c94083e9c3',
+ './themes/default/images/icon_email_view2.gif' => '1702d53e8aa6f660dd29d31b54bfa43e',
+ './themes/default/images/icon_email_view1.gif' => '7f5675af33f000f9fc9b48519b416c54',
+ './themes/default/images/icon_email_view.gif' => '0ddc870ec847e406a483d431de0c3b27',
+ './themes/default/images/icon_email_sugfolder_exp.gif' => '736434e15eb5273ed2adabb66451f7f7',
+ './themes/default/images/icon_email_sugfolder.gif' => '127016b7228674ac442ec5266caa3f79',
+ './themes/default/images/icon_email_settings.gif' => '129bbd92f356c68e63a94bcd53a1c225',
+ './themes/default/images/icon_email_send.gif' => '3069253177ad510279278f69f0cd5d78',
+ './themes/default/images/icon_email_save.gif' => '0c7f54e7bfee5ea8b782a8df7e52aac2',
+ './themes/default/images/icon_email_replyall.gif' => '5cad79693b03ece0364497e1538df029',
+ './themes/default/images/icon_email_reply.gif' => '2df1e0f100bc7e666a3efec19ed87d2d',
+ './themes/default/images/icon_email_relate.gif' => '74242467860ceb4110ff97449881e913',
+ './themes/default/images/icon_email_options.gif' => '9417e3643754ebb64efd1c8cdac2574f',
+ './themes/default/images/icon_email_mark.gif' => '59bd3232c7d2a3797caff08f111e47db',
+ './themes/default/images/icon_email_fullscreen.gif' => 'dcd3515feee571f3126eb2cda9be9d99',
+ './themes/default/images/icon_email_forward.gif' => 'ad895eb9b28efafa360141b2d463d07a',
+ './themes/default/images/icon_email_folder_sent.gif' => '84f050eabd42d189ff7ec33ef604a2a9',
+ './themes/default/images/icon_email_folder_grp.gif' => '95af0dfe5619fefcbe5e735a2f88e5d2',
+ './themes/default/images/icon_email_folder_exp.gif' => '34630bcf92e238c09294950a56533de7',
+ './themes/default/images/icon_email_folder_drafts.gif' => '44aeed88a8c7eaa04ceaa47980c264a4',
+ './themes/default/images/icon_email_folder_archives.gif' => 'a5d423896f3d34e7dae5a99788b9096d',
+ './themes/default/images/icon_email_folder.gif' => 'c84e3a04f0553457f2758c17328dcc64',
+ './themes/default/images/icon_email_delete.gif' => 'de0c2510e40fc90da261c3f24060489f',
+ './themes/default/images/icon_email_create.gif' => '1ed2501ee71cef192e87836feb66ecb8',
+ './themes/default/images/icon_email_compose.gif' => 'cbbab42834d7a19f657545f9fdf01dd4',
+ './themes/default/images/icon_email_check.gif' => '97f4bb665ca71c935b0c0d6a97156c4c',
+ './themes/default/images/icon_email_attach.gif' => 'cb6c0e533206569e383429c25c4f090d',
+ './themes/default/images/icon_email_assign.gif' => '892c9f96578002195ec4ea0f233fc8a9',
+ './themes/default/images/icon_email_archive.gif' => '01fe1cad58260b7bf63788e9ce5b68e9',
+ './themes/default/images/icon_email_addressbook.gif' => 'd950e8a8497cb37b660281d332a2767c',
+ './themes/default/images/icon_document.gif' => '167aee1d934419e6e8aa6235fee350ea',
+ './themes/default/images/icon_company.gif' => 'b2ef078b5afa7f07bbbc13587bc9990b',
+ './themes/default/images/icon_basic.gif' => '71bcdef4548fad731d44fc681e3a6599',
+ './themes/default/images/icon_back.gif' => '215aa2a3bcf6e67e0fb2aa25da2e8871',
+ './themes/default/images/icon_assistant.gif' => '9e75a064532dc80f6c44ffae3aa6501b',
+ './themes/default/images/icon_Users_32.gif' => 'c63b38ad112782578822a612fb102952',
+ './themes/default/images/icon_Trackers_32.gif' => '1fd19adde4d7ca809ad287c45a45100c',
+ './themes/default/images/icon_TrackerSessions_32.gif' => '5071e66a3fa459669f5ad5a2e4a6eaf9',
+ './themes/default/images/icon_TrackerQueries_32.gif' => '0c8a6bf47267515ea3b2be8b5ea16c73',
+ './themes/default/images/icon_TrackerPerfs_32.gif' => '998c775c84226d9a6d8d7a2cfee828b8',
+ './themes/default/images/icon_Teams_32.gif' => '1042e299464990cdbf312460171dbc6b',
+ './themes/default/images/icon_Tasks_32.gif' => '59dd94dfcfaed6273295f22658c77a75',
+ './themes/default/images/icon_Tasks.gif' => '91d11b48558775d6f940a4fe2fef9d8f',
+ './themes/default/images/icon_Targets_32.gif' => 'a791b861efaa860b3f356ce5644982ad',
+ './themes/default/images/icon_SugarPortal.gif' => 'bd9b140fefd8d3c8d25e5602d34455b1',
+ './themes/default/images/icon_SugarNews_32.gif' => '13513ac06c13bbcc28acddce996e79ba',
+ './themes/default/images/icon_SugarFeed_32.gif' => '91906aa110e0737571bdce7e982d6f5b',
+ './themes/default/images/icon_SugarFeed.gif' => 'c121b4f625c494d54a7c6e60a7159e73',
+ './themes/default/images/icon_Subpanels.gif' => '99b9a4c23b9d4d52c80db23b65241032',
+ './themes/default/images/icon_Studio.gif' => '6cff1d99350160b388f5a1ac529c3ff9',
+ './themes/default/images/icon_ShortcutBar.gif' => '4dd63de4f48c7600a9b463d579cadcb9',
+ './themes/default/images/icon_SearchForm.gif' => '9246e8668eb71fd1e2ebd20b6cb60ba1',
+ './themes/default/images/icon_SPUploadCSS.gif' => 'd912a8d76735acc061b566c950976995',
+ './themes/default/images/icon_SPSync.gif' => 'bc384598e25a00faa9e2efd942b357a0',
+ './themes/default/images/icon_Rss_32.gif' => 'adf9e9567964a6faf01005e83051d974',
+ './themes/default/images/icon_Reports_32.gif' => 'e25b26fb6a2a086087c81f9e2176b5e1',
+ './themes/default/images/icon_Releases_32.gif' => '8151d6de8614fdc220860f7e79b417b9',
+ './themes/default/images/icon_Relationships.gif' => 'ff28b08d448d6e1c732b2cf29f6096a3',
+ './themes/default/images/icon_Quotes_32.gif' => '74d821c6b4656e3b5a6548c5a854cb0f',
+ './themes/default/images/icon_QuickCreate.gif' => '54cd777aafd156c049999c8b783cfa58',
+ './themes/default/images/icon_Prospects_32.gif' => 'a791b861efaa860b3f356ce5644982ad',
+ './themes/default/images/icon_Prospects.gif' => '5e5099f8f374fb63cb236e926a575938',
+ './themes/default/images/icon_Projects_32.gif' => '009174ec22ef8f1af05e0e06f55d5916',
+ './themes/default/images/icon_Project_32.gif' => '009174ec22ef8f1af05e0e06f55d5916',
+ './themes/default/images/icon_ProjectTask_32.gif' => '1092296917891851fc078c5e2f4d57df',
+ './themes/default/images/icon_ProjectTask.gif' => '4c826a1341be8b80fae67d6452ad087e',
+ './themes/default/images/icon_Project.gif' => '22a4aefdc49f3188585ab8103e4fd7c4',
+ './themes/default/images/icon_Products_32.gif' => '6e740000d2e08d22d4e24d63e84e8c9c',
+ './themes/default/images/icon_Product_Types_32.gif' => '1f5728ad9c07d67979eed73af625efbf',
+ './themes/default/images/icon_ProductTypes_32.gif' => '1f5728ad9c07d67979eed73af625efbf',
+ './themes/default/images/icon_ProductCategories_32.gif' => 'ce6e3a4a347467957275a5c0eee5e311',
+ './themes/default/images/icon_Portal.gif' => '4a107249e6596b0e0c724e7734fae92d',
+ './themes/default/images/icon_Popup.gif' => '0c35a469688f5014198092cca23cc6df',
+ './themes/default/images/icon_Phone.gif' => '69561dd53df8efc35c0919efcf546d2c',
+ './themes/default/images/icon_Opportunities_32.gif' => '787b58f02e8c7c118841abbffcf72f42',
+ './themes/default/images/icon_Opportunities.gif' => 'bb0d0125d317f78b6265fbcd7b6d827d',
+ './themes/default/images/icon_OpenTasks_32.gif' => 'd0c52359674d719e1e4da4c5ee3b3064',
+ './themes/default/images/icon_Notes_32.gif' => '38614c8b0fb8673bbf7118bc62d3571b',
+ './themes/default/images/icon_Notes.gif' => 'cdee31ac66f080bd6e862e0dcfcf1358',
+ './themes/default/images/icon_NewModule.gif' => '700412f4a1535f58dc358af2c15ddba4',
+ './themes/default/images/icon_MyTasks_32.gif' => '5af76e5299c5e6a2946ce3ed13d64d5f',
+ './themes/default/images/icon_MyPortal_32.gif' => '264e84da5b4c48a4970f71550df86084',
+ './themes/default/images/icon_ModuleBuilder.gif' => 'b0f8e050fa92fd761fce476dc361e9b9',
+ './themes/default/images/icon_MobileLayouts.gif' => '01d983c77ce576f3fbb42a67cd43b901',
+ './themes/default/images/icon_Meetings_32.gif' => '7cbed9de72d3c9e9e2aed8997ea4cd82',
+ './themes/default/images/icon_Meetings.gif' => '6b25f5507719dd934fdad9ae12125935',
+ './themes/default/images/icon_ListView.gif' => '557ee4b0eaa08c7566f5ff4522207bc1',
+ './themes/default/images/icon_Leads_32.gif' => '5c7ee135592a05a145456af63077fb3d',
+ './themes/default/images/icon_Leads.gif' => 'dd27a17fc38fb8b01398e35ac3d39fd0',
+ './themes/default/images/icon_Layouts.gif' => '4a107249e6596b0e0c724e7734fae92d',
+ './themes/default/images/icon_Labels.gif' => 'e7d722a222050cb2e92431c460ecad8a',
+ './themes/default/images/icon_KBDocuments_32.gif' => '605c4a7cac4ccc184ac013b9a6d4016e',
+ './themes/default/images/icon_KBDocuments.gif' => 'd74530d24f2e0bd57ef6681dbb20fe94',
+ './themes/default/images/icon_JotPad_32.gif' => '04e2a63f3d3afbe1de3cd6048cec1f50',
+ './themes/default/images/icon_JotPad.gif' => '1e5d01a07e4f988611af6677a037f318',
+ './themes/default/images/icon_Invaders_32.gif' => 'c669d4aff0cef7ab73e051c1443d8b3c',
+ './themes/default/images/icon_Forecasts_32.gif' => '20a3de4d107c962b0847d9dd7174cdbd',
+ './themes/default/images/icon_Fields.gif' => '39677bcb6670ffd88f083419d9f9d1c5',
+ './themes/default/images/icon_Feeds_32.gif' => 'adf9e9567964a6faf01005e83051d974',
+ './themes/default/images/icon_FavoriteReports_32.gif' => '4fe2369941b3672b5c8f6594fcd15825',
+ './themes/default/images/icon_Emails_32.gif' => '3626aef290eda2f9004d7e4d2c2e0791',
+ './themes/default/images/icon_Emails.gif' => '35464266090cc9d38551bcd2e0edf969',
+ './themes/default/images/icon_EmailTemplates_32.gif' => '3626aef290eda2f9004d7e4d2c2e0791',
+ './themes/default/images/icon_EmailAddresses_32.gif' => '834acafa896baa468fc22186d2cff2e4',
+ './themes/default/images/icon_EmailAddress.gif' => '6877d848391e0165e1106864b3d6d4cb',
+ './themes/default/images/icon_EditView.gif' => '2b40c926f5bec858704c1daa83f1eac9',
+ './themes/default/images/icon_DropDownEditor.gif' => '18036f2acc73b67b6168dec5798600bd',
+ './themes/default/images/icon_Documents_32.gif' => '945c2c18f5a9e119178cdebdb8f638c4',
+ './themes/default/images/icon_Documents.gif' => '3f0f5b717ad53c0d551e5b03e9268f8b',
+ './themes/default/images/icon_DetailView.gif' => '7e52a99c33829596b0a3210c5202a12d',
+ './themes/default/images/icon_DeleteFull.gif' => 'd9c1deab8458cf93d645d91dfba6207d',
+ './themes/default/images/icon_Delete.gif' => '501840cefe034dbdc2e4c2b54997cad5',
+ './themes/default/images/icon_Dashlet.gif' => '13af871521b34dac496b57b0e2c4eaa2',
+ './themes/default/images/icon_ConvertLead.gif' => 'a06af998d584934fb71a417fbb47de23',
+ './themes/default/images/icon_Contracts_32.gif' => '5c01388d8c6d287f07d4ade8a71882e3',
+ './themes/default/images/icon_Contacts_32.gif' => 'eeb8eb818c7813f77b479f7e1001d9d3',
+ './themes/default/images/icon_Contacts.gif' => '5c25642d0e7373ff3dc8670ef61fcfc1',
+ './themes/default/images/icon_Connectors.gif' => '741a28001f099adc694252df889a97ab',
+ './themes/default/images/icon_ConnectorSearchFields_16.gif' => '071b4fa50987f24aa8e439ad2c94977e',
+ './themes/default/images/icon_ConnectorSearchFieldsOver.gif' => '892037f83ee9b1a78b0968b64f008aa5',
+ './themes/default/images/icon_ConnectorSearchFields.gif' => '670c96db0ae37d1e7950ceb81f1f22bb',
+ './themes/default/images/icon_ConnectorMap_16.gif' => '21a1a3515ae02ed5fc0d8492a892f690',
+ './themes/default/images/icon_ConnectorMapOver.gif' => '5c4beb392911c203ac8ab9f55ca80efb',
+ './themes/default/images/icon_ConnectorMap.gif' => '28f0ba3ad323e08f917693cd5ef3286f',
+ './themes/default/images/icon_ConnectorEnable_16.gif' => '139c5d2ed03e09e69c2427aa461d0abb',
+ './themes/default/images/icon_ConnectorEnableOver.gif' => '4c68d747832656f8a373308a5571aa2c',
+ './themes/default/images/icon_ConnectorEnable.gif' => '6c53d58521fee6d29e35583f11f80b7c',
+ './themes/default/images/icon_ConnectorConfig_16.gif' => 'c455945b702d168f0c55f630bc909a03',
+ './themes/default/images/icon_ConnectorConfigOver.gif' => 'f24b62af2fc23e3c5f675a7454968688',
+ './themes/default/images/icon_ConnectorConfig.gif' => '1024aa4e200381bf481888131023b5a2',
+ './themes/default/images/icon_Column_3.gif' => '3a967a62ac79e9be7d953730c550bf14',
+ './themes/default/images/icon_Column_2.gif' => 'bf25350fb235d301601b87b687160d17',
+ './themes/default/images/icon_Column_1.gif' => 'b819b73077afdfd13c3f84f77e1cb8c5',
+ './themes/default/images/icon_Charts_Vertical_32.gif' => 'e8a3b35973d514875fdb9507728357e3',
+ './themes/default/images/icon_Charts_Vertical.gif' => 'f15275758c20b1c829c9ed3dcc88d3c1',
+ './themes/default/images/icon_Charts_Pie_32.gif' => '1dd970dabcb5de6a9fa742893ad28c3b',
+ './themes/default/images/icon_Charts_Pie.gif' => 'b65cc013f3b9c6b50e46722fbc027cf4',
+ './themes/default/images/icon_Charts_Horizontal_32.gif' => 'e84af669b14b4288b699a0d6d5dd17fc',
+ './themes/default/images/icon_Charts_Horizontal.gif' => '928245490307b01d3cca736630187fe1',
+ './themes/default/images/icon_Charts_GroupBy_32.gif' => 'a1c69c3e8be5e54bd2b6be6dd97d1835',
+ './themes/default/images/icon_Charts_GroupBy.gif' => 'b444f2b91a51489e19c3f56b859121da',
+ './themes/default/images/icon_Charts_Gauge_32.gif' => 'c4ba44d5ad9209d6e37565ec1faf91ea',
+ './themes/default/images/icon_Charts_Funnel_32.gif' => '9d60fb449cb26d8f13ff4fd05dd17451',
+ './themes/default/images/icon_Charts_Funnel.gif' => 'fbbeb7f36751a847b43cbc29042bef83',
+ './themes/default/images/icon_Cases_32.gif' => 'e74f7b4a4f513c517351fe0e15ec9f7d',
+ './themes/default/images/icon_Cases.gif' => '86c8c9ce83c9feab641687fa968d1705',
+ './themes/default/images/icon_Campaigns_32.gif' => '4b2651b74c0df08fb38da1c50ad55540',
+ './themes/default/images/icon_Campaigns.gif' => 'd326b30e1f37d6b1ae7585bec2603f75',
+ './themes/default/images/icon_CampaignLog_32.gif' => '4b2651b74c0df08fb38da1c50ad55540',
+ './themes/default/images/icon_Calls_32.gif' => 'b1396f0d4aad67469aade38e1c1ad57a',
+ './themes/default/images/icon_Calls.gif' => '70a325dc66ac4330ba4920655cc9d2f1',
+ './themes/default/images/icon_Calendar_32.gif' => 'b438788c79b226656fc335ab4e3b282d',
+ './themes/default/images/icon_Bugs_32.gif' => '007a66380bb5ac5a9053c1e3932c4452',
+ './themes/default/images/icon_Bugs.gif' => 'daa1bafd411fa579d13aeb01832fe018',
+ './themes/default/images/icon_BasicSearch.gif' => '34138a6f18eda6680e2b6ac129888e74',
+ './themes/default/images/icon_Application.gif' => '9f19f9a35c1269591cf0f4503fb4b0a4',
+ './themes/default/images/icon_AdvancedSearch.gif' => '5a13f19316a76136a13e23f39bce0c73',
+ './themes/default/images/icon_AdminThemes.gif' => '3dabb98180140be0f27983c53fb93fa3',
+ './themes/default/images/icon_AdminPDF.gif' => 'c4cd278746674615533992c06439c5c5',
+ './themes/default/images/icon_AdminMobile.gif' => '4aa8c94a81f105a4823afdf79f013e3d',
+ './themes/default/images/icon_Address.gif' => '01031291c5fb1552e40d63f1b08c0314',
+ './themes/default/images/icon_Activities.gif' => '1e5d01a07e4f988611af6677a037f318',
+ './themes/default/images/icon_Accounts_32.gif' => 'b0c893a480c52340a287af42547b4977',
+ './themes/default/images/icon_Accounts.gif' => '34ca712c6aa6b7ba68882e330423c057',
+ './themes/default/images/icon_A1_newmod.gif' => '71bcdef4548fad731d44fc681e3a6599',
+ './themes/default/images/iFrames.gif' => '0a0e964460018c0dc9295d9c48773952',
+ './themes/default/images/hide_submenu_shortcuts.gif' => '4faa81f7be7484ed9442ad726ec56bcb',
+ './themes/default/images/hide.gif' => '63afbcf6fa1496c0e933c26bde33e1be',
+ './themes/default/images/helpInline.gif' => '904c4318b2195909683e239f45fe7543',
+ './themes/default/images/help.gif' => 'ea88b2a7841ae9e84005b5c126df88e3',
+ './themes/default/images/help-dashlet.gif' => 'ea88b2a7841ae9e84005b5c126df88e3',
+ './themes/default/images/h3Arrow.gif' => '0a8858f4bda73af356182ba99ae6b4d4',
+ './themes/default/images/grouped-menu.png' => 'f502f8f39e6665137b2d5b81f19608c3',
+ './themes/default/images/grouped-menu-arrow.png' => 'd3d5c430b05cf86a8f0512d31d4bbd1c',
+ './themes/default/images/green_camp.gif' => 'c2b67c21d37fd3d49b6f01b062f36529',
+ './themes/default/images/getLatestDocument.gif' => 'ca3c6fbc6d4d6d39a637eed0bfc4a08a',
+ './themes/default/images/formButtonBgOn.gif' => '668b0ee95cf4b0792c03f91a82fcfb91',
+ './themes/default/images/formButtonBg.gif' => 'd9a0a446c17015d99879870c0ae585c1',
+ './themes/default/images/form-button-primary-bg.png' => '29ec1da2209c258fd2b5015546b485a0',
+ './themes/default/images/form-button-bg2.png' => 'fd1a32fc28d0aaae12634caeb8dc2ce5',
+ './themes/default/images/form-button-bg.png' => '3f99c9b8e654262ced246accca06bf98',
+ './themes/default/images/fonts.normal.icon.gif' => 'd15ee190de151df2fc02366847a42333',
+ './themes/default/images/fonts.largest.icon.gif' => '93227b0e5335d1c749d0c62f932f7246',
+ './themes/default/images/fonts.larger.icon.gif' => '8ed79085035c19fa3a08a57821ccff68',
+ './themes/default/images/export.gif' => '3141bb408338e95954f49498ab2074a3',
+ './themes/default/images/end_off.gif' => '6f2b185bd8b4f04255184d7c3b972be4',
+ './themes/default/images/end.gif' => '99ec17980972c2227478df9ca2b09abf',
+ './themes/default/images/emptyTabSpace.gif' => 'e8f77ea4d4936a67560b361411f260ac',
+ './themes/default/images/editview.gif' => 'a63bb099ded39d833199d47c9fdb3ead',
+ './themes/default/images/editlabels.gif' => 'a63bb099ded39d833199d47c9fdb3ead',
+ './themes/default/images/editfields.gif' => '163d3292d1080120c96e991c9d8c411a',
+ './themes/default/images/edit_wizard.gif' => 'fe64a594539d3561d50fd34fd94143a5',
+ './themes/default/images/edit_inline.gif' => '6ba1fa243664fb3cfa0cab4b24592d2d',
+ './themes/default/images/dp-tr.png' => 'dc0c80673320172a14e92ab631d3ed8c',
+ './themes/default/images/dp-tr-plain.png' => '9a086d27cce5acee324de36d269c4037',
+ './themes/default/images/dp-tr-menu.png' => 'c45d04f7abaf8ee0ede320bf80901bf5',
+ './themes/default/images/dp-tr-dc.png' => 'a70774042ea157126e9e9c60f7b5c4ac',
+ './themes/default/images/dp-tl.png' => 'e156192dca5a7f92013d3ae4de28caec',
+ './themes/default/images/dp-tl-plain.png' => '3cb7288c2838e1831503ea76385737c9',
+ './themes/default/images/dp-tl-menu.png' => '8c0262afcfa95ceef0bbde8d8dc27cf9',
+ './themes/default/images/dp-tl-dc.png' => '0baec93b29924b99fb251a1dc3c48c83',
+ './themes/default/images/dp-mr.png' => 'fc81419f35c69bedd9c3ca9537459d47',
+ './themes/default/images/dp-mr-menu.png' => 'c5c544ba6107099bcbc64da39c689958',
+ './themes/default/images/dp-mr-dc.png' => '6689c998caee352c40a35bc4784cddbf',
+ './themes/default/images/dp-ml.png' => 'fb83ca1c1205fe18aced640505ce84e1',
+ './themes/default/images/dp-ml-menu.png' => 'a1b762e0917555e632a19a445fc7d989',
+ './themes/default/images/dp-ml-dc.png' => '938c8f0a042cbcbac95bf6e25bca6c4c',
+ './themes/default/images/dp-hd.png' => '3d02379f218609b1f8cc7b9d4cae33ef',
+ './themes/default/images/dp-hd-plain.png' => 'e2a0b905436223a576c577edfb710824',
+ './themes/default/images/dp-hd-menu.png' => '0b6b43ea0d1b59b13f2145f206869476',
+ './themes/default/images/dp-hd-dc.png' => '97e314b313aca983b4703ee09654d204',
+ './themes/default/images/dp-ft.png' => 'f5138f10cd7684baef4d39e41b83a201',
+ './themes/default/images/dp-ft-menu.png' => 'b056479142f3273d81f3c74a74b7ada8',
+ './themes/default/images/dp-ft-dc.png' => '37fc519efa67ff3ea303326ec9a612cf',
+ './themes/default/images/dp-br.png' => 'e25404e74fa6dc901955602668ea76cf',
+ './themes/default/images/dp-br-menu.png' => '81098441075f930258a786eefd758af0',
+ './themes/default/images/dp-br-dc.png' => '85cb39f7aac2fc0f27ead5eb39369704',
+ './themes/default/images/dp-bl.png' => '55adcc6277ca6d1c41421f4553e02d47',
+ './themes/default/images/dp-bl-menu.png' => 'a76e8bf715c6896931b70dfa11be4435',
+ './themes/default/images/dp-bl-dc.png' => '465eb50a7b0f01206dc1a48bfa5bd210',
+ './themes/default/images/dp-bd.png' => 'c68c1d8c3a75459b069ce94a4ce8f10a',
+ './themes/default/images/dp-bd-top-menu.png' => '8db395d44db4d024cffdfcac9d56c02e',
+ './themes/default/images/dp-bd-menu.png' => '9804920a98449b0c35b81204e47adf72',
+ './themes/default/images/dp-bd-dc.png' => '7db8abd6da3a8026cd980ed9fd5c0ff4',
+ './themes/default/images/downarrow_inline.gif' => '505e2477efbea90592a169aafbe41794',
+ './themes/default/images/downarrow_big.gif' => 'b4ffaa11d20c5433c8ce6f392b27c02d',
+ './themes/default/images/downarrow.gif' => '4d89350bedf353e12294bad2c2fe5ae6',
+ './themes/default/images/doc_image_inline.gif' => '1f4a7d82e86352ac2121acc844dc6d4a',
+ './themes/default/images/detailview.gif' => '2645ccf6df6dc9d58ce65f3d1c6d2b67',
+ './themes/default/images/detailViewBg.gif' => '29d8425fa2b3989a037bf2128584d6f8',
+ './themes/default/images/delete_inline.gif' => 'd09e3affa3e277be307ec1af748b3364',
+ './themes/default/images/delete.gif' => '650572d2b216e8e1cc3c2e7ffbad4df1',
+ './themes/default/images/def_image_inline.gif' => 'b31f890084d972950ae50e513e4ef1c6',
+ './themes/default/images/decline_inline.gif' => 'd9e006d8758ad871d7395cf931dec405',
+ './themes/default/images/dcmenugrade.png' => '45ee854213189e9b16b8994292f19c24',
+ './themes/default/images/dce_Settings.gif' => 'b255bb8ae39976fd6c83c3037d090f36',
+ './themes/default/images/dcMenuDivider.png' => '7eda7509cde527fbeb7556ee0208cfed',
+ './themes/default/images/dashlet-header-refresh.gif' => '8f48d8c61ed6dd5890954ded347f6550',
+ './themes/default/images/dashlet-header-edit.gif' => '1f3d5009fc12cd0117903d8959a559e9',
+ './themes/default/images/dashlet-header-close.gif' => 'dba10edcd9ab300f2483dc8de161e91a',
+ './themes/default/images/currentTabRed.gif' => '61f911fae96b5f90d2525613bd3b1dc7',
+ './themes/default/images/currentTabPurple.gif' => '3cc2d348b8073e73ececbc4ae361220b',
+ './themes/default/images/currentTabOff.gif' => 'e0a67ebcd0eec021c19f4ab454759e8f',
+ './themes/default/images/currentTabOcher.gif' => '4852317d212d6e5a1ce7b0036dd77e45',
+ './themes/default/images/currentTabLinkBg.gif' => 'acc41261d49919fc0b20c3bb009d3af0',
+ './themes/default/images/currentTabGreen.gif' => '085f9927ac24c8311c3779c3d6733440',
+ './themes/default/images/currentTabGray.gif' => '95c3cb31673ed2da9e979938a48c09c8',
+ './themes/default/images/currentTabBlue.gif' => '294f6bb00ba34db9b2227dd7140651ef',
+ './themes/default/images/currentTab.png' => '48a2b7fa468514d9fe6e00bbf886e201',
+ './themes/default/images/currentTab.gif' => '6f2002081ed96fd0931f686d24bacd78',
+ './themes/default/images/company_logo.png' => '4f040bdb68c3b732fa54f2d96fd0df7b',
+ './themes/default/images/colors.sugar.icon.gif' => 'e38d443ab9b82145d88c0c97fed53789',
+ './themes/default/images/colors.red.icon.gif' => 'b1168092ee831ee08b535fe066d11246',
+ './themes/default/images/colors.purple.icon.gif' => 'b89bae62c86fc22236ba93c1f2b1a245',
+ './themes/default/images/colors.orange.icon.gif' => '3a5a16d7a8c5e411bb63aefe58b75e17',
+ './themes/default/images/colors.green.icon.gif' => '248e791c8a93cb006b630112a44d71b7',
+ './themes/default/images/colors.gray.icon.gif' => '77fe1105f4be1d9b336ec346b17891dc',
+ './themes/default/images/colors.blue.icon.gif' => '48d30c2c20d84f45455008f6254e21e1',
+ './themes/default/images/close_inline.gif' => '4706ecc190ed6d3cf0024cfdeef7540a',
+ './themes/default/images/close_button_24.png' => '60a360437a59cd91f613a88f108c6f1b',
+ './themes/default/images/close.gif' => '00a1e63ea66cad36fd357afcec227e3b',
+ './themes/default/images/check_inline.gif' => '3fd7b54b12de5ee794dd44c53c7d9b7d',
+ './themes/default/images/calendar_previous.gif' => '600d00e3bd8a384dc5f851646c513390',
+ './themes/default/images/calendar_next.gif' => 'f128d2e8cff00f25d3fc6aca822acc54',
+ './themes/default/images/calendarHeaderBg.gif' => 'e737dc503d8ebfd782d55ecbb9fa3ab7',
+ './themes/default/images/blank.gif' => 'fc94fb0c3ed8a8f909dbc7630a0987ff',
+ './themes/default/images/bgRed.gif' => '1df40fd5435907a1fed4d4b181ea6b46',
+ './themes/default/images/bgPurple.gif' => 'c1b6d97ad95f8388da34d4a4175a81d3',
+ './themes/default/images/bgOcher.gif' => '982082d036e99833dc1f1a483fce2a5d',
+ './themes/default/images/bgGreen.gif' => '3bfe3b4d1fc2f0ef39f90507fb4a43d2',
+ './themes/default/images/bgGray.gif' => '1c6dfddeae3b2d18974506837c29ccef',
+ './themes/default/images/bgBtnPurple.gif' => '0c88b16eb4908ef062773520a9211fb1',
+ './themes/default/images/bgBtnOrange.gif' => 'f85be7940606135360db38bb8dc4ad36',
+ './themes/default/images/bgBtnGreen.gif' => 'f278617bef25b52737a1c1c535c85bca',
+ './themes/default/images/bgBtnGray.gif' => 'bc636fcc0fde952eee600795e26f3568',
+ './themes/default/images/bgBtnBlue.gif' => 'd81f5ba78f4717e5723adf3843437ee4',
+ './themes/default/images/bgBtn.gif' => 'ad46bd5437826c67f8919874f6f3bea0',
+ './themes/default/images/bgBlue.gif' => 'def431ff46dac5dc23aa47a531b13343',
+ './themes/default/images/bg.gif' => 'e542169ee5ed28cdb45b3996603193d6',
+ './themes/default/images/basic_search.gif' => 'afc9992d8567a78b5b7df196549eb29a',
+ './themes/default/images/bar_loader.gif' => 'e67d85a8d2d4021514815d0ff4d65173',
+ './themes/default/images/attachment.gif' => 'ad2683b97bcee20be7ba039d3259b2fa',
+ './themes/default/images/arrow_up.gif' => '3c0164a46adc6ddcb9fec3cf1129e190',
+ './themes/default/images/arrow_down.gif' => '7ae60aa70170713428e265b1cc695291',
+ './themes/default/images/arrow.gif' => 'e351c2d5a2ad28ee72a15e1d2ce7e2bd',
+ './themes/default/images/advanced_search.gif' => 'd0022a5800ff6a11b04c6e27293d717c',
+ './themes/default/images/accept_inline.gif' => 'bbb0aed40e938669c98b65642a400a7d',
+ './themes/default/images/_blank.png' => '9bbf8b89dfee264016a5cf95daa02a10',
+ './themes/default/images/WorkFlow.gif' => '658b40aa9fb3ffcabb432ea328ad8415',
+ './themes/default/images/Users.gif' => 'a2e9e7731e06a4fdfb2f49563e98af6b',
+ './themes/default/images/UpgradeDCEInstances.gif' => '31f57a942f93564c75925c5c31f36644',
+ './themes/default/images/Upgrade.gif' => '31f57a942f93564c75925c5c31f36644',
+ './themes/default/images/Trackers.gif' => '7982f8a7fda959763e0ddd42bea0af7e',
+ './themes/default/images/Themes.gif' => '05511600d7087ec404b6aa7f02d2a7b4',
+ './themes/default/images/Teams.gif' => '8fce7827080693884dc5022b6b473940',
+ './themes/default/images/Tasks.gif' => 'a4c8b293d7fa762d2c706bd68284cd67',
+ './themes/default/images/Support.gif' => 'c6fae35bc372012c1a5d5e0b5f22ada5',
+ './themes/default/images/SummationWithDetailsOver.gif' => '807077e21b5c6ce180a7a1e0afbb4f7b',
+ './themes/default/images/SummationWithDetails.gif' => '332fa7357f54428c5915518695824a69',
+ './themes/default/images/SummationOver.gif' => 'fe76f4f7000c4ea19b6c4176a4550887',
+ './themes/default/images/Summation.gif' => 'd85caef83542e64a75e265fbd0564d3f',
+ './themes/default/images/SugarPortal.gif' => '5cafb18cdfd6265e77f852dc00b8ff93',
+ './themes/default/images/SugarLogic/icon_string_16.png' => '23cc7b97a8736c78dfaf6a0967c2d979',
+ './themes/default/images/SugarLogic/icon_num_16.png' => 'd69a90dc40272f45325f2f8e91595744',
+ './themes/default/images/SugarLogic/icon_generic_16.png' => '3a123f2ea73a03caf88b822d14692474',
+ './themes/default/images/SugarLogic/icon_enum_16.png' => '1a4120b6f7a57ac0967791ee1d00bfa1',
+ './themes/default/images/SugarLogic/icon_date_16.png' => '5d4ba78db2626a9d42ff2c5e611eed6d',
+ './themes/default/images/SugarLogic/icon_bool_16.png' => '466b13cb6218f6cb1b1c9db6d2a8730c',
+ './themes/default/images/Studio.gif' => '2941190a8b8f1c37cd373e8474abaff2',
+ './themes/default/images/StickyThread.gif' => '35afdc080b5426b09be58bf765a1c4a7',
+ './themes/default/images/Shippers.gif' => 'daa6d24122b0df9fc1dc5943ce449058',
+ './themes/default/images/Search.gif' => '089000300b21c8ff74c2e258e9b44bd4',
+ './themes/default/images/Schedulers.gif' => 'c0160825b845a73b070194906e818aee',
+ './themes/default/images/SchedulerTest.gif' => '635fcbfc6d5eb2785ef2e6c6f8360a91',
+ './themes/default/images/RowsAndColumnsOver.gif' => 'b09fbec8214a744010e69b6cbc071379',
+ './themes/default/images/RowsAndColumns.gif' => 'ff458b8e2303ec31d0f6b2ded6140ea0',
+ './themes/default/images/Roles.gif' => 'dcbf376b885458b1fc8c21de7884284e',
+ './themes/default/images/Repair.gif' => 'adca1c05640dc8f3cd315afbc8d323e2',
+ './themes/default/images/RenameTabs.gif' => '895241cf5de9d8519169e2b9ef03e08f',
+ './themes/default/images/Releases.gif' => 'ff8de6cf41ad9056011973384f2e0602',
+ './themes/default/images/Rebuild2.gif' => '4e1dd889a93a7131cdb8204ae321fe5a',
+ './themes/default/images/Rebuild.gif' => 'fa51c1e12cfd77a0a5076b92c2d0b218',
+ './themes/default/images/ReassignRecords.gif' => 'efc325a2f834ce64b1c7cf195917ed77',
+ './themes/default/images/RSS.gif' => '0d29ec2ee3476d83dcf7757ea3874ecd',
+ './themes/default/images/QueryBuilder.gif' => 'd705b041b021686b3b5e286305820163',
+ './themes/default/images/Prospects.gif' => 'a7bd5ae5e32198b8826d6986d84a8ad1',
+ './themes/default/images/ProspectLists.gif' => '9b1a622509e5881ec791edf4f68f5e95',
+ './themes/default/images/ProjectWeek.gif' => '077ad399f8640fb0e166eaed6c29cd35',
+ './themes/default/images/ProjectTemplate.gif' => 'f30534d557373942ec06aad47f735c01',
+ './themes/default/images/ProjectTask.gif' => 'f0be8090159b3a874267c3bc27c5a1c3',
+ './themes/default/images/ProjectSave.gif' => 'e5d6feda33978980d8e1b73446ca0cc3',
+ './themes/default/images/ProjectPlus.gif' => '23840e38f362cb897374c51441d4379d',
+ './themes/default/images/ProjectPaste.gif' => 'c5d040c4f0a4075aaa56acfbc393ee44',
+ './themes/default/images/ProjectOutdent.gif' => 'b117efdc268d2779a0c2f2f4cfee7fc3',
+ './themes/default/images/ProjectMonth.gif' => '1ef256376cacea730a9b1dd3d58e7463',
+ './themes/default/images/ProjectMinus.gif' => '126cd19c26aa220d323230c8aa49c98a',
+ './themes/default/images/ProjectInsertRows.gif' => 'b89dcac2784c2a3376c305b9772c5bdd',
+ './themes/default/images/ProjectIndent.gif' => 'ab916206b4065192b84964622b7d6735',
+ './themes/default/images/ProjectExpandAll.gif' => '1910605074d6f26e568dc21aa96e2ce8',
+ './themes/default/images/ProjectDelete.gif' => '4ef20c4cba758dfb05e48684c3be5ffe',
+ './themes/default/images/ProjectCut.gif' => '710ffc5a60e29507c0ddda70ffb6d97e',
+ './themes/default/images/ProjectCopy.gif' => '8287a031948f6d670d90e827af6fce31',
+ './themes/default/images/ProjectCollapseAll.gif' => '97f5d2f6e6c9d2d967d751d4dfabfcc6',
+ './themes/default/images/Project2Weeks.gif' => '099efa2eb9e391a6d908eb583915d999',
+ './themes/default/images/Project.gif' => '0f2bbcc30e50b5eab1d048f2ab765e47',
+ './themes/default/images/Product_Types.gif' => 'ba210721c31f762ce799b1494a30c3b9',
+ './themes/default/images/ProductTemplates.gif' => '9ec09d637b692326d91d4d440027fa4b',
+ './themes/default/images/Print_Email.gif' => '268880a56f51100e33f9a68bf25fb14c',
+ './themes/default/images/PatchUpgrades.gif' => 'e1bf9565545d0f9db2f91f04a3dfa758',
+ './themes/default/images/Password.gif' => '086dda11a59db50c8440183881f65c0c',
+ './themes/default/images/OpportunityReports.gif' => '7d7c840292ae89a66e97afa3e68df9a7',
+ './themes/default/images/Opportunities.gif' => 'ec7850c09b72c670df154aa110c79dd8',
+ './themes/default/images/OnlineDocumentation.gif' => 'bd0436d969ff34a660e7b232030d3009',
+ './themes/default/images/Notes.gif' => '292043a6551d4603e78593e82593ebc8',
+ './themes/default/images/Newsletters.gif' => '600e2e1f5cac2dbee54a9007205bcd86',
+ './themes/default/images/MyProject.gif' => '89d4806940ca826bac6410b618dbf5d9',
+ './themes/default/images/MoreDetail.png' => '1a47ea4ae673fbe8968198bfda6160a6',
+ './themes/default/images/ModuleLoader.gif' => 'ac4f600f348a8c3bbf32c9082764b03e',
+ './themes/default/images/ModuleBuilder.gif' => '0fe61ab8532b0383257a0622b946662c',
+ './themes/default/images/MigrateFields.gif' => 'a79346f2c230cd4c1007a9862ed61924',
+ './themes/default/images/Meetings.gif' => '2c72354fdd58d87185411e82cc21bf8d',
+ './themes/default/images/MatrixReportOver.gif' => 'ca3be4462316c7afea373bb8c1dd1675',
+ './themes/default/images/MatrixReport.gif' => '6c99c710b2e8dab38ad44c00d3077183',
+ './themes/default/images/Manufacturers.gif' => '766a34c1e1b72f73e3bf1f10967157cd',
+ './themes/default/images/MailboxesTestImport.gif' => '24805afea32fdc482f4e361f646688bd',
+ './themes/default/images/License.gif' => '608b6f103f2b754e79434b8b777ad05d',
+ './themes/default/images/Leads.gif' => 'b175423893fda627ea17f28a56cb6e59',
+ './themes/default/images/Layout.gif' => '35df00aa3f68c87b0aecabc831845f1d',
+ './themes/default/images/LanguagePacks.gif' => '05135c460d24ae3e66fb05e9b482665a',
+ './themes/default/images/KBDocuments.gif' => '1d466eaeda296f54c42a7e473e4f6c0c',
+ './themes/default/images/KBArticle.gif' => '1d466eaeda296f54c42a7e473e4f6c0c',
+ './themes/default/images/KB.gif' => 'c2718316fee41c86feb233435b554c36',
+ './themes/default/images/InboundEmail.gif' => 'fed8e9392ab61a5a44b563ecfc5c0005',
+ './themes/default/images/ImportCustomFields.gif' => '289a0dbdce175f1965e967472b5c4484',
+ './themes/default/images/Import.gif' => 'ec8d49ed5fb711f57b417cfe1d0488d4',
+ './themes/default/images/Holidays.gif' => '92b9af82ee68587554ec248e968df011',
+ './themes/default/images/FieldLabels.gif' => '163d3292d1080120c96e991c9d8c411a',
+ './themes/default/images/Feeds.gif' => '0d29ec2ee3476d83dcf7757ea3874ecd',
+ './themes/default/images/FavoriteReports.gif' => 'c16aa5c7a37ecfa94ab08f910b93e9a4',
+ './themes/default/images/ExportCustomFields.gif' => '6ddd4192adc8637ccf791e51c793f828',
+ './themes/default/images/Employees.gif' => '28e6705d0394e3f993a4366a59d1f7ce',
+ './themes/default/images/Emails.gif' => '2f78dfe83afc2d333fa74d0794630f23',
+ './themes/default/images/EmailTemplates.gif' => '2f78dfe83afc2d333fa74d0794630f23',
+ './themes/default/images/EmailSetupWizard.gif' => 'ba3c3a98ea383dc47a87af1f65218031',
+ './themes/default/images/EmailMan.gif' => '1947b99573ba0d64f5eab2813ce9436b',
+ './themes/default/images/EmailFolder.gif' => 'c483bfcd31c873a997c360baf703773c',
+ './themes/default/images/EmailDiagnostic.gif' => '42ac00c64920143627f00c63b737f90f',
+ './themes/default/images/EditLayout.gif' => 'a63bb099ded39d833199d47c9fdb3ead',
+ './themes/default/images/Dropdown.gif' => 'da9558529b3727e61e30401e8175e1f7',
+ './themes/default/images/Documents.gif' => '0c114a3f4cb2d096c724d656c905f2ad',
+ './themes/default/images/DocumentRevisions.gif' => '3835202af7013415ffae7bdc8fcf4ae6',
+ './themes/default/images/Diagnostic.gif' => '39b302edd4e3839712d840ac1b3be940',
+ './themes/default/images/DataSets.gif' => '80b250c42133beaab652ee142ce4e872',
+ './themes/default/images/Dashboard.gif' => '236427476f3a491e8c7b0b184d85e431',
+ './themes/default/images/DCELicensingReport.gif' => 'b255bb8ae39976fd6c83c3037d090f36',
+ './themes/default/images/DCEActions.gif' => 'dde16f8608d3aeef715ed9ad7e57956e',
+ './themes/default/images/CustomQueries.gif' => '01e9e4094828c8fc64b2e89ba471b830',
+ './themes/default/images/Currencies.gif' => '8d1421616dcc7965a2995ea286cfb00d',
+ './themes/default/images/CreateiFrames.gif' => '2def896bb91201710ee131522715616f',
+ './themes/default/images/CreateWebToLeadForm.gif' => '5c34510b1241c7cf34eb885ddb45117d',
+ './themes/default/images/CreateUsers.gif' => '4d734abaed2d76e620e61427f22cc38a',
+ './themes/default/images/CreateTeams.gif' => '421c80edb890544d961afaaf0fb208e6',
+ './themes/default/images/CreateTasks.gif' => '4d6463cdf79b2c1cd010d601ef52fc07',
+ './themes/default/images/CreateScheduler.gif' => '2e5fade41c543b2ed1126c9194ed7a51',
+ './themes/default/images/CreateRoles.gif' => 'ab9c72a16e60764e035ffac6567df86b',
+ './themes/default/images/CreateQuotes.gif' => 'b38cea113277578a6129720ff6a068da',
+ './themes/default/images/CreateQuery.gif' => '94d3ce011099602f29ad6b83dfaa2bc4',
+ './themes/default/images/CreateProspects.gif' => '430421f03ca03f95b3ca5deb00966403',
+ './themes/default/images/CreateProspectLists.gif' => 'b47839294deb452586135734cc13cdb2',
+ './themes/default/images/CreateProjectTemplate.gif' => '684bd67db7cca4190dc4b49c0a8e83bb',
+ './themes/default/images/CreateProjectTask.gif' => '67ac607e90a8860af5fa31d18d9f53e0',
+ './themes/default/images/CreateProject.gif' => '74dd612dc97d6d2c65b172057040b59c',
+ './themes/default/images/CreateOpportunities.gif' => 'a9589cfff43f2a16963772a928b93fce',
+ './themes/default/images/CreateNotes.gif' => '1c001421c72c428f4a5acbc944e43301',
+ './themes/default/images/CreateMeetings.gif' => '8782a51731204d530a218de9dcf72d0c',
+ './themes/default/images/CreateMailboxes.gif' => '514b96d819aed1a9a618382cc18f74ef',
+ './themes/default/images/CreateLeads.gif' => '7a295c6e01b5ed10293dbc942fdc5013',
+ './themes/default/images/CreateKBArticle.gif' => '5528bfd3ccd117da8ee76453b8fffec8',
+ './themes/default/images/CreateHolidays.gif' => '74bb94942b330a7353ebfddb3e395710',
+ './themes/default/images/CreateEmployees.gif' => '4db0f4883525baa72d760602b0d0a9d6',
+ './themes/default/images/CreateEmails.gif' => 'c73f6fa2d64183c99f6b43fd3e8457cb',
+ './themes/default/images/CreateDropdown.gif' => '62f0e60bfb25e8210266f0c46a724b7b',
+ './themes/default/images/CreateDocuments.gif' => 'b6803a3158f8aafb797dcf40e40c7f5a',
+ './themes/default/images/CreateDCETemplates.gif' => '235a27f63ec69172665a9725de0138ab',
+ './themes/default/images/CreateDCEInstances.gif' => '37d2083c5656806c41f379de561de12e',
+ './themes/default/images/CreateDCEDataBases.gif' => '030b11434890898ea46f7eb47e26ca74',
+ './themes/default/images/CreateDCEClusters.gif' => '7412cac6f131844a2be1b2259bb7bdb2',
+ './themes/default/images/CreateContacts.gif' => '543275e52941e451c0594dbc10c19ac5',
+ './themes/default/images/CreateCases.gif' => 'd3e6eb8dd24fbd768cc2a203e035dfe4',
+ './themes/default/images/CreateCampaigns.gif' => '698c76de164b71478d1fae396248f976',
+ './themes/default/images/CreateCalls.gif' => 'faf97408d67ad4ab815d81dbfe5dc2c9',
+ './themes/default/images/CreateBugs.gif' => 'f5d7a5030b9d2f7efb6d1a5a4cc82cef',
+ './themes/default/images/CreateAccounts.gif' => 'ea824000c6d1db94e57df7cc78cb9b3c',
+ './themes/default/images/Contacts.gif' => '18553d7e06e2b115dcd8ae18a00c692e',
+ './themes/default/images/ConfigureTabs.gif' => '58ddcd48ddbbf664fc2a22320ff4cd81',
+ './themes/default/images/ConfigureSubPanels.gif' => 'd11894b643f3c8350e58a2a279539a08',
+ './themes/default/images/Cases.gif' => '9ff67484d4e580f7ec6b1c4fadef4e6c',
+ './themes/default/images/CampaignsWizard.gif' => 'c3d4e57e0dbbf6eb079c79b2bfdb7d70',
+ './themes/default/images/Campaigns.gif' => 'caf6345d36c8b318148e08eb017fc592',
+ './themes/default/images/Calls.gif' => 'fb79ca6ff562b6321c30039d577a55cc',
+ './themes/default/images/Calendar.gif' => 'ac7a361a60069ea66eded3e8fc22d253',
+ './themes/default/images/Bugs.gif' => 'b147d01e9f226777cf497b92439efdf0',
+ './themes/default/images/BugReports.gif' => '9edff2df8863ace2cf1e7986e5423523',
+ './themes/default/images/Backups.gif' => '1e5b888a85fe97b85e32a23544a53d40',
+ './themes/default/images/Backup.gif' => '4cf4850d478c593d3ab33fb60fdf2b6c',
+ './themes/default/images/ArrowButtons.png' => '3cc685bfa21913c19ebacce89568b882',
+ './themes/default/images/AllRSS.gif' => 'c6438ac72aed8be0bb89ad7981d23e92',
+ './themes/default/images/AllNews.gif' => 'c6438ac72aed8be0bb89ad7981d23e92',
+ './themes/default/images/AlertEmailTemplates.gif' => '92010f89490e4fdae70a4ecee1bfbd5d',
+ './themes/default/images/Administration.gif' => 'a68a5b890796251b8947061f696ca15e',
+ './themes/default/images/ActivitiesReports.gif' => 'ad890a0190fedffa6bcb73557060fa9b',
+ './themes/default/images/Accounts.gif' => 'e081de07d0263b270d0d306642375901',
+ './themes/default/css/wizard.css' => '31833a6ae4a11690ff41416a5e0f9b70',
+ './themes/default/css/style.css' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './themes/default/css/print.css' => 'a3f18f20167ffd8fa8ece2a1e4a31e13',
+ './themes/default/css/deprecated.css' => '13f41876c3a31bde4ac2e1223bdd707c',
+ './themes/default/css/chart.css' => 'dda00a834e88692f3d08bec70db12dc9',
+ './themes/Sugar5/tpls/header.tpl' => 'a0fba0213a34dccdb5d6e1abafb8525c',
+ './themes/Sugar5/tpls/footer.tpl' => '7add32de99b51b0cd85086f95ad9ee6e',
+ './themes/Sugar5/tpls/_welcome.tpl' => 'fcf6220c8e3e3c9549e86e4082354ac2',
+ './themes/Sugar5/tpls/_headerShortcuts.tpl' => 'b43780c04a2874ee1768845932567b0e',
+ './themes/Sugar5/tpls/_headerSearch.tpl' => 'a4cd3c3b074d6f21d5bf2d20f2fae0ea',
+ './themes/Sugar5/tpls/_headerModuleList.tpl' => '2b3d435b2932dad411769c74bc7ca101',
+ './themes/Sugar5/tpls/_headerLastViewed.tpl' => 'cf8948eaee2c34049ab4b6d9b2e6ffb9',
+ './themes/Sugar5/tpls/_head.tpl' => '7f87d71644325839a9d490d9284e6674',
+ './themes/Sugar5/tpls/_globalLinks.tpl' => 'b8d95ed6b2227a463c08f0164816a1f4',
+ './themes/Sugar5/tpls/_companyLogo.tpl' => 'a3d2e1addc77f8715213e07f94117075',
+ './themes/Sugar5/themedef.php' => 'b3b0e75757b82719cf012af93901dddf',
+ './themes/Sugar5/layout_utils.php' => '68fa4045b1668a3d24cc4482f9e25ba9',
+ './themes/Sugar5/js/style.js' => '16dcc22d1ca9a072fa6d267acf5765e9',
+ './themes/Sugar5/images/yes.gif' => '5d3f887e0dbcd70a4708534be3bfa41a',
+ './themes/Sugar5/images/yellow_camp.gif' => '593075b0d0f3dca3343e500f0bc1b4f7',
+ './themes/Sugar5/images/xls_image_inline.gif' => 'e68c72edc63f0f8ab22a9b2cd49909c4',
+ './themes/Sugar5/images/view_status.gif' => '4e9aeb2524553f094d4e3ad9de90839c',
+ './themes/Sugar5/images/view_inline.gif' => 'a2f2198fc7a571a88cf6661ac22b1d8b',
+ './themes/Sugar5/images/view.gif' => 'a2f2198fc7a571a88cf6661ac22b1d8b',
+ './themes/Sugar5/images/uparrow_inline.gif' => '305e2d1a68316e78cf9b7059b1fd632f',
+ './themes/Sugar5/images/uparrow_big.gif' => '52a135285919ae19e94af09fcc8b556c',
+ './themes/Sugar5/images/uparrow.gif' => '52a135285919ae19e94af09fcc8b556c',
+ './themes/Sugar5/images/unscheduled_inline.gif' => 'fa3ecb4c47ae31097e011c514945023b',
+ './themes/Sugar5/images/unpublish_inline.gif' => '75cf70a4e97129cd0a2f9c8edc915d9d',
+ './themes/Sugar5/images/txt_image_inline.gif' => 'd5a939c64c645f0ebc69e436372ca9e0',
+ './themes/Sugar5/images/themePreview.png' => 'd75d6f95c236cd069d39ae7505852061',
+ './themes/Sugar5/images/tentative_inline.gif' => '7ce50732e43bbdde45b954694b14ec4b',
+ './themes/Sugar5/images/tabRowRedBg.gif' => '87d0b28828b106e5563dddeff1110544',
+ './themes/Sugar5/images/tabRowPurpleBg.gif' => 'dbd04a0929960614f412bcae69e50d09',
+ './themes/Sugar5/images/tabRowOcherBg.gif' => 'b030681c7db2a9bed844878f13b2d92d',
+ './themes/Sugar5/images/tabRowGreenBg.gif' => '9c7ccd42de0599e6647d9bae6b99d54d',
+ './themes/Sugar5/images/tabRowGrayBg.gif' => '52a8224e5fd67b0dcf27e4ab02759e06',
+ './themes/Sugar5/images/tabRowBlueBg.gif' => '46bde460b237581287809ad4cb0b92d0',
+ './themes/Sugar5/images/tabRowBg.gif' => '02d750917380f0e60dd8f293fc910ad5',
+ './themes/Sugar5/images/sugarupdate.gif' => 'f5ea1dae8f86aeb87a536ceaaa09208d',
+ './themes/Sugar5/images/sugar_icon.png' => '8a98242f1aae07923bf0c7289405b93b',
+ './themes/Sugar5/images/sugar_icon.ico' => '92f1ffd4b2fef157613e48d2d2c7d9c8',
+ './themes/Sugar5/images/sugar_document.png' => '649eeaf6da95e66caa7f961a25995e65',
+ './themes/Sugar5/images/sugarColors.xml' => 'cf9d69837a95f6167f126bf18d785884',
+ './themes/Sugar5/images/sugar-yui-sprites.png' => '79e1cc79ea3c01d3a7a3ad8c96de34ec',
+ './themes/Sugar5/images/sugar-yui-sprites-red.png' => '428926f9a17edbc9fbb714478803e6e4',
+ './themes/Sugar5/images/sugar-yui-sprites-purple.png' => 'cc60edba84b9b93804eab9ad3775b357',
+ './themes/Sugar5/images/sugar-yui-sprites-grey.png' => '25009499774224ae1f35d19cd65df6a6',
+ './themes/Sugar5/images/sugar-yui-sprites-green.png' => '4edc5be053baacacbd7d10f6eb54681c',
+ './themes/Sugar5/images/studio_undo.gif' => 'a8e4ca30f12eb152391782ebc1519264',
+ './themes/Sugar5/images/studio_save.gif' => '9a879acb70dda07e06e7719461ac7fe4',
+ './themes/Sugar5/images/studio_redo.gif' => 'd3a7aa42cc4d72047c6e97e36cec2d21',
+ './themes/Sugar5/images/studio_publish.gif' => '17b3a4edb24c576e9056fbf8a7d00576',
+ './themes/Sugar5/images/studio_history.gif' => 'ba2fdf14b162abf38ad809a4849944d8',
+ './themes/Sugar5/images/studio_blank.gif' => 'e2cc44b623bd7213fd8f18e1312f765a',
+ './themes/Sugar5/images/studio_addRows.gif' => 'b34fb09271096f03e497429c62a6c877',
+ './themes/Sugar5/images/studio_addField.gif' => 'f082ee05c412853e73f3e5fda1e0fa0f',
+ './themes/Sugar5/images/start_off.gif' => '0b357d4c67ded4c86d1c70c2c920ba70',
+ './themes/Sugar5/images/start.gif' => '52087392225974936d6ce7d2bb48babd',
+ './themes/Sugar5/images/sqsWait.gif' => '118ce5b9645fbadb2464ef0bd12ff895',
+ './themes/Sugar5/images/spacer.gif' => 'ed280a0ea3cc38f3cbbc747acfbef47d',
+ './themes/Sugar5/images/slot.gif' => '2859963e00e5456e56054fee1bb84964',
+ './themes/Sugar5/images/show_submenu_shortcuts.gif' => '2cf2f044333c693c0235eca6de839532',
+ './themes/Sugar5/images/show.gif' => 'db40a21333e315e8f66b58b8fe7c8663',
+ './themes/Sugar5/images/select.gif' => '2090e9761478fb6bee48c197b0f102dc',
+ './themes/Sugar5/images/searchMore.gif' => 'a69208b341a41938f65d88abe12f493b',
+ './themes/Sugar5/images/scheduled_inline.gif' => '9812da8482e09a3c4a2a54b99d717c20',
+ './themes/Sugar5/images/rightarrow_big.gif' => '6261e365b6f205ed19984eca672f3d4b',
+ './themes/Sugar5/images/rightarrow.gif' => 'aa8546cb02723ec14c7025159f254ade',
+ './themes/Sugar5/images/refresh.gif' => '8f48d8c61ed6dd5890954ded347f6550',
+ './themes/Sugar5/images/red_camp.gif' => '39110cd4e707f3f1ceb24dde98d65a9a',
+ './themes/Sugar5/images/publish_inline.gif' => '8a3c3103256b3592ec15c376835c0f04',
+ './themes/Sugar5/images/print.gif' => '0fc719a26f62a06dbfcacdb9b6447d4f',
+ './themes/Sugar5/images/previous_off.gif' => '62dc03295c496475543d5c3ee2ab51b9',
+ './themes/Sugar5/images/previous.gif' => 'c3d538b6c67aa6ce5fcc911cb062536f',
+ './themes/Sugar5/images/ppt_image_inline.gif' => '23151c677be1d3285d3acc07471ed39d',
+ './themes/Sugar5/images/plus_inline.gif' => '663569556d7adacbdc1e707490a7b754',
+ './themes/Sugar5/images/plus.gif' => '2246c11e24af9ea5873c1b550e1a3850',
+ './themes/Sugar5/images/pdf_logo_small.jpg' => '882437a1c98056a9c24d21ead8f42c92',
+ './themes/Sugar5/images/pdf_logo.jpg' => '98deac35a6b79b5f92b3b02f9d08f31a',
+ './themes/Sugar5/images/pdf_image_inline.gif' => '9c36962a5402ca969451093579cd8261',
+ './themes/Sugar5/images/pdf_header_logo_pdf_header_logo_SugarCRMheader.jpg' => 'dbd96f2c26aa37ced7ca6f3ffb30f8aa',
+ './themes/Sugar5/images/pdf_header_logo_img_left_arrow.jpg' => '42a3bd20247df71df2f3b4af7d79469d',
+ './themes/Sugar5/images/pdf_header_logo_SugarCRMheader.jpg' => 'dbd96f2c26aa37ced7ca6f3ffb30f8aa',
+ './themes/Sugar5/images/otherTabRed.gif' => '2d7fcbfb0e362659e32b7fe07f8d88b7',
+ './themes/Sugar5/images/otherTabPurple.gif' => '25390753d4f155296e6593ebb01356e9',
+ './themes/Sugar5/images/otherTabOcher.gif' => '7d543589ef9a75e121a149e02adf6040',
+ './themes/Sugar5/images/otherTabGreen.gif' => '250a64b44884e23e183f1f6ee526bb1c',
+ './themes/Sugar5/images/otherTabGray.gif' => '1b5e086627979c27a1eb883db0562afb',
+ './themes/Sugar5/images/otherTabBlue.gif' => 'd7e3090fcbe30db44bba3513c604b913',
+ './themes/Sugar5/images/otherTab.gif' => '87a4aca38528ca5aba1e54d6660e4a31',
+ './themes/Sugar5/images/open_multiple.gif' => 'c372922f378956f6b3bf56931d9ce2c8',
+ './themes/Sugar5/images/no.gif' => '262c91d4e47946e1d4aeff7f0f22614b',
+ './themes/Sugar5/images/next_off.gif' => '75c75524f41553432332b4ec0c99f9c7',
+ './themes/Sugar5/images/next.gif' => '834dc6b2b1b6aadd68f4677af017d5c7',
+ './themes/Sugar5/images/new_inline.gif' => '26aa1d757ecdaa1f886cd2bfb24eddd5',
+ './themes/Sugar5/images/more.gif' => '0fb09987f349939666c7ed893e336e87',
+ './themes/Sugar5/images/minus_inline.gif' => 'f051e7dc179ff6ab3f3c8b380f686501',
+ './themes/Sugar5/images/minus.gif' => '367ebb3ec8e01f8878dc252b56f0ab07',
+ './themes/Sugar5/images/menuarrow.gif' => 'b15abb42a41d475bf9f93755e971737e',
+ './themes/Sugar5/images/mass_update.gif' => '9b855db1e593f1e916dc478fa52648b6',
+ './themes/Sugar5/images/loading.gif' => '50c5e3e79b276c92df6cc52caeb464f0',
+ './themes/Sugar5/images/loadSignedDocument.gif' => 'afcccbee3447ffada5033d0cb7cb2b59',
+ './themes/Sugar5/images/listViewHR.gif' => 'eaa707253f1b7c4aab6f4841034ee7e3',
+ './themes/Sugar5/images/listViewBg.gif' => 'bb253dddfd00429a83bdb9e9a2b25305',
+ './themes/Sugar5/images/list.gif' => 'a4c8b293d7fa762d2c706bd68284cd67',
+ './themes/Sugar5/images/line.gif' => '5da41b8dfa2826bcecd84922b5e30ac7',
+ './themes/Sugar5/images/leftarrow_big.gif' => '1a1e6044a007b7f6be704544c1ab3d9b',
+ './themes/Sugar5/images/leftarrow.gif' => '5d56c1a6a00589aff97b8c9b9911d005',
+ './themes/Sugar5/images/jscalendar.gif' => '753d9d9f7e1e78f0fe75f25f8996692d',
+ './themes/Sugar5/images/info_inline.gif' => '9db230bae1c0ecdf0052806eb1b684f0',
+ './themes/Sugar5/images/info-add-page.png' => '59c6278627f16bc2bde3df34e83f027b',
+ './themes/Sugar5/images/img_right_arrow.jpg' => 'd4f8e8aa3ab1a663d1a55f8e3275e5d7',
+ './themes/Sugar5/images/img_loading.gif' => '00ef871b291bc03a497d608a5bd8ec99',
+ './themes/Sugar5/images/img_left_arrow.jpg' => '42a3bd20247df71df2f3b4af7d79469d',
+ './themes/Sugar5/images/img_close_search.gif' => '357d905eec06febe8ed2d3948f2eadcc',
+ './themes/Sugar5/images/icon_therevisions.gif' => '3f0f5b717ad53c0d551e5b03e9268f8b',
+ './themes/Sugar5/images/icon_sale.gif' => '709cf48456c82ccbfa4a038817e0c5e1',
+ './themes/Sugar5/images/icon_person.gif' => '19a7896996fac88e1bf4c7314cf126f2',
+ './themes/Sugar5/images/icon_package_create.gif' => 'e728aedae3a86f557a4431bcfb3b11b0',
+ './themes/Sugar5/images/icon_package.gif' => '6fe230ae81d0c1bfdc02f12554bfe5a6',
+ './themes/Sugar5/images/icon_opportunity.gif' => 'e8c75374653922482d1d5b71ee569909',
+ './themes/Sugar5/images/icon_new_package.gif' => 'e728aedae3a86f557a4431bcfb3b11b0',
+ './themes/Sugar5/images/icon_issue.gif' => 'dbe274a88ad4b289cf1f80be391620b3',
+ './themes/Sugar5/images/icon_iFrames_32.gif' => '264e84da5b4c48a4970f71550df86084',
+ './themes/Sugar5/images/icon_home.gif' => '15a02d5f4fd368aff08023822401bd39',
+ './themes/Sugar5/images/icon_expression_types.gif' => '34e7314d67aad0251bce11b1f7912aba',
+ './themes/Sugar5/images/icon_email_view3.gif' => '77592a420b9f1fd37da050c94083e9c3',
+ './themes/Sugar5/images/icon_file.gif' => '0037a12c8c4b623c5e0ea1803a6e95b5',
+ './themes/Sugar5/images/icon_email_view2.gif' => '1702d53e8aa6f660dd29d31b54bfa43e',
+ './themes/Sugar5/images/icon_email_view1.gif' => '7f5675af33f000f9fc9b48519b416c54',
+ './themes/Sugar5/images/icon_email_view.gif' => '0ddc870ec847e406a483d431de0c3b27',
+ './themes/Sugar5/images/icon_email_sugfolder_exp.gif' => '736434e15eb5273ed2adabb66451f7f7',
+ './themes/Sugar5/images/icon_email_sugfolder.gif' => '127016b7228674ac442ec5266caa3f79',
+ './themes/Sugar5/images/icon_email_settings.gif' => '129bbd92f356c68e63a94bcd53a1c225',
+ './themes/Sugar5/images/icon_email_send.gif' => '3069253177ad510279278f69f0cd5d78',
+ './themes/Sugar5/images/icon_email_save.gif' => '0c7f54e7bfee5ea8b782a8df7e52aac2',
+ './themes/Sugar5/images/icon_email_replyall.gif' => '5cad79693b03ece0364497e1538df029',
+ './themes/Sugar5/images/icon_email_reply.gif' => '2df1e0f100bc7e666a3efec19ed87d2d',
+ './themes/Sugar5/images/icon_email_relate.gif' => '74242467860ceb4110ff97449881e913',
+ './themes/Sugar5/images/icon_email_options.gif' => '9417e3643754ebb64efd1c8cdac2574f',
+ './themes/Sugar5/images/icon_email_mark.gif' => '59bd3232c7d2a3797caff08f111e47db',
+ './themes/Sugar5/images/icon_email_fullscreen.gif' => 'dcd3515feee571f3126eb2cda9be9d99',
+ './themes/Sugar5/images/icon_email_forward.gif' => 'ad895eb9b28efafa360141b2d463d07a',
+ './themes/Sugar5/images/icon_email_folder_sent.gif' => '84f050eabd42d189ff7ec33ef604a2a9',
+ './themes/Sugar5/images/icon_email_folder_grp.gif' => '95af0dfe5619fefcbe5e735a2f88e5d2',
+ './themes/Sugar5/images/icon_email_folder_exp.gif' => '34630bcf92e238c09294950a56533de7',
+ './themes/Sugar5/images/icon_email_folder_drafts.gif' => '44aeed88a8c7eaa04ceaa47980c264a4',
+ './themes/Sugar5/images/icon_email_folder_archives.gif' => 'a5d423896f3d34e7dae5a99788b9096d',
+ './themes/Sugar5/images/icon_email_folder.gif' => 'c84e3a04f0553457f2758c17328dcc64',
+ './themes/Sugar5/images/icon_email_delete.gif' => 'de0c2510e40fc90da261c3f24060489f',
+ './themes/Sugar5/images/icon_email_create.gif' => '1ed2501ee71cef192e87836feb66ecb8',
+ './themes/Sugar5/images/icon_email_compose.gif' => 'cbbab42834d7a19f657545f9fdf01dd4',
+ './themes/Sugar5/images/icon_email_check.gif' => '97f4bb665ca71c935b0c0d6a97156c4c',
+ './themes/Sugar5/images/icon_email_attach.gif' => 'cb6c0e533206569e383429c25c4f090d',
+ './themes/Sugar5/images/icon_email_assign.gif' => '892c9f96578002195ec4ea0f233fc8a9',
+ './themes/Sugar5/images/icon_email_archive.gif' => '01fe1cad58260b7bf63788e9ce5b68e9',
+ './themes/Sugar5/images/icon_email_addressbook.gif' => 'd950e8a8497cb37b660281d332a2767c',
+ './themes/Sugar5/images/icon_document.gif' => '167aee1d934419e6e8aa6235fee350ea',
+ './themes/Sugar5/images/icon_company.gif' => 'b2ef078b5afa7f07bbbc13587bc9990b',
+ './themes/Sugar5/images/icon_basic.gif' => '71bcdef4548fad731d44fc681e3a6599',
+ './themes/Sugar5/images/icon_back.gif' => '215aa2a3bcf6e67e0fb2aa25da2e8871',
+ './themes/Sugar5/images/icon_assistant.gif' => '9e75a064532dc80f6c44ffae3aa6501b',
+ './themes/Sugar5/images/icon_Users_32.gif' => 'c63b38ad112782578822a612fb102952',
+ './themes/Sugar5/images/icon_Trackers_32.gif' => '1fd19adde4d7ca809ad287c45a45100c',
+ './themes/Sugar5/images/icon_TrackerSessions_32.gif' => '5071e66a3fa459669f5ad5a2e4a6eaf9',
+ './themes/Sugar5/images/icon_TrackerQueries_32.gif' => '0c8a6bf47267515ea3b2be8b5ea16c73',
+ './themes/Sugar5/images/icon_TrackerPerfs_32.gif' => '998c775c84226d9a6d8d7a2cfee828b8',
+ './themes/Sugar5/images/icon_Teams_32.gif' => '1042e299464990cdbf312460171dbc6b',
+ './themes/Sugar5/images/icon_Tasks_32.gif' => '59dd94dfcfaed6273295f22658c77a75',
+ './themes/Sugar5/images/icon_Tasks.gif' => '91d11b48558775d6f940a4fe2fef9d8f',
+ './themes/Sugar5/images/icon_Targets_32.gif' => 'a791b861efaa860b3f356ce5644982ad',
+ './themes/Sugar5/images/icon_SugarPortal.gif' => 'bd9b140fefd8d3c8d25e5602d34455b1',
+ './themes/Sugar5/images/icon_SugarNews_32.gif' => '13513ac06c13bbcc28acddce996e79ba',
+ './themes/Sugar5/images/icon_SugarFeed_32.gif' => '91906aa110e0737571bdce7e982d6f5b',
+ './themes/Sugar5/images/icon_SugarFeed.gif' => 'c121b4f625c494d54a7c6e60a7159e73',
+ './themes/Sugar5/images/icon_Subpanels.gif' => '99b9a4c23b9d4d52c80db23b65241032',
+ './themes/Sugar5/images/icon_Studio.gif' => '6cff1d99350160b388f5a1ac529c3ff9',
+ './themes/Sugar5/images/icon_SearchForm.gif' => '9246e8668eb71fd1e2ebd20b6cb60ba1',
+ './themes/Sugar5/images/icon_SPUploadCSS.gif' => 'd912a8d76735acc061b566c950976995',
+ './themes/Sugar5/images/icon_SPSync.gif' => 'bc384598e25a00faa9e2efd942b357a0',
+ './themes/Sugar5/images/icon_Rss_32.gif' => 'adf9e9567964a6faf01005e83051d974',
+ './themes/Sugar5/images/icon_Reports_32.gif' => 'e25b26fb6a2a086087c81f9e2176b5e1',
+ './themes/Sugar5/images/icon_Releases_32.gif' => '8151d6de8614fdc220860f7e79b417b9',
+ './themes/Sugar5/images/icon_Relationships.gif' => 'ff28b08d448d6e1c732b2cf29f6096a3',
+ './themes/Sugar5/images/icon_Quotes_32.gif' => '74d821c6b4656e3b5a6548c5a854cb0f',
+ './themes/Sugar5/images/icon_Quotes.gif' => '3f1734fcd9e3c7d0885940a83e167e39',
+ './themes/Sugar5/images/icon_QuickCreate.gif' => '54cd777aafd156c049999c8b783cfa58',
+ './themes/Sugar5/images/icon_Prospects_32.gif' => 'a791b861efaa860b3f356ce5644982ad',
+ './themes/Sugar5/images/icon_Prospects.gif' => '5e5099f8f374fb63cb236e926a575938',
+ './themes/Sugar5/images/icon_Projects_32.gif' => '009174ec22ef8f1af05e0e06f55d5916',
+ './themes/Sugar5/images/icon_Project_32.gif' => '009174ec22ef8f1af05e0e06f55d5916',
+ './themes/Sugar5/images/icon_ProjectTask_32.gif' => '1092296917891851fc078c5e2f4d57df',
+ './themes/Sugar5/images/icon_ProjectTask.gif' => '4c826a1341be8b80fae67d6452ad087e',
+ './themes/Sugar5/images/icon_Project.gif' => '22a4aefdc49f3188585ab8103e4fd7c4',
+ './themes/Sugar5/images/icon_Products_32.gif' => '6e740000d2e08d22d4e24d63e84e8c9c',
+ './themes/Sugar5/images/icon_Products.gif' => 'c2a424dbe47e9e852aec589347348dc7',
+ './themes/Sugar5/images/icon_Product_Types_32.gif' => '1f5728ad9c07d67979eed73af625efbf',
+ './themes/Sugar5/images/icon_ProductTypes_32.gif' => '1f5728ad9c07d67979eed73af625efbf',
+ './themes/Sugar5/images/icon_ProductTemplates.gif' => '4c76239253a30c972bd02aec213e7830',
+ './themes/Sugar5/images/icon_ProductCategories_32.gif' => 'ce6e3a4a347467957275a5c0eee5e311',
+ './themes/Sugar5/images/icon_Portal.gif' => '4a107249e6596b0e0c724e7734fae92d',
+ './themes/Sugar5/images/icon_Phone.gif' => '69561dd53df8efc35c0919efcf546d2c',
+ './themes/Sugar5/images/icon_Opportunities_32.gif' => '787b58f02e8c7c118841abbffcf72f42',
+ './themes/Sugar5/images/icon_Opportunities.gif' => 'bb0d0125d317f78b6265fbcd7b6d827d',
+ './themes/Sugar5/images/icon_OpenTasks_32.gif' => 'd0c52359674d719e1e4da4c5ee3b3064',
+ './themes/Sugar5/images/icon_Notes_32.gif' => '38614c8b0fb8673bbf7118bc62d3571b',
+ './themes/Sugar5/images/icon_Notes.gif' => 'cdee31ac66f080bd6e862e0dcfcf1358',
+ './themes/Sugar5/images/icon_NewModule.gif' => '700412f4a1535f58dc358af2c15ddba4',
+ './themes/Sugar5/images/icon_MyTasks_32.gif' => '5af76e5299c5e6a2946ce3ed13d64d5f',
+ './themes/Sugar5/images/icon_MyPortal_32.gif' => '264e84da5b4c48a4970f71550df86084',
+ './themes/Sugar5/images/icon_ModuleBuilder.gif' => 'b0f8e050fa92fd761fce476dc361e9b9',
+ './themes/Sugar5/images/icon_MobileLayouts.gif' => '01d983c77ce576f3fbb42a67cd43b901',
+ './themes/Sugar5/images/icon_Meetings_32.gif' => '7cbed9de72d3c9e9e2aed8997ea4cd82',
+ './themes/Sugar5/images/icon_Meetings.gif' => '6b25f5507719dd934fdad9ae12125935',
+ './themes/Sugar5/images/icon_ListView.gif' => '557ee4b0eaa08c7566f5ff4522207bc1',
+ './themes/Sugar5/images/icon_Leads_32.gif' => '5c7ee135592a05a145456af63077fb3d',
+ './themes/Sugar5/images/icon_Leads.gif' => 'dd27a17fc38fb8b01398e35ac3d39fd0',
+ './themes/Sugar5/images/icon_Layouts.gif' => '4a107249e6596b0e0c724e7734fae92d',
+ './themes/Sugar5/images/icon_Labels.gif' => 'e7d722a222050cb2e92431c460ecad8a',
+ './themes/Sugar5/images/icon_KBDocuments_32.gif' => '605c4a7cac4ccc184ac013b9a6d4016e',
+ './themes/Sugar5/images/icon_KBDocuments.gif' => 'd74530d24f2e0bd57ef6681dbb20fe94',
+ './themes/Sugar5/images/icon_JotPad_32.gif' => '04e2a63f3d3afbe1de3cd6048cec1f50',
+ './themes/Sugar5/images/icon_JotPad.gif' => '1e5d01a07e4f988611af6677a037f318',
+ './themes/Sugar5/images/icon_Invaders_32.gif' => 'c669d4aff0cef7ab73e051c1443d8b3c',
+ './themes/Sugar5/images/icon_Forecasts_32.gif' => '20a3de4d107c962b0847d9dd7174cdbd',
+ './themes/Sugar5/images/icon_Forecasts.gif' => 'dcb0ee8f452baf1048d0fd9d3ba09312',
+ './themes/Sugar5/images/icon_Fields.gif' => '39677bcb6670ffd88f083419d9f9d1c5',
+ './themes/Sugar5/images/icon_Feeds_32.gif' => 'adf9e9567964a6faf01005e83051d974',
+ './themes/Sugar5/images/icon_FavoriteReports_32.gif' => '4fe2369941b3672b5c8f6594fcd15825',
+ './themes/Sugar5/images/icon_FavoriteReports.gif' => 'cec6ecb1c7befc7cb52b735bfc2a3e8f',
+ './themes/Sugar5/images/icon_Emails_32.gif' => '3626aef290eda2f9004d7e4d2c2e0791',
+ './themes/Sugar5/images/icon_Emails.gif' => '35464266090cc9d38551bcd2e0edf969',
+ './themes/Sugar5/images/icon_EmailAddresses_32.gif' => '834acafa896baa468fc22186d2cff2e4',
+ './themes/Sugar5/images/icon_EmailAddress.gif' => '6877d848391e0165e1106864b3d6d4cb',
+ './themes/Sugar5/images/icon_EditView.gif' => '2b40c926f5bec858704c1daa83f1eac9',
+ './themes/Sugar5/images/icon_DropDownEditor.gif' => '18036f2acc73b67b6168dec5798600bd',
+ './themes/Sugar5/images/icon_Documents_32.gif' => '945c2c18f5a9e119178cdebdb8f638c4',
+ './themes/Sugar5/images/icon_Documents.gif' => '3f0f5b717ad53c0d551e5b03e9268f8b',
+ './themes/Sugar5/images/icon_DetailView.gif' => '7e52a99c33829596b0a3210c5202a12d',
+ './themes/Sugar5/images/icon_DeleteFull.gif' => 'd9c1deab8458cf93d645d91dfba6207d',
+ './themes/Sugar5/images/icon_Delete.gif' => '501840cefe034dbdc2e4c2b54997cad5',
+ './themes/Sugar5/images/icon_Dashlet.gif' => '13af871521b34dac496b57b0e2c4eaa2',
+ './themes/Sugar5/images/icon_DCETemplates_32.gif' => 'f92673e7ebfdea9cbbebeab47a6100e0',
+ './themes/Sugar5/images/icon_DCEReports_32.gif' => 'db721d0bf19687c55bebc55c2922ed72',
+ './themes/Sugar5/images/icon_DCEInstances_32.gif' => '487fd352fe639c7d37e2826a1f923cbd',
+ './themes/Sugar5/images/icon_DCEDataBases_32.gif' => '199c8197b7f85857805c7c7266740b50',
+ './themes/Sugar5/images/icon_DCEClusters_32.gif' => '75e8758e88aa55696b3cd80ceda320bf',
+ './themes/Sugar5/images/icon_DCEActions_32.gif' => '7c334cfc9755f596e7868bb7993698a0',
+ './themes/Sugar5/images/icon_Contracts_32.gif' => '5c01388d8c6d287f07d4ade8a71882e3',
+ './themes/Sugar5/images/icon_Contracts.gif' => 'cf3fdd47fcdf25f23bc7d00781395280',
+ './themes/Sugar5/images/icon_Contacts_32.gif' => 'eeb8eb818c7813f77b479f7e1001d9d3',
+ './themes/Sugar5/images/icon_Contacts.gif' => '5c25642d0e7373ff3dc8670ef61fcfc1',
+ './themes/Sugar5/images/icon_Connectors.gif' => '741a28001f099adc694252df889a97ab',
+ './themes/Sugar5/images/icon_ConnectorSearchFields_16.gif' => '071b4fa50987f24aa8e439ad2c94977e',
+ './themes/Sugar5/images/icon_ConnectorSearchFieldsOver.gif' => '892037f83ee9b1a78b0968b64f008aa5',
+ './themes/Sugar5/images/icon_ConnectorSearchFields.gif' => '670c96db0ae37d1e7950ceb81f1f22bb',
+ './themes/Sugar5/images/icon_ConnectorMap_16.gif' => '21a1a3515ae02ed5fc0d8492a892f690',
+ './themes/Sugar5/images/icon_ConnectorMapOver.gif' => '5c4beb392911c203ac8ab9f55ca80efb',
+ './themes/Sugar5/images/icon_ConnectorMap.gif' => '28f0ba3ad323e08f917693cd5ef3286f',
+ './themes/Sugar5/images/icon_ConnectorEnable_16.gif' => '139c5d2ed03e09e69c2427aa461d0abb',
+ './themes/Sugar5/images/icon_ConnectorEnableOver.gif' => '4c68d747832656f8a373308a5571aa2c',
+ './themes/Sugar5/images/icon_ConnectorEnable.gif' => '6c53d58521fee6d29e35583f11f80b7c',
+ './themes/Sugar5/images/icon_ConnectorConfig_16.gif' => 'c455945b702d168f0c55f630bc909a03',
+ './themes/Sugar5/images/info-del.png' => '54d3de3d716db37d7fe7d1b0461e4328',
+ './themes/Sugar5/images/icon_ConnectorConfigOver.gif' => 'f24b62af2fc23e3c5f675a7454968688',
+ './themes/Sugar5/images/icon_ConnectorConfig.gif' => '1024aa4e200381bf481888131023b5a2',
+ './themes/Sugar5/images/icon_Column_3.gif' => '3a967a62ac79e9be7d953730c550bf14',
+ './themes/Sugar5/images/icon_Column_2.gif' => 'bf25350fb235d301601b87b687160d17',
+ './themes/Sugar5/images/icon_Column_1.gif' => 'b819b73077afdfd13c3f84f77e1cb8c5',
+ './themes/Sugar5/images/icon_Charts_Vertical_32.gif' => 'e8a3b35973d514875fdb9507728357e3',
+ './themes/Sugar5/images/icon_Charts_Vertical.gif' => 'f15275758c20b1c829c9ed3dcc88d3c1',
+ './themes/Sugar5/images/icon_Charts_Pie_32.gif' => '1dd970dabcb5de6a9fa742893ad28c3b',
+ './themes/Sugar5/images/icon_Charts_Pie.gif' => 'b65cc013f3b9c6b50e46722fbc027cf4',
+ './themes/Sugar5/images/icon_Charts_Horizontal_32.gif' => 'e84af669b14b4288b699a0d6d5dd17fc',
+ './themes/Sugar5/images/icon_Charts_Horizontal.gif' => '928245490307b01d3cca736630187fe1',
+ './themes/Sugar5/images/icon_Charts_GroupBy_32.gif' => 'a1c69c3e8be5e54bd2b6be6dd97d1835',
+ './themes/Sugar5/images/icon_Charts_GroupBy.gif' => 'b444f2b91a51489e19c3f56b859121da',
+ './themes/Sugar5/images/icon_Charts_Gauge_32.gif' => 'c4ba44d5ad9209d6e37565ec1faf91ea',
+ './themes/Sugar5/images/icon_Charts_Gauge.gif' => 'cb0c4825703e0f816ce5edf7693a4206',
+ './themes/Sugar5/images/icon_Charts_Funnel_32.gif' => '9d60fb449cb26d8f13ff4fd05dd17451',
+ './themes/Sugar5/images/icon_Charts_Funnel.gif' => 'fbbeb7f36751a847b43cbc29042bef83',
+ './themes/Sugar5/images/icon_Cases_32.gif' => 'e74f7b4a4f513c517351fe0e15ec9f7d',
+ './themes/Sugar5/images/icon_Cases.gif' => '86c8c9ce83c9feab641687fa968d1705',
+ './themes/Sugar5/images/icon_Campaigns_32.gif' => '4b2651b74c0df08fb38da1c50ad55540',
+ './themes/Sugar5/images/icon_Campaigns.gif' => 'd326b30e1f37d6b1ae7585bec2603f75',
+ './themes/Sugar5/images/icon_CampaignLog_32.gif' => '4b2651b74c0df08fb38da1c50ad55540',
+ './themes/Sugar5/images/icon_Calls_32.gif' => 'b1396f0d4aad67469aade38e1c1ad57a',
+ './themes/Sugar5/images/icon_Calls.gif' => '70a325dc66ac4330ba4920655cc9d2f1',
+ './themes/Sugar5/images/icon_Bugs_32.gif' => '007a66380bb5ac5a9053c1e3932c4452',
+ './themes/Sugar5/images/icon_Bugs.gif' => 'daa1bafd411fa579d13aeb01832fe018',
+ './themes/Sugar5/images/icon_BasicSearch.gif' => '34138a6f18eda6680e2b6ac129888e74',
+ './themes/Sugar5/images/icon_Application.gif' => '9f19f9a35c1269591cf0f4503fb4b0a4',
+ './themes/Sugar5/images/icon_AdvancedSearch.gif' => '5a13f19316a76136a13e23f39bce0c73',
+ './themes/Sugar5/images/icon_AdminThemes.gif' => '3dabb98180140be0f27983c53fb93fa3',
+ './themes/Sugar5/images/icon_AdminPDF.gif' => 'c4cd278746674615533992c06439c5c5',
+ './themes/Sugar5/images/icon_AdminMobile.gif' => '4aa8c94a81f105a4823afdf79f013e3d',
+ './themes/Sugar5/images/icon_Address.gif' => '01031291c5fb1552e40d63f1b08c0314',
+ './themes/Sugar5/images/icon_Activities.gif' => '1e5d01a07e4f988611af6677a037f318',
+ './themes/Sugar5/images/icon_Accounts_32.gif' => 'b0c893a480c52340a287af42547b4977',
+ './themes/Sugar5/images/icon_Accounts.gif' => '34ca712c6aa6b7ba68882e330423c057',
+ './themes/Sugar5/images/icon_A1_newmod.gif' => '71bcdef4548fad731d44fc681e3a6599',
+ './themes/Sugar5/images/iFrames.gif' => '0a0e964460018c0dc9295d9c48773952',
+ './themes/Sugar5/images/hide_submenu_shortcuts.gif' => '4faa81f7be7484ed9442ad726ec56bcb',
+ './themes/Sugar5/images/hide.gif' => '63afbcf6fa1496c0e933c26bde33e1be',
+ './themes/Sugar5/images/helpInline.gif' => '904c4318b2195909683e239f45fe7543',
+ './themes/Sugar5/images/help.gif' => 'ea88b2a7841ae9e84005b5c126df88e3',
+ './themes/Sugar5/images/h3Arrow.gif' => '0a8858f4bda73af356182ba99ae6b4d4',
+ './themes/Sugar5/images/green_camp.gif' => 'c2b67c21d37fd3d49b6f01b062f36529',
+ './themes/Sugar5/images/getLatestDocument.gif' => 'ca3c6fbc6d4d6d39a637eed0bfc4a08a',
+ './themes/Sugar5/images/formButtonBgOn.gif' => '668b0ee95cf4b0792c03f91a82fcfb91',
+ './themes/Sugar5/images/formButtonBg.gif' => 'd9a0a446c17015d99879870c0ae585c1',
+ './themes/Sugar5/images/fonts.normal.icon.gif' => 'd15ee190de151df2fc02366847a42333',
+ './themes/Sugar5/images/fonts.largest.icon.gif' => '93227b0e5335d1c749d0c62f932f7246',
+ './themes/Sugar5/images/fonts.larger.icon.gif' => '8ed79085035c19fa3a08a57821ccff68',
+ './themes/Sugar5/images/export.gif' => '3141bb408338e95954f49498ab2074a3',
+ './themes/Sugar5/images/end_off.gif' => '6f2b185bd8b4f04255184d7c3b972be4',
+ './themes/Sugar5/images/end.gif' => '99ec17980972c2227478df9ca2b09abf',
+ './themes/Sugar5/images/emptyTabSpace.gif' => 'e8f77ea4d4936a67560b361411f260ac',
+ './themes/Sugar5/images/editview.gif' => 'a63bb099ded39d833199d47c9fdb3ead',
+ './themes/Sugar5/images/editlabels.gif' => 'a63bb099ded39d833199d47c9fdb3ead',
+ './themes/Sugar5/images/editfields.gif' => '163d3292d1080120c96e991c9d8c411a',
+ './themes/Sugar5/images/edit_wizard.gif' => 'fe64a594539d3561d50fd34fd94143a5',
+ './themes/Sugar5/images/edit_inline.gif' => '6ba1fa243664fb3cfa0cab4b24592d2d',
+ './themes/Sugar5/images/edit.gif' => '1f3d5009fc12cd0117903d8959a559e9',
+ './themes/Sugar5/images/downarrow_inline.gif' => '505e2477efbea90592a169aafbe41794',
+ './themes/Sugar5/images/downarrow_big.gif' => 'b4ffaa11d20c5433c8ce6f392b27c02d',
+ './themes/Sugar5/images/downarrow.gif' => '4d89350bedf353e12294bad2c2fe5ae6',
+ './themes/Sugar5/images/doc_image_inline.gif' => '1f4a7d82e86352ac2121acc844dc6d4a',
+ './themes/Sugar5/images/detailview.gif' => '2645ccf6df6dc9d58ce65f3d1c6d2b67',
+ './themes/Sugar5/images/detailViewBg.gif' => '29d8425fa2b3989a037bf2128584d6f8',
+ './themes/Sugar5/images/delete_inline.gif' => 'ec132bd60b0000543ec4efd32c76c50c',
+ './themes/Sugar5/images/delete.gif' => '697dc7d112e2ebc278eccea520d520dc',
+ './themes/Sugar5/images/def_image_inline.gif' => 'b31f890084d972950ae50e513e4ef1c6',
+ './themes/Sugar5/images/decline_inline.gif' => 'd9e006d8758ad871d7395cf931dec405',
+ './themes/Sugar5/images/dce_Settings.gif' => 'b255bb8ae39976fd6c83c3037d090f36',
+ './themes/Sugar5/images/currentTabRed.gif' => '61f911fae96b5f90d2525613bd3b1dc7',
+ './themes/Sugar5/images/currentTabPurple.gif' => '3cc2d348b8073e73ececbc4ae361220b',
+ './themes/Sugar5/images/currentTabOff.gif' => 'e0a67ebcd0eec021c19f4ab454759e8f',
+ './themes/Sugar5/images/currentTabOcher.gif' => '4852317d212d6e5a1ce7b0036dd77e45',
+ './themes/Sugar5/images/currentTabLinkBg.gif' => 'acc41261d49919fc0b20c3bb009d3af0',
+ './themes/Sugar5/images/currentTabGreen.gif' => '085f9927ac24c8311c3779c3d6733440',
+ './themes/Sugar5/images/currentTabGray.gif' => '95c3cb31673ed2da9e979938a48c09c8',
+ './themes/Sugar5/images/currentTabBlue.gif' => '294f6bb00ba34db9b2227dd7140651ef',
+ './themes/Sugar5/images/currentTab.gif' => '6f2002081ed96fd0931f686d24bacd78',
+ './themes/Sugar5/images/colors.sugar.icon.gif' => 'e38d443ab9b82145d88c0c97fed53789',
+ './themes/Sugar5/images/colors.red.icon.gif' => 'b1168092ee831ee08b535fe066d11246',
+ './themes/Sugar5/images/colors.purple.icon.gif' => 'b89bae62c86fc22236ba93c1f2b1a245',
+ './themes/Sugar5/images/colors.orange.icon.gif' => '3a5a16d7a8c5e411bb63aefe58b75e17',
+ './themes/Sugar5/images/colors.green.icon.gif' => '248e791c8a93cb006b630112a44d71b7',
+ './themes/Sugar5/images/colors.gray.icon.gif' => '77fe1105f4be1d9b336ec346b17891dc',
+ './themes/Sugar5/images/colors.blue.icon.gif' => '48d30c2c20d84f45455008f6254e21e1',
+ './themes/Sugar5/images/close_inline.gif' => '4706ecc190ed6d3cf0024cfdeef7540a',
+ './themes/Sugar5/images/close_dashboard.gif' => 'dba10edcd9ab300f2483dc8de161e91a',
+ './themes/Sugar5/images/close.gif' => '00a1e63ea66cad36fd357afcec227e3b',
+ './themes/Sugar5/images/clear.gif' => '3a6bcb1c1b1ddb11df095f281803433d',
+ './themes/Sugar5/images/check_inline.gif' => '3fd7b54b12de5ee794dd44c53c7d9b7d',
+ './themes/Sugar5/images/calendar_previous.gif' => '600d00e3bd8a384dc5f851646c513390',
+ './themes/Sugar5/images/calendar_next.gif' => 'f128d2e8cff00f25d3fc6aca822acc54',
+ './themes/Sugar5/images/calendarHeaderBg.gif' => 'e737dc503d8ebfd782d55ecbb9fa3ab7',
+ './themes/Sugar5/images/blank.gif' => 'fc94fb0c3ed8a8f909dbc7630a0987ff',
+ './themes/Sugar5/images/bgRed.gif' => '1df40fd5435907a1fed4d4b181ea6b46',
+ './themes/Sugar5/images/bgPurple.gif' => 'c1b6d97ad95f8388da34d4a4175a81d3',
+ './themes/Sugar5/images/bgOcher.gif' => '982082d036e99833dc1f1a483fce2a5d',
+ './themes/Sugar5/images/bgGreen.gif' => '3bfe3b4d1fc2f0ef39f90507fb4a43d2',
+ './themes/Sugar5/images/bgGray.gif' => '1c6dfddeae3b2d18974506837c29ccef',
+ './themes/Sugar5/images/bgBtnPurple.gif' => '0c88b16eb4908ef062773520a9211fb1',
+ './themes/Sugar5/images/bgBtnOrange.gif' => 'f85be7940606135360db38bb8dc4ad36',
+ './themes/Sugar5/images/bgBtnGreen.gif' => 'f278617bef25b52737a1c1c535c85bca',
+ './themes/Sugar5/images/bgBtnGray.gif' => 'bc636fcc0fde952eee600795e26f3568',
+ './themes/Sugar5/images/bgBtnBlue.gif' => 'd81f5ba78f4717e5723adf3843437ee4',
+ './themes/Sugar5/images/bgBtn.gif' => 'ad46bd5437826c67f8919874f6f3bea0',
+ './themes/Sugar5/images/bgBlue.gif' => 'def431ff46dac5dc23aa47a531b13343',
+ './themes/Sugar5/images/bg.gif' => 'e542169ee5ed28cdb45b3996603193d6',
+ './themes/Sugar5/images/basic_search.gif' => 'afc9992d8567a78b5b7df196549eb29a',
+ './themes/Sugar5/images/bar_loader.gif' => 'e67d85a8d2d4021514815d0ff4d65173',
+ './themes/Sugar5/images/attachment.gif' => 'ad2683b97bcee20be7ba039d3259b2fa',
+ './themes/Sugar5/images/arrow_up.gif' => '3c0164a46adc6ddcb9fec3cf1129e190',
+ './themes/Sugar5/images/arrow_down.gif' => '7ae60aa70170713428e265b1cc695291',
+ './themes/Sugar5/images/arrow.gif' => 'e351c2d5a2ad28ee72a15e1d2ce7e2bd',
+ './themes/Sugar5/images/advanced_search.gif' => 'd0022a5800ff6a11b04c6e27293d717c',
+ './themes/Sugar5/images/accept_inline.gif' => 'bbb0aed40e938669c98b65642a400a7d',
+ './themes/Sugar5/images/_blank.png' => '9bbf8b89dfee264016a5cf95daa02a10',
+ './themes/Sugar5/images/WorkflowSequence.gif' => 'b9e51ce79d65182c0748279018448b7e',
+ './themes/Sugar5/images/WorkFlow.gif' => '658b40aa9fb3ffcabb432ea328ad8415',
+ './themes/Sugar5/images/Users.gif' => 'a2e9e7731e06a4fdfb2f49563e98af6b',
+ './themes/Sugar5/images/UpgradeDCEInstances.gif' => '31f57a942f93564c75925c5c31f36644',
+ './themes/Sugar5/images/Upgrade.gif' => '31f57a942f93564c75925c5c31f36644',
+ './themes/Sugar5/images/Trackers.gif' => '7982f8a7fda959763e0ddd42bea0af7e',
+ './themes/Sugar5/images/TimePeriods.gif' => '8bef1e7f6a0ee77b6647cfc4a0751b72',
+ './themes/Sugar5/images/Themes.gif' => '05511600d7087ec404b6aa7f02d2a7b4',
+ './themes/Sugar5/images/Teams.gif' => '8fce7827080693884dc5022b6b473940',
+ './themes/Sugar5/images/TaxRates.gif' => '396d48130733c340ce8ee093013d94d6',
+ './themes/Sugar5/images/Tasks.gif' => 'a4c8b293d7fa762d2c706bd68284cd67',
+ './themes/Sugar5/images/TaskReports.gif' => '294a24ced60317d6a909a714e57f8d56',
+ './themes/Sugar5/images/Support.gif' => 'c6fae35bc372012c1a5d5e0b5f22ada5',
+ './themes/Sugar5/images/SummationWithDetailsOver.gif' => '807077e21b5c6ce180a7a1e0afbb4f7b',
+ './themes/Sugar5/images/SummationWithDetails.gif' => '332fa7357f54428c5915518695824a69',
+ './themes/Sugar5/images/SummationOver.gif' => 'fe76f4f7000c4ea19b6c4176a4550887',
+ './themes/Sugar5/images/Summation.gif' => 'd85caef83542e64a75e265fbd0564d3f',
+ './themes/Sugar5/images/SugarPortal.gif' => '5cafb18cdfd6265e77f852dc00b8ff93',
+ './themes/Sugar5/images/Studio.gif' => '2941190a8b8f1c37cd373e8474abaff2',
+ './themes/Sugar5/images/StickyThread.gif' => '35afdc080b5426b09be58bf765a1c4a7',
+ './themes/Sugar5/images/Shippers.gif' => 'daa6d24122b0df9fc1dc5943ce449058',
+ './themes/Sugar5/images/Search.gif' => '089000300b21c8ff74c2e258e9b44bd4',
+ './themes/Sugar5/images/Schedulers.gif' => 'c0160825b845a73b070194906e818aee',
+ './themes/Sugar5/images/SchedulerTest.gif' => '635fcbfc6d5eb2785ef2e6c6f8360a91',
+ './themes/Sugar5/images/RowsAndColumnsOver.gif' => 'b09fbec8214a744010e69b6cbc071379',
+ './themes/Sugar5/images/RowsAndColumns.gif' => 'ff458b8e2303ec31d0f6b2ded6140ea0',
+ './themes/Sugar5/images/Roles.gif' => 'dcbf376b885458b1fc8c21de7884284e',
+ './themes/Sugar5/images/Reports.gif' => 'bb24a8be9e6989ac92388904f95ed183',
+ './themes/Sugar5/images/ReportMaker.gif' => 'd7db8b4fabcfec16fbb25c15296d6f7f',
+ './themes/Sugar5/images/Repair.gif' => 'adca1c05640dc8f3cd315afbc8d323e2',
+ './themes/Sugar5/images/RenameTabs.gif' => '895241cf5de9d8519169e2b9ef03e08f',
+ './themes/Sugar5/images/Releases.gif' => 'ff8de6cf41ad9056011973384f2e0602',
+ './themes/Sugar5/images/Rebuild2.gif' => '4e1dd889a93a7131cdb8204ae321fe5a',
+ './themes/Sugar5/images/Rebuild.gif' => 'fa51c1e12cfd77a0a5076b92c2d0b218',
+ './themes/Sugar5/images/ReassignRecords.gif' => 'efc325a2f834ce64b1c7cf195917ed77',
+ './themes/Sugar5/images/RSS.gif' => '0d29ec2ee3476d83dcf7757ea3874ecd',
+ './themes/Sugar5/images/Quotes.gif' => '5affc4f4bfe4676c2a38cf3d3fba411a',
+ './themes/Sugar5/images/QuoteReports.gif' => 'c6681a4817efaf2a036be75e94c97c98',
+ './themes/Sugar5/images/QueryBuilder.gif' => 'd705b041b021686b3b5e286305820163',
+ './themes/Sugar5/images/Prospects.gif' => 'a7bd5ae5e32198b8826d6986d84a8ad1',
+ './themes/Sugar5/images/ProspectLists.gif' => '9b1a622509e5881ec791edf4f68f5e95',
+ './themes/Sugar5/images/ProjectWeek.gif' => '077ad399f8640fb0e166eaed6c29cd35',
+ './themes/Sugar5/images/ProjectTemplate.gif' => 'f30534d557373942ec06aad47f735c01',
+ './themes/Sugar5/images/ProjectTask.gif' => 'f0be8090159b3a874267c3bc27c5a1c3',
+ './themes/Sugar5/images/ProjectSave.gif' => 'e5d6feda33978980d8e1b73446ca0cc3',
+ './themes/Sugar5/images/ProjectPlus.gif' => '23840e38f362cb897374c51441d4379d',
+ './themes/Sugar5/images/ProjectPaste.gif' => 'c5d040c4f0a4075aaa56acfbc393ee44',
+ './themes/Sugar5/images/ProjectOutdent.gif' => 'b117efdc268d2779a0c2f2f4cfee7fc3',
+ './themes/Sugar5/images/ProjectMonth.gif' => '1ef256376cacea730a9b1dd3d58e7463',
+ './themes/Sugar5/images/ProjectMinus.gif' => '126cd19c26aa220d323230c8aa49c98a',
+ './themes/Sugar5/images/ProjectInsertRows.gif' => 'b89dcac2784c2a3376c305b9772c5bdd',
+ './themes/Sugar5/images/ProjectIndent.gif' => 'ab916206b4065192b84964622b7d6735',
+ './themes/Sugar5/images/ProjectExpandAll.gif' => '1910605074d6f26e568dc21aa96e2ce8',
+ './themes/Sugar5/images/ProjectDelete.gif' => '4ef20c4cba758dfb05e48684c3be5ffe',
+ './themes/Sugar5/images/ProjectCut.gif' => '710ffc5a60e29507c0ddda70ffb6d97e',
+ './themes/Sugar5/images/ProjectCopy.gif' => '8287a031948f6d670d90e827af6fce31',
+ './themes/Sugar5/images/ProjectCollapseAll.gif' => '97f5d2f6e6c9d2d967d751d4dfabfcc6',
+ './themes/Sugar5/images/Project2Weeks.gif' => '099efa2eb9e391a6d908eb583915d999',
+ './themes/Sugar5/images/Project.gif' => '0f2bbcc30e50b5eab1d048f2ab765e47',
+ './themes/Sugar5/images/Products.gif' => '9ec09d637b692326d91d4d440027fa4b',
+ './themes/Sugar5/images/Product_Types.gif' => 'ba210721c31f762ce799b1494a30c3b9',
+ './themes/Sugar5/images/Product_Categories.gif' => '27135ec896a6baa6ad57a2e34ec938da',
+ './themes/Sugar5/images/ProductTypes.gif' => 'ba210721c31f762ce799b1494a30c3b9',
+ './themes/Sugar5/images/ProductTemplates.gif' => '9ec09d637b692326d91d4d440027fa4b',
+ './themes/Sugar5/images/ProductCategories.gif' => '27135ec896a6baa6ad57a2e34ec938da',
+ './themes/Sugar5/images/Print_Email.gif' => '268880a56f51100e33f9a68bf25fb14c',
+ './themes/Sugar5/images/Price_List.gif' => '64db64739b3b4b1c9ce76150a751cd03',
+ './themes/Sugar5/images/PriceList.gif' => '64db64739b3b4b1c9ce76150a751cd03',
+ './themes/Sugar5/images/PatchUpgrades.gif' => 'e1bf9565545d0f9db2f91f04a3dfa758',
+ './themes/Sugar5/images/Password.gif' => '086dda11a59db50c8440183881f65c0c',
+ './themes/Sugar5/images/OpportunityReports.gif' => '7d7c840292ae89a66e97afa3e68df9a7',
+ './themes/Sugar5/images/Opportunities.gif' => 'ec7850c09b72c670df154aa110c79dd8',
+ './themes/Sugar5/images/OnlineDocumentation.gif' => 'bd0436d969ff34a660e7b232030d3009',
+ './themes/Sugar5/images/OfflineClient.gif' => '3dc473e333147502c3e3430de47169ec',
+ './themes/Sugar5/images/Notes.gif' => '292043a6551d4603e78593e82593ebc8',
+ './themes/Sugar5/images/Newsletters.gif' => '600e2e1f5cac2dbee54a9007205bcd86',
+ './themes/Sugar5/images/MyReports.gif' => 'dd67b2a4377927936785cdf65907ba2a',
+ './themes/Sugar5/images/MyProject.gif' => '89d4806940ca826bac6410b618dbf5d9',
+ './themes/Sugar5/images/MoreDetail.png' => '1a47ea4ae673fbe8968198bfda6160a6',
+ './themes/Sugar5/images/ModuleLoader.gif' => 'ac4f600f348a8c3bbf32c9082764b03e',
+ './themes/Sugar5/images/ModuleBuilder.gif' => '0fe61ab8532b0383257a0622b946662c',
+ './themes/Sugar5/images/MigrateFields.gif' => 'a79346f2c230cd4c1007a9862ed61924',
+ './themes/Sugar5/images/Meetings.gif' => '2c72354fdd58d87185411e82cc21bf8d',
+ './themes/Sugar5/images/MeetingReports.gif' => 'a58134ee43a3f2ab202ad79287d04ed4',
+ './themes/Sugar5/images/MatrixReportOver.gif' => 'ca3be4462316c7afea373bb8c1dd1675',
+ './themes/Sugar5/images/MatrixReport.gif' => '6c99c710b2e8dab38ad44c00d3077183',
+ './themes/Sugar5/images/Manufacturers.gif' => '766a34c1e1b72f73e3bf1f10967157cd',
+ './themes/Sugar5/images/MailboxesTestImport.gif' => '24805afea32fdc482f4e361f646688bd',
+ './themes/Sugar5/images/License.gif' => '608b6f103f2b754e79434b8b777ad05d',
+ './themes/Sugar5/images/Leads.gif' => 'b175423893fda627ea17f28a56cb6e59',
+ './themes/Sugar5/images/LeadReports.gif' => 'dee66cbcb4b69a663d336ff96fa67568',
+ './themes/Sugar5/images/Layout.gif' => '35df00aa3f68c87b0aecabc831845f1d',
+ './themes/Sugar5/images/LanguagePacks.gif' => '05135c460d24ae3e66fb05e9b482665a',
+ './themes/Sugar5/images/KBDocuments.gif' => '1d466eaeda296f54c42a7e473e4f6c0c',
+ './themes/Sugar5/images/KBArticle.gif' => '1d466eaeda296f54c42a7e473e4f6c0c',
+ './themes/Sugar5/images/KB.gif' => 'c2718316fee41c86feb233435b554c36',
+ './themes/Sugar5/images/InboundEmail.gif' => 'fed8e9392ab61a5a44b563ecfc5c0005',
+ './themes/Sugar5/images/ImportCustomFields.gif' => '289a0dbdce175f1965e967472b5c4484',
+ './themes/Sugar5/images/Import.gif' => 'ec8d49ed5fb711f57b417cfe1d0488d4',
+ './themes/Sugar5/images/Holidays.gif' => '92b9af82ee68587554ec248e968df011',
+ './themes/Sugar5/images/Forecasts.gif' => '91247a184474f0ee853e02e5eb1a11f5',
+ './themes/Sugar5/images/ForecastWorksheet.gif' => '26e8216f6a272f569b9fc358b7374c74',
+ './themes/Sugar5/images/ForecastReports.gif' => '955a99e3f4bc500f36fc111c33485eab',
+ './themes/Sugar5/images/FieldLabels.gif' => '163d3292d1080120c96e991c9d8c411a',
+ './themes/Sugar5/images/Feeds.gif' => '0d29ec2ee3476d83dcf7757ea3874ecd',
+ './themes/Sugar5/images/FavoriteReports.gif' => 'c16aa5c7a37ecfa94ab08f910b93e9a4',
+ './themes/Sugar5/images/ExportCustomFields.gif' => '6ddd4192adc8637ccf791e51c793f828',
+ './themes/Sugar5/images/Employees.gif' => '28e6705d0394e3f993a4366a59d1f7ce',
+ './themes/Sugar5/images/Emails.gif' => '2f78dfe83afc2d333fa74d0794630f23',
+ './themes/Sugar5/images/EmailTemplates.gif' => '2f78dfe83afc2d333fa74d0794630f23',
+ './themes/Sugar5/images/EmailSetupWizard.gif' => 'ba3c3a98ea383dc47a87af1f65218031',
+ './themes/Sugar5/images/EmailReports.gif' => '1e39a4896b8ce38a9d86bccee447e49f',
+ './themes/Sugar5/images/EmailMan.gif' => '1947b99573ba0d64f5eab2813ce9436b',
+ './themes/Sugar5/images/EmailFolder.gif' => 'c483bfcd31c873a997c360baf703773c',
+ './themes/Sugar5/images/EmailDiagnostic.gif' => '42ac00c64920143627f00c63b737f90f',
+ './themes/Sugar5/images/EditLayout.gif' => 'a63bb099ded39d833199d47c9fdb3ead',
+ './themes/Sugar5/images/Dropdown.gif' => 'da9558529b3727e61e30401e8175e1f7',
+ './themes/Sugar5/images/Documents.gif' => '0c114a3f4cb2d096c724d656c905f2ad',
+ './themes/Sugar5/images/DocumentRevisions.gif' => '3835202af7013415ffae7bdc8fcf4ae6',
+ './themes/Sugar5/images/Diagnostic.gif' => '39b302edd4e3839712d840ac1b3be940',
+ './themes/Sugar5/images/DataSets.gif' => '80b250c42133beaab652ee142ce4e872',
+ './themes/Sugar5/images/Dashboard.gif' => '236427476f3a491e8c7b0b184d85e431',
+ './themes/Sugar5/images/DCETemplates.gif' => 'b148b8dde915c6326f9bd8b5a9affd8f',
+ './themes/Sugar5/images/DCELicensingReport.gif' => 'b255bb8ae39976fd6c83c3037d090f36',
+ './themes/Sugar5/images/DCEInstances.gif' => '1776dee1d1555d49d520f69c0da3d997',
+ './themes/Sugar5/images/DCEDataBases.gif' => '856fa97c260658dab05fa00f1bc94de9',
+ './themes/Sugar5/images/DCEClusters.gif' => 'd7cf8d22d3fdc5e1a4fb0daca91e244d',
+ './themes/Sugar5/images/DCEActions.gif' => 'dde16f8608d3aeef715ed9ad7e57956e',
+ './themes/Sugar5/images/CustomQueries.gif' => '01e9e4094828c8fc64b2e89ba471b830',
+ './themes/Sugar5/images/Currencies.gif' => '8d1421616dcc7965a2995ea286cfb00d',
+ './themes/Sugar5/images/CreateiFrames.gif' => '2def896bb91201710ee131522715616f',
+ './themes/Sugar5/images/CreateWorkflowDefinition.gif' => '73b406c5f369834fa80a29f0899e5508',
+ './themes/Sugar5/images/CreateWebToLeadForm.gif' => '5c34510b1241c7cf34eb885ddb45117d',
+ './themes/Sugar5/images/CreateUsers.gif' => '4d734abaed2d76e620e61427f22cc38a',
+ './themes/Sugar5/images/CreateTimePeriods.gif' => 'ab2c8949e2dd22b5b61aebc49f44064c',
+ './themes/Sugar5/images/CreateTeams.gif' => '421c80edb890544d961afaaf0fb208e6',
+ './themes/Sugar5/images/CreateTasks.gif' => '4d6463cdf79b2c1cd010d601ef52fc07',
+ './themes/Sugar5/images/CreateScheduler.gif' => '2e5fade41c543b2ed1126c9194ed7a51',
+ './themes/Sugar5/images/CreateRoles.gif' => 'ab9c72a16e60764e035ffac6567df86b',
+ './themes/Sugar5/images/CreateReport.gif' => 'a01aa35efd2db58eb027e4dbd47f6d7b',
+ './themes/Sugar5/images/CreateQuotes.gif' => 'b38cea113277578a6129720ff6a068da',
+ './themes/Sugar5/images/CreateQuery.gif' => '94d3ce011099602f29ad6b83dfaa2bc4',
+ './themes/Sugar5/images/CreateProspects.gif' => '430421f03ca03f95b3ca5deb00966403',
+ './themes/Sugar5/images/CreateProspectLists.gif' => 'b47839294deb452586135734cc13cdb2',
+ './themes/Sugar5/images/CreateProjectTemplate.gif' => '684bd67db7cca4190dc4b49c0a8e83bb',
+ './themes/Sugar5/images/CreateProjectTask.gif' => '67ac607e90a8860af5fa31d18d9f53e0',
+ './themes/Sugar5/images/CreateProject.gif' => '74dd612dc97d6d2c65b172057040b59c',
+ './themes/Sugar5/images/CreateProducts.gif' => 'c99bdb9ae5677cc441584205e998955c',
+ './themes/Sugar5/images/CreateOpportunities.gif' => 'a9589cfff43f2a16963772a928b93fce',
+ './themes/Sugar5/images/CreateNotes.gif' => '1c001421c72c428f4a5acbc944e43301',
+ './themes/Sugar5/images/CreateMeetings.gif' => '8782a51731204d530a218de9dcf72d0c',
+ './themes/Sugar5/images/CreateMailboxes.gif' => '514b96d819aed1a9a618382cc18f74ef',
+ './themes/Sugar5/images/CreateLeads.gif' => '7a295c6e01b5ed10293dbc942fdc5013',
+ './themes/Sugar5/images/CreateKBArticle.gif' => '5528bfd3ccd117da8ee76453b8fffec8',
+ './themes/Sugar5/images/CreateHolidays.gif' => '74bb94942b330a7353ebfddb3e395710',
+ './themes/Sugar5/images/CreateEmployees.gif' => '4db0f4883525baa72d760602b0d0a9d6',
+ './themes/Sugar5/images/CreateEmails.gif' => 'c73f6fa2d64183c99f6b43fd3e8457cb',
+ './themes/Sugar5/images/CreateDropdown.gif' => '62f0e60bfb25e8210266f0c46a724b7b',
+ './themes/Sugar5/images/CreateDocuments.gif' => 'b6803a3158f8aafb797dcf40e40c7f5a',
+ './themes/Sugar5/images/CreateDataSet.gif' => '1c01e157d2c0f04448aeee5288cd0903',
+ './themes/Sugar5/images/CreateDCETemplates.gif' => '235a27f63ec69172665a9725de0138ab',
+ './themes/Sugar5/images/CreateDCEInstances.gif' => '37d2083c5656806c41f379de561de12e',
+ './themes/Sugar5/images/CreateDCEDataBases.gif' => '030b11434890898ea46f7eb47e26ca74',
+ './themes/Sugar5/images/CreateDCEClusters.gif' => '7412cac6f131844a2be1b2259bb7bdb2',
+ './themes/Sugar5/images/CreateCustomQuery.gif' => '7f8b8b8b1649f379e9fa0993833594f4',
+ './themes/Sugar5/images/CreateContracts.gif' => '432241ea2fbc4b3dfe50ee180b440132',
+ './themes/Sugar5/images/CreateContacts.gif' => '543275e52941e451c0594dbc10c19ac5',
+ './themes/Sugar5/images/CreateCases.gif' => 'd3e6eb8dd24fbd768cc2a203e035dfe4',
+ './themes/Sugar5/images/CreateCampaigns.gif' => '698c76de164b71478d1fae396248f976',
+ './themes/Sugar5/images/CreateCalls.gif' => 'faf97408d67ad4ab815d81dbfe5dc2c9',
+ './themes/Sugar5/images/CreateBugs.gif' => 'f5d7a5030b9d2f7efb6d1a5a4cc82cef',
+ './themes/Sugar5/images/CreateAccounts.gif' => 'ea824000c6d1db94e57df7cc78cb9b3c',
+ './themes/Sugar5/images/Contracts.gif' => '92d58d7fb871e059005a90b49466645f',
+ './themes/Sugar5/images/ContractReports.gif' => '3714580af7d9867f1cea0930bf615c16',
+ './themes/Sugar5/images/Contacts.gif' => '18553d7e06e2b115dcd8ae18a00c692e',
+ './themes/Sugar5/images/ContactReports.gif' => 'f32df37fe41d3901406fb1b96b73d0d9',
+ './themes/Sugar5/images/ConfigureTabs.gif' => '58ddcd48ddbbf664fc2a22320ff4cd81',
+ './themes/Sugar5/images/ConfigureSubPanels.gif' => 'd11894b643f3c8350e58a2a279539a08',
+ './themes/Sugar5/images/Cases.gif' => '9ff67484d4e580f7ec6b1c4fadef4e6c',
+ './themes/Sugar5/images/CaseReports.gif' => '8566460850d40f43817bca5f19441509',
+ './themes/Sugar5/images/CampaignsWizard.gif' => 'c3d4e57e0dbbf6eb079c79b2bfdb7d70',
+ './themes/Sugar5/images/Campaigns.gif' => 'caf6345d36c8b318148e08eb017fc592',
+ './themes/Sugar5/images/Calls.gif' => 'fb79ca6ff562b6321c30039d577a55cc',
+ './themes/Sugar5/images/CallReports.gif' => '9ce20f70f663bcc30232c585533a67fd',
+ './themes/Sugar5/images/Calendar.gif' => 'ac7a361a60069ea66eded3e8fc22d253',
+ './themes/Sugar5/images/Bugs.gif' => 'b147d01e9f226777cf497b92439efdf0',
+ './themes/Sugar5/images/BugReports.gif' => '9edff2df8863ace2cf1e7986e5423523',
+ './themes/Sugar5/images/Backups.gif' => '1e5b888a85fe97b85e32a23544a53d40',
+ './themes/Sugar5/images/Backup.gif' => '4cf4850d478c593d3ab33fb60fdf2b6c',
+ './themes/Sugar5/images/ArrowButtons.png' => '3cc685bfa21913c19ebacce89568b882',
+ './themes/Sugar5/images/AllRSS.gif' => 'c6438ac72aed8be0bb89ad7981d23e92',
+ './themes/Sugar5/images/AllNews.gif' => 'c6438ac72aed8be0bb89ad7981d23e92',
+ './themes/Sugar5/images/AlertEmailTemplates.gif' => '92010f89490e4fdae70a4ecee1bfbd5d',
+ './themes/Sugar5/images/Administration.gif' => 'a68a5b890796251b8947061f696ca15e',
+ './themes/Sugar5/images/ActivitiesReports.gif' => 'ad890a0190fedffa6bcb73557060fa9b',
+ './themes/Sugar5/images/Accounts.gif' => 'e081de07d0263b270d0d306642375901',
+ './themes/Sugar5/images/AccountReports.gif' => 'c98b4b2eb32be534f8fc1b2ac29fa1a2',
+ './themes/Sugar5/images/ACLRoles.gif' => 'dcbf376b885458b1fc8c21de7884284e',
+ './themes/Sugar5/css/yui.css' => 'ab561cd401d774311653f92ff8336fbe',
+ './themes/Sugar5/css/wizard.css' => '9f23702bef6e6bce98959a25f3e0f71e',
+ './themes/Sugar5/css/style.css' => '9cda0e41dc2769e0a2825736bed40d1b',
+ './themes/Sugar5/css/print.css' => '629df961f98baab29b4530b56322a1ca',
+ './themes/Sugar5/css/deprecated.css' => '13f41876c3a31bde4ac2e1223bdd707c',
+ './themes/Sugar5/css/chart.css' => 'dda00a834e88692f3d08bec70db12dc9',
+ './sugar_version.php' => 'ed78e48cba51ae74974d05f0379824b1',
+ './soap/SoapTypes.php' => 'b44fab9d2a11ee705798529a17ccd24e',
+ './soap/SoapSugarUsers.php' => '64195c9cdca985b78adaba2860f07f41',
+ './soap/SoapStudio.php' => '08ff60f88df7da98b081a199510858f8',
+ './soap/SoapRelationshipHelper.php' => 'b2411195c28a0d05418ec95d7fc85c3d',
+ './soap/SoapPortalUsers.php' => '3e76580fb0d3f0754ec120ff93c2db85',
+ './soap/SoapPortalHelper.php' => '9151ef0312f56b2525b86082f5c102ca',
+ './soap/SoapHelperFunctions.php' => '9bb410a2431677d69c68165723ad79f7',
+ './soap/SoapErrorDefinitions.php' => 'f39459659519912f55b559e49acdd20b',
+ './soap/SoapError.php' => 'd6440fe460e7a9f163e5f98ff6dd1157',
+ './soap/SoapDeprecated.php' => '4f7f3984799fea00f3075dba57b41a64',
+ './soap/SoapData.php' => '1daea86416c5b9706c6ec200704b6c8b',
+ './soap.php' => '453ea7dc02b44113fab1f37dd203548a',
+ './service/v4/soap.php' => '270ed42705d7933e84e0032c4b8fd8ec',
+ './service/v4/rest.php' => 'f429b2a67d4f5a9302d9169d911da967',
+ './service/v4/registry.php' => '5eed51c9ea2ec836de9ccabfca13c11d',
+ './service/v4/SugarWebServiceUtilv4.php' => '3ac21d9fc5585eeba6946fce19df0f01',
+ './service/v4/SugarWebServiceImplv4.php' => 'c7e8d34adebb4d3c72ff2ef9133bcc18',
+ './service/v3_1/soap.php' => '1ba337904cc10a3ad9f1609fe14f6ae5',
+ './service/v3_1/rest.php' => '6ddcf6a263f3e87870155fe66e5cad42',
+ './service/v3_1/registry.php' => 'cf3ca508bdeef0dbcc53759fa0e4bcd2',
+ './service/v3_1/SugarWebServiceUtilv3_1.php' => 'da3bb6ef58bae317f5b18e0e07995be0',
+ './service/v3_1/SugarWebServiceImplv3_1.php' => 'fe73eec4f57dcaafb5e087281caf294e',
+ './service/v3/soap.php' => '38149ba3c4bc6f68ed38e10d0a341799',
+ './service/v3/rest.php' => '00cc4ae016b5fbc9506470e2bd84b92b',
+ './service/v3/registry.php' => '775fd364c36a0e8ef151219ca0f03a8a',
+ './service/v3/SugarWebServiceUtilv3.php' => '59cec45e51367ab7974e35daf8106825',
+ './service/v3/SugarWebServiceImplv3.php' => '184093d1ea9d03dd4736a3f0885250c5',
+ './service/v2_1/soap.php' => '51d80264bab2b10b0cf07b1fa232f5a2',
+ './service/v2_1/rest.php' => '97716eb170c494d20f4424b851b7ed82',
+ './service/v2_1/registry.php' => '44dced209606f86f712792d06a7488f3',
+ './service/v2_1/SugarWebServiceImplv2_1.php' => '35606eaf05d94941c38afc0fd03aa6fd',
+ './service/v2/soap.php' => '32f23f109f4ff981abf8e9ccc2df3236',
+ './service/v2/rest.php' => '4e84dc75c44747059d916d213ef15188',
+ './service/v2/registry.php' => '2a29c657ebbd837c8f49a51ef3780a29',
+ './service/v2/SugarSoapService2.php' => '9f5cf5ab0a057eee1d009783976d3b2c',
+ './service/utils/SugarRest.js' => 'f0a5086d019a7cc4a3bca2d8a5f923cf',
+ './service/example/test.html' => '70a3f7981c7aa315f1093ec38bbc5d91',
+ './service/example/example.html' => '48b7addac379bd10867aaaeaca7afc60',
+ './service/example/Rest_Proxy.php' => 'f2067bb8f194b84c29a93cd1b8a5a3c0',
+ './service/core/webservice.php' => '2b71c40f8b66256b6d350769de002aff',
+ './service/core/WSDL.tpl' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './service/core/SugarWebServiceImpl.php' => 'f6375420ad0088e5aa7426d6b60fe2e4',
+ './service/core/SugarWebService.php' => '53760c0e2e503c35d78f170a275ea59d',
+ './service/core/SugarSoapService.php' => 'a535e5a1fb0587666b8dcc5ac6046566',
+ './service/core/SugarRestUtils.php' => '9ac2b9f16e789b2c8e9e3d8e981526aa',
+ './service/core/SugarRestServiceImpl.php' => 'dcffa0dc980f16730ce498b68c834ccf',
+ './service/core/SugarRestService.php' => '0a0009b9f881f222eae15bf9086715bc',
+ './service/core/SoapHelperWebService.php' => 'c3cc8bcbd5e33dbb30acefb1f1c5c150',
+ './service/core/REST/SugarRestSerialize.php' => '5ec4341d9e56974f1467ff102a4eb5dc',
+ './service/core/REST/SugarRestRSS.php' => 'dad22f4846e062e40edc6a443009356b',
+ './service/core/REST/SugarRestJSON.php' => '566fe67c55e0fd3bfb6cf3bd36bf7dfa',
+ './service/core/REST/SugarRest.php' => 'bfd1b11c826ab05b802535d5b0eb5a9d',
+ './service/core/PHP5Soap.php' => '4bb99bfb2c2571301c4e7dd038b9e9ce',
+ './service/core/NusoapSoap.php' => 'af9622b9373bae1b8bc9be13e2c8aead',
+ './robots.txt' => 'f71d20196d4caf35b6a670db8c70b03d',
+ './removeme.php' => 'c909fd8a94c02aad0439aa88999580a5',
+ './pdf.php' => '2175c3d745bb23b7812cb7fea96dfefa',
+ './modules/EAPM/EAPMEdit.js' => '0da3de9fe26e14c515a820c11664a33a',
+ './modules/EAPM/views/view.edit.php' => 'f10e48f116d60d793098d27d9f440b14',
+ './modules/EAPM/views/view.detail.php' => 'ccd14d5ab309c68fbe4a527c967d5c34',
+ './modules/EAPM/vardefs.php' => '6f8af0161ebb3e033b6f1fbabb82dd74',
+ './modules/EAPM/tpls/EditViewHeader.tpl' => '9968d21c791e8b2fe89e6ba2265d7b3f',
+ './modules/EAPM/tpls/EditViewFooter.tpl' => '7e6d67537bacf08df11acf888d5d5b51',
+ './modules/EAPM/tpls/DetailViewFooter.tpl' => 'b94cc2039971178f1a62e04b7b017cee',
+ './modules/EAPM/metadata/subpanels/default.php' => 'c205ff13e601a72dde2a5a23d7950bba',
+ './modules/EAPM/metadata/searchdefs.php' => '4b1f356c95d5ae8405df454c2dc907e1',
+ './modules/EAPM/metadata/quickcreatedefs.php' => '3b835395a73e38d7f7bfe646f69f259e',
+ './modules/EAPM/metadata/popupdefs.php' => '40087dc17f8a28447bc181613579502e',
+ './modules/EAPM/metadata/metafiles.php' => '82cc6b332b2fbfb9c4e95765da6e9dcb',
+ './modules/EAPM/metadata/listviewdefs.php' => '2bed1cabe6a73878bbfa6007d98ed5b1',
+ './modules/EAPM/metadata/editviewdefs.php' => 'b6974cf3e104cf605382914081f86af0',
+ './modules/EAPM/metadata/detailviewdefs.php' => '0c4a3279d990c047c4521db8bcf92129',
+ './modules/EAPM/metadata/SearchFields.php' => 'e8effa2440f6759dd94173e6170592c8',
+ './modules/EAPM/language/en_us.lang.php' => 'ac9f45ca95a8a4cf709bfa176685b946',
+ './modules/EAPM/controller.php' => '261e9cca8e30eb6bbc7cc8c38ebd1bb7',
+ './modules/EAPM/action_view_map.php' => '7f9d495a7362c0e56dafa364b6a3046e',
+ './modules/EAPM/EAPM.php' => '02e9f519f5e2cda7139b581fb590d3fc',
+ './modules/EAPM/CheckLogins.php' => '2a700d0b0feed2831cfe1b1db55404c2',
+ './modules/vCals/vardefs.php' => '1b1f5d3652b0c84f2af8c444b2b100e7',
+ './modules/vCals/vCal.php' => 'a8f75d33c72ff614137c08e9cc328356',
+ './modules/vCals/field_arrays.php' => '23cdf390f157fce35ac36130bff01a43',
+ './modules/vCals/Server.php' => '4bdac2390625a292adc9a7a3dbc92926',
+ './modules/vCals/HTTP_WebDAV_Server_vCal.php' => 'b28576b27b86f98cfb18399a10e1d6f7',
+ './modules/Versions/vardefs.php' => '595403530f1a5f62372ed986c25bd17a',
+ './modules/Versions/language/en_us.lang.php' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/Versions/index.html' => 'b1c40cce7e82e5cf396ccad74fe7360c',
+ './modules/Versions/field_arrays.php' => 'ec6c8cf6e9b775040ea95b0c0bd870b5',
+ './modules/Versions/Version.php' => 'd1d8f342abe3c3564d85ed24355f9054',
+ './modules/Versions/InstallDefaultVersions.php' => '6e58099c0876f79214f8238363d8bc39',
+ './modules/Versions/ExpectedVersions.php' => 'abd307792c9969f56157dbb95e24f267',
+ './modules/Versions/DefaultVersions.php' => '685176ff71a709facf369caf0259b55e',
+ './modules/Versions/CheckVersions.php' => 'ec34d2c876c83ff9b20eced20e062487',
+ './modules/Users/DetailView.js' => '226e76165861456ca3c07a4984f0e98b',
+ './modules/Users/PasswordRequirementBox.js' => '812d65c03c22c3356cdb889b71dc31da',
+ './modules/Users/User.js' => '89d0867052db8e00bd24858bffe301f5',
+ './modules/Users/login.js' => 'd167b63b648c06addd4abf49597c574f',
+ './modules/Users/views/view.wizard.php' => 'c3ae26a542bbd90586d75f39f5b83662',
+ './modules/Users/views/view.list.php' => 'fa77f89687ca1092ea0c605dd76303ae',
+ './modules/Users/vardefs.php' => 'aa468faf100ff528010f39d409c907e3',
+ './modules/Users/tpls/wizard.tpl' => '257b63ccccb59fac05e73150bc39ca4d',
+ './modules/Users/reassignUserRecords.php' => '9cc3174c7ffa193fefd6fd9051830fc8',
+ './modules/Users/password_utils.php' => 'c41679fe7f11523eac0cdd97248306bd',
+ './modules/Users/metadata/subpanels/default.php' => 'c110665c9c3577b12ca45ec95f7e5b79',
+ './modules/Users/metadata/subpanels/ForTeams.php' => '5677b1abc77a48c83426dfb0f374d809',
+ './modules/Users/metadata/subpanels/ForProspectLists.php' => '09b60438c79d6adfdf6cfc9bcbe14230',
+ './modules/Users/metadata/subpanels/ForProject.php' => 'dbe7cb1aaae960b1b7f9312b98dc8528',
+ './modules/Users/metadata/subpanels/ForMeetings.php' => '7583a569629ab26f01da7397daa0c21b',
+ './modules/Users/metadata/subpanels/ForEmails.php' => '3fc8e0af16ed19897ee2f3703229cc6d',
+ './modules/Users/metadata/subpanels/ForCalls.php' => 'aa17597d596adeeb00b750fc938f72e2',
+ './modules/Users/metadata/subpaneldefs.php' => '646cb58c8a90c3e914cb318839c97843',
+ './modules/Users/metadata/searchdefs.php' => '4ef2283a1a35bffe915388166b639de7',
+ './modules/Users/metadata/reassignScriptMetadata.php' => 'e449cc5da384ffcd3c778c98bed7e87d',
+ './modules/Users/metadata/popupdefs.php' => '84f62e9e59fd28ae84ecc976f5d5008b',
+ './modules/Users/metadata/listviewdefs.php' => '5117909dab36844a94643acc44f7a9bb',
+ './modules/Users/metadata/SearchFields.php' => '6b7ab730dfab23213f6287a2e2036652',
+ './modules/Users/login.tpl' => '50490eb850a02b01087afccbf85bc814',
+ './modules/Users/login.css' => '3fc617df6406081f31b2f3306e59c6ed',
+ './modules/Users/language/en_us.lang.php' => 'a8e84c73463785759093bd66e7c32c79',
+ './modules/Users/field_arrays.php' => '46dac3bcf42a3641b80eb507f6cc203a',
+ './modules/Users/controller.php' => 'c5a25f7c913e1d434b628c6bbe7fee7f',
+ './modules/Users/authentication/SugarAuthenticate/SugarAuthenticateUser.php' => '412dc66d6fedfacdcf69fd23371efe05',
+ './modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php' => 'a35a41d26a301fa1f3595dbda55494c4',
+ './modules/Users/authentication/SAMLAuthenticate/settings.php' => '871bd3ac7732d6172a0320d52b938420',
+ './modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php' => '05070f789165351c2946c679611fe44a',
+ './modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/CHANGELOG.txt' => '113d14ef4333039359236ffed624fb85',
+ './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/xmlsec.php' => '8cb35c75b9c09e3272ad3c627ed1546d',
+ './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php' => '5d1043271a8c7c9460298216a8fa6ef9',
+ './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php' => 'a53b94607ab662938184a76fce86696d',
+ './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php' => 'faea297ec834b918f4452a28803c74ac',
+ './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php' => '9daa3f46b708efe880c43367cb24dff1',
+ './modules/Users/authentication/SAMLAuthenticate/index.php' => '0b7cae26cc46589daa26b226054c1b8b',
+ './modules/Users/authentication/SAMLAuthenticate/SAMLAuthenticateUser.php' => '38cdc9a901ab7d6236da3671f4cf1653',
+ './modules/Users/authentication/SAMLAuthenticate/SAMLAuthenticate.php' => '5734ed62cd74477dcaf1b81957b8e383',
+ './modules/Users/authentication/LDAPAuthenticate/LDAPConfigs/default.php' => '324614bec129312bfa042b23e83afba0',
+ './modules/Users/authentication/LDAPAuthenticate/LDAPAuthenticateUser.php' => '26031af713b483f5b4dc1dfdb6128297',
+ './modules/Users/authentication/LDAPAuthenticate/LDAPAuthenticate.php' => '5d7c80203aba7b2249f84a3c5407536d',
+ './modules/Users/authentication/EmailAuthenticate/EmailAuthenticateUser.php' => '062f2c32422c8e6e11e11b3020d1a525',
+ './modules/Users/authentication/EmailAuthenticate/EmailAuthenticate.php' => 'bedbc545d6c1c13a65a44e00546fa2ac',
+ './modules/Users/authentication/AuthenticationController.php' => '924d58e79a9910a44334f0fc5e3a8905',
+ './modules/Users/UserSignatureEditView.html' => 'bbd67cc5332b92df27ca7c014fb6d544',
+ './modules/Users/UserSignature.php' => '5456216c3e5b1f8db76456303b4dc71f',
+ './modules/Users/User.php' => '0cb0ec4d4d582ea5c3e6c55b1f213bb8',
+ './modules/Users/SetTimezone.tpl' => 'cf34dc1b1078752a75434a0384eb2b57',
+ './modules/Users/SetTimezone.php' => '1e823c77a370ac9711c65c945e426257',
+ './modules/Users/SaveTimezone.php' => 'fca4ed5d777fbcfab3d55de554de3bef',
+ './modules/Users/SaveSignature.php' => '1de31710e9c753516fb513eca488e1c6',
+ './modules/Users/Save.php' => 'e00f12055fe2081dcf1a2abfec2ae377',
+ './modules/Users/Popup_picker.html' => '5b27b65f225c39e6dab14b381463f324',
+ './modules/Users/Popup_Users_picker.html' => 'e94231d815056c82437b0e97cc5c1c33',
+ './modules/Users/PopupUsers.php' => '907d639d7dae8d7fcecd8b7f6465d630',
+ './modules/Users/PopupSignature.php' => '126dd53e1ebb61733039070efac3c6f1',
+ './modules/Users/PasswordRequirementBox.css' => 'bb346afe22bafdd935b85fd8fc4b2c06',
+ './modules/Users/Menu.php' => 'b45197498fc8bd915f18379dbaa06000',
+ './modules/Users/Logout.php' => '261edee3721dd9ad1e381d3d7d421dac',
+ './modules/Users/Login.php' => 'af0c080dff82f24dc1c47316d2c45319',
+ './modules/Users/ListRoles.php' => 'f0724318d9f4d19b0e9d2fe0bdcfe898',
+ './modules/Users/GeneratePassword.php' => '020ec67f84a5a489af637d9de6e6f43e',
+ './modules/Users/Forms.php' => '61bb049bc61cde1712a8631bb812accf',
+ './modules/Users/Error.php' => '4e9cd9d420e137c4ba95633c341b0e24',
+ './modules/Users/EditView.tpl' => '66c720509c562e4e456d93140a03591d',
+ './modules/Users/EditView.php' => '08d05d650c11cf3c529f8467f8f88107',
+ './modules/Users/DetailView.tpl' => 'b0654809a7fea5588ccdae6570353c09',
+ './modules/Users/DetailView.php' => 'c80852e6712dcbcae0b4e30603ed825f',
+ './modules/Users/Changenewpassword.tpl' => '7e3894ab32dd3b85ce898aa156e493d4',
+ './modules/Users/Changenewpassword.php' => '6970f9264bab535e96f4d0b278be4d30',
+ './modules/Users/ChangePassword.php' => '949feb7d487fb4cae17e1a7417bda3ee',
+ './modules/Users/ChangeGroupTab.php' => 'fab6b8eaa7260b44d7bfa9c23b014ba7',
+ './modules/Users/Authenticate.php' => 'd5f53bfed576f3b39f85175e9651e232',
+ './modules/UserPreferences/vardefs.php' => '3bd284e0ea6a03f1ace7d7707aea83ab',
+ './modules/UserPreferences/index.php' => 'a56f06c827d512f011a01ceea8802c51',
+ './modules/UserPreferences/field_arrays.php' => 'd5873bcc7da2c957a90d2a1ad27904d6',
+ './modules/UserPreferences/controller.php' => 'cc33cbd9645b36a8a9471ed53edab320',
+ './modules/UserPreferences/UserPreference.php' => '2569c09e4bbe171ff8fd4e07d7d819cb',
+ './modules/UpgradeWizard/upgradeWizard.js' => '1fed20dbb04bb39a5e3811388dfbd22b',
+ './modules/UpgradeWizard/uw_utils.php' => '5f914473ef68c93a2abfdd1639d07599',
+ './modules/UpgradeWizard/uw_main.tpl' => '4543b15b248aca9ada4bb50d7626e5a1',
+ './modules/UpgradeWizard/uw_files.php' => 'a3591043d2840d87f35e4f3c7750463f',
+ './modules/UpgradeWizard/uw_emptyFunctions.php' => 'b87a790ffd80c140831a32f03ec06718',
+ './modules/UpgradeWizard/uw_ajax.php' => '3f1085d921fbaa13c9ceaff45f5c2442',
+ './modules/UpgradeWizard/upload.php' => '064e98fd37ed3cc802c0bf2d3b803656',
+ './modules/UpgradeWizard/upgradeTimeCounter.php' => '62edce24d54fc137e1cac51c06993182',
+ './modules/UpgradeWizard/upgradeMetaHelper.php' => '3b5c67ef5e7513e227c8b32202c84a10',
+ './modules/UpgradeWizard/tpls/layoutsMerge.tpl' => 'd498c9b5553f028eb2c9bdb093b13f10',
+ './modules/UpgradeWizard/systemCheckJson.php' => '7a87c2a6eaf73e94a4f2049481cb1420',
+ './modules/UpgradeWizard/systemCheck.php' => '86d1269ccccdf0cfff9d85e26a5d52ba',
+ './modules/UpgradeWizard/start.php' => '90631b73109f239d2d461147eae4c25a',
+ './modules/UpgradeWizard/silentUpgrade_step2.php' => '2e33dfaffa9393e389c60387cfd2753a',
+ './modules/UpgradeWizard/silentUpgrade_step1.php' => '93813d78ba8cde1a6b0200c26f4a85c2',
+ './modules/UpgradeWizard/silentUpgrade_dce_step2.php' => 'c36e25dc68e8f6371c14066225432b34',
+ './modules/UpgradeWizard/silentUpgrade_dce_step1.php' => 'ffc7b7d576e46fa15089df969a234fe3',
+ './modules/UpgradeWizard/silentUpgrade.php' => '24fac0ff5b213d81224ea49ce4fb1960',
+ './modules/UpgradeWizard/processing.gif' => 'd7c43fc19181ee59862601bfce100b41',
+ './modules/UpgradeWizard/preflightJson.php' => '3ab7297c97ebe86905d59bcbead9b5dc',
+ './modules/UpgradeWizard/preflight.php' => '8df05a9d81df4260e079b23ff269fe05',
+ './modules/UpgradeWizard/populateColumns.php' => 'f5ac3a6e957abbb79d5ec6770693468d',
+ './modules/UpgradeWizard/layouts.php' => '016ec71c667a0d130072cf88e6640a39',
+ './modules/UpgradeWizard/language/en_us.lang.php' => '693b929e6cba2a836c33884082132aff',
+ './modules/UpgradeWizard/index.php' => '303cb4b78b209399eca7c9cc4a7b97a4',
+ './modules/UpgradeWizard/end.php' => '0fcf81fabc33028a8360a3df6f36b696',
+ './modules/UpgradeWizard/deleteCache.php' => 'c1d87d7d28bcb80fd6d0525e9dc00813',
+ './modules/UpgradeWizard/commitJson.php' => '4f787ab77508307f013b9541470413df',
+ './modules/UpgradeWizard/commit.php' => '5dffdfea11b038cba94a321a5c9fa6f9',
+ './modules/UpgradeWizard/cancel.php' => '1a1861b844497c4b565def19369bdee4',
+ './modules/UpgradeWizard/UploadFileCheck.php' => '78f615eba31bb0f012280c769e895977',
+ './modules/UpgradeWizard/SugarMerge/SugarMerge.php' => '0d34bb5ba44497d886a8b201762a4ba5',
+ './modules/UpgradeWizard/SugarMerge/SubpanelMerge.php' => 'ed1e45aeef4c9c67b1a3b2b6d314c5bc',
+ './modules/UpgradeWizard/SugarMerge/SearchMerge.php' => '8df136e1f77b58c54f0f49a59aedf8ac',
+ './modules/UpgradeWizard/SugarMerge/QuickCreateMerge.php' => '6e6cc59dcd415d950be5dd845530f62d',
+ './modules/UpgradeWizard/SugarMerge/ListViewMerge.php' => '5d0a70b44b1c7373178f34359584f681',
+ './modules/UpgradeWizard/SugarMerge/EditViewMerge.php' => '5871d2fe09f2f99369791510a22f8357',
+ './modules/UpgradeWizard/SugarMerge/DetailViewMerge.php' => '94856b898734b9aebdb2bdc4138d2887',
+ './modules/UpgradeWizard/SILENTUPGRADE.txt' => '1b6463c295028ef776dc81f0582a409e',
+ './modules/UpgradeWizard/Menu.php' => '46177baa2468358d3dbeb04fb55fadaa',
+ './modules/Trackers/vardefs.php' => 'e4d7369777783f8a07bfbdd44999b7d6',
+ './modules/Trackers/store/TrackerSessionsDatabaseStore.php' => 'feedd59a686f8a290a3cf738734e972f',
+ './modules/Trackers/store/TrackerQueriesDatabaseStore.php' => 'ee6a4b845b855827c2133aa9cdd15aba',
+ './modules/Trackers/store/SugarLogStore.php' => '0abecdbd8a7b97278c524ada4edbe9cd',
+ './modules/Trackers/store/Store.php' => 'fcdf5d2451d3d88673654e60da6acf6a',
+ './modules/Trackers/store/DatabaseStore.php' => '46e236bcdd32bb051dc06ea5e7f24ce6',
+ './modules/Trackers/monitor/tracker_monitor.php' => '16b610c8a86797487dea2a0fa0136e89',
+ './modules/Trackers/monitor/Monitor.php' => '64495f4d07f067d1b0d39b74f719ed86',
+ './modules/Trackers/monitor/BlankMonitor.php' => '6767a630898ae9aa008e91cc5150c050',
+ './modules/Trackers/language/en_us.lang.php' => '1345b3505bb24d495e8e19fbba0ec9bb',
+ './modules/Trackers/config.php' => '4051c5a73d564237b51e1471fa8c3328',
+ './modules/Trackers/populateSeedData.php' => '444a12a759370439bfe3f04649488df0',
+ './modules/Trackers/TrackerManager.php' => 'b93c3c6b7915670318d6d020f844cd67',
+ './modules/Trackers/Tracker.php' => '680ae5a394f66296a161da0a335cb5eb',
+ './modules/Trackers/Trackable.php' => 'daea56a5d5fc440036947096f87303b7',
+ './modules/Trackers/Metric.php' => 'd3dafcf4c7c3da916ccaec7dd1a13ebd',
+ './modules/Trackers/BreadCrumbStack.php' => '131c50a6ab6e2b7324ec6537930db530',
+ './modules/Tasks/views/view.edit.php' => '1f87e6702874c411bc695c624ce57a38',
+ './modules/Tasks/vardefs.php' => '59766579bc73b1dc3091c22adaf89ac4',
+ './modules/Tasks/tpls/QuickCreate.tpl' => 'a3e76184c8fd107945281b284ebc11fa',
+ './modules/Tasks/metadata/subpanels/default.php' => '186d3ead2f8c74c638dfe9e5eceabcf7',
+ './modules/Tasks/metadata/subpanels/ForHistory.php' => '0d5d2b41bb9c1187b5de4c657d330a0c',
+ './modules/Tasks/metadata/subpanels/ForEmails.php' => '2ae86d7e7ec36d6034edff288766c38c',
+ './modules/Tasks/metadata/subpanels/ForActivities.php' => '1e6fca2d6773ecb7159c2b9a21bc3b69',
+ './modules/Tasks/metadata/studio.php' => 'a18e70360a5895dd7c0da4d7f930f33c',
+ './modules/Tasks/metadata/searchdefs.php' => 'bd3bf1c65daae0206b922a30296f8b57',
+ './modules/Tasks/metadata/quickcreatedefs.php' => 'fdb993a49bfc078b714d53bd364fcc7f',
+ './modules/Tasks/metadata/listviewdefs.php' => '35d2cc3b2face83ff13b96e9fa59dce8',
+ './modules/Tasks/metadata/editviewdefs.php' => 'e7cc85c6c63a8031217705096a0778f4',
+ './modules/Tasks/metadata/detailviewdefs.php' => 'd45f14a81beaf71702bd230415731de6',
+ './modules/Tasks/metadata/additionalDetails.php' => '62115b6e9f474ae4d723b25c9d5357fe',
+ './modules/Tasks/metadata/SearchFields.php' => '0b9e415252241158841c633377f6212a',
+ './modules/Tasks/language/en_us.lang.php' => '05ad7e321a629e5edd0ea40200518184',
+ './modules/Tasks/field_arrays.php' => '578586a9d27ef3519ec9bcad0f6b2073',
+ './modules/Tasks/TasksQuickCreate.php' => '319575147ca931572d8ffe5f86d66479',
+ './modules/Tasks/Task.php' => 'e47e5c86532c53599f37a6d1de5b731f',
+ './modules/Tasks/Save.php' => '5901a0e97e3604b1303b95de3248f14b',
+ './modules/Tasks/MyTasks.php' => '0812e375cea310e135154a07c2233bf4',
+ './modules/Tasks/MyTasks.html' => 'eef2d088906a4a3ca2ed5c3fb7b8c3b9',
+ './modules/Tasks/Menu.php' => '06049096d180e77230b22298fe3e008e',
+ './modules/Tasks/Dashlets/MyTasksDashlet/MyTasksDashlet.php' => 'bb5394ab47efe1853c123ffeead7f1ea',
+ './modules/Tasks/Dashlets/MyTasksDashlet/MyTasksDashlet.meta.php' => 'e27204f03b222e677251993b263af683',
+ './modules/Tasks/Dashlets/MyTasksDashlet/MyTasksDashlet.data.php' => '0c5a8cb52b95ff6efd03a71d0160338a',
+ './modules/TableDictionary.php' => '25ef82d92853bf5d3ed424107a7bb758',
+ './modules/SugarFeed/views/view.adminsettings.php' => 'a3597caf672ff770a9ba86e62423843b',
+ './modules/SugarFeed/action_view_map.php' => '3b0679f45ce6cea84ea77d5783a3a024',
+ './modules/SugarFeed/vardefs.php' => '1c499286c8af124d3a3e10da2284b716',
+ './modules/SugarFeed/metadata/subpanels/default.php' => '40bda533c59a5a627e1e18111223a33e',
+ './modules/SugarFeed/metadata/searchdefs.php' => 'f31d790edd5f094f873836952beb35cd',
+ './modules/SugarFeed/metadata/popupdefs.php' => 'b3c5fdc3a8bf9950dfff1bac559891c9',
+ './modules/SugarFeed/metadata/metafiles.php' => '37bc261e99c89a111a676c0918f2c036',
+ './modules/SugarFeed/metadata/listviewdefs.php' => 'e6ba6eb7eaf8d82f15793e269f315dac',
+ './modules/SugarFeed/metadata/editviewdefs.php' => 'c7fe443df3a4bda848c4669cd85bc960',
+ './modules/SugarFeed/metadata/detailviewdefs.php' => '255168df0d2024f156affb1fd0b60e65',
+ './modules/SugarFeed/metadata/dashletviewdefs.php' => 'dec6bef0e6afa31a0178eb260376ee8a',
+ './modules/SugarFeed/metadata/SearchFields.php' => 'aa8d48635deda3ec77ff1522213f88d3',
+ './modules/SugarFeed/linkHandlers/YouTube.php' => '5333d1f93f453a09ca91cb3d8d4dbe03',
+ './modules/SugarFeed/linkHandlers/Link.php' => '030b059d4d21b3e69388afe01a99a4ba',
+ './modules/SugarFeed/linkHandlers/Image.php' => '57eef89d5eca2a06a69929994a09d4fa',
+ './modules/SugarFeed/language/en_us.lang.php' => 'c386eb017aa688b08a132b2878e2fd4f',
+ './modules/SugarFeed/feedLogicBase.php' => '5679ed4e941ac2f28a084af99eec7df9',
+ './modules/SugarFeed/tpls/AdminSettings.tpl' => '15e26141e5f98784f96f78a14decaee4',
+ './modules/SugarFeed/SugarFeedFlush.php' => 'd8f0148a9606cd3ea8ceced4a743ec53',
+ './modules/SugarFeed/Menu.php' => '689b6fac731f80c95a1fbf24da4aa5f9',
+ './modules/SugarFeed/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/SugarFeed/Dashlets/SugarFeedDashlet/UserPostForm.tpl' => 'f32a591995f0087b69a9c09cb126d248',
+ './modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedScript.tpl' => '62dcebb59b5dfb0b297b83257c07b76b',
+ './modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedDashlet.php' => '311306d8959e193fb7336c06ba94c75d',
+ './modules/SugarFeed/Dashlets/SugarFeedDashlet/SugarFeedDashlet.meta.php' => '671e67c8cb16fd2393c86741dc531172',
+ './modules/SugarFeed/Dashlets/SugarFeedDashlet/Options.tpl' => '3e52b000a5e4196dd906f276f6fffc5e',
+ './modules/SugarFeed/SugarFeed.php' => '43ea72ab8dd8a21f617020f1235f9103',
+ './modules/SugarFeed/AdminSettings.php' => '4a4e87f638d6408f72adc03d38485350',
+ './modules/Studio/JSTransaction.js' => '36ddb37e1a173d58a1e8d3ac8c728399',
+ './modules/Studio/studio.js' => '0ef9ae531b2dfd6710eafc9556c6e9bc',
+ './modules/Studio/studiodd.js' => '5184cf38b52396d94afaec27b473d0f3',
+ './modules/Studio/studiotabgroups.js' => '29c08f5ea908bfff0ce3f78656cd7289',
+ './modules/Studio/ygDDListStudio.js' => '5a89d4bc04b8fe28e36c5d2df393953e',
+ './modules/Studio/wizards/StudioWizard.php' => '6a1b121436ad862ce331c37cb3d64120',
+ './modules/Studio/wizards/EditDropDownWizard.php' => '2544faf813d767d5ee1d899f241bbb0b',
+ './modules/Studio/wizard.php' => 'a3aa2c6e4f90f1ca59c9b27e1b662ae5',
+ './modules/Studio/parsers/StudioParser.php' => 'c6ad554e8dda163f8d8833a97366e941',
+ './modules/Studio/language/en_us.lang.php' => '5ce8340c4396eefe1d636388c218e311',
+ './modules/Studio/language/en_us.Portal.html' => '10ab579e1b9ade129b3f32d0de286f13',
+ './modules/Studio/config.php' => 'c6a1c6733d94c91cdb40020db6251602',
+ './modules/Studio/TabGroups/TabGroupHelper.php' => '85916f7c571c0b1aecebe5c8e01c41a5',
+ './modules/Studio/TabGroups/EditViewTabs.tpl' => 'ed1a9cba42a9baea7ec049969f101941',
+ './modules/Studio/TabGroups/EditViewTabs.php' => '3bce6ba3449444f0532d8df0d8c4c8d3',
+ './modules/Studio/TabGroups.php' => '3044dc610184d333ebb4c3bb38a24ee5',
+ './modules/Studio/SaveTabs.php' => '7a1bce049bb131087351407a91703c2e',
+ './modules/Studio/Forms.php' => '81c69876362d18fb55b89e59735b2bee',
+ './modules/Studio/DropDowns/EditView.tpl' => '62ee6ce084e14d75b2b812f571ff60d9',
+ './modules/Studio/DropDowns/EditView.php' => '8258a7a1ee8b2acef05b7688597a9a99',
+ './modules/Studio/DropDowns/DropDownHelper.php' => 'f312b9c50a862addcbb8d04f61048206',
+ './modules/SchedulersJobs/vardefs.php' => '3753fe65bb3e2b57182741b03d06b103',
+ './modules/SchedulersJobs/metadata/subpanels/default.php' => '0fe13add4d444631a0185bef78a8a9d6',
+ './modules/SchedulersJobs/language/en_us.lang.php' => '03324f484d6a373e8350d0248ffa155e',
+ './modules/SchedulersJobs/field_arrays.php' => '13aae3a0ab1f82eb46affc848ad25ace',
+ './modules/SchedulersJobs/SchedulersJob.php' => '2a7d2796404109dd20bfa744b26ea340',
+ './modules/Schedulers/vardefs.php' => '5841af67faf74658d311e7c9b6f8fe62',
+ './modules/Schedulers/metadata/subpanels/default.php' => '211c31e39227d3a7f847f6df832260cc',
+ './modules/Schedulers/metadata/subpaneldefs.php' => '2e8f77cf8125cb5617d69739192625ec',
+ './modules/Schedulers/language/en_us.lang.php' => '3a5297c79088ad18cbe1145031eea605',
+ './modules/Schedulers/index.php' => '725d0499fe99123816fb1132fd28c0dc',
+ './modules/Schedulers/field_arrays.php' => '7f556e11519f16ca7a2ca174efd196b9',
+ './modules/Schedulers/_AddJobsHere.php' => '30568dc7b8552ad338c7bdc364ee62c9',
+ './modules/Schedulers/SchedulerDaemon.php' => '75b412a5a0d4c06593139ddb0cae774c',
+ './modules/Schedulers/Scheduler.php' => 'c50dc4769f49dfeb3684d5de7c403c64',
+ './modules/Schedulers/Scheduled.php' => 'ff2907aa3f299ef7167a938f42116004',
+ './modules/Schedulers/Scheduled.html' => 'f6623756056847129c8c60b9b7209783',
+ './modules/Schedulers/Save.php' => '10a6b3f889665314db290da1c967f977',
+ './modules/Schedulers/Menu.php' => 'bce50cadfc1d4295d063c5b8a9909fca',
+ './modules/Schedulers/ListView.php' => '67f433a9a7f2d28cd23d97ffabd122db',
+ './modules/Schedulers/ListView.html' => '6e3ed1e28a2024c6dd8d3ed95c951b28',
+ './modules/Schedulers/JobThread.php' => '0501ccb1835c3ee8e2c48bd1c2705749',
+ './modules/Schedulers/EditView.php' => '5dd090303f4e62fcfa19f5ff4a38808e',
+ './modules/Schedulers/EditView.html' => 'ef6cfa5254f2b6afb37da045d148101d',
+ './modules/Schedulers/DetailView.php' => '2a107f341c14d5e8e8fedca898ca56d4',
+ './modules/Schedulers/DetailView.html' => '6c143319127bea5c8f12fdc0f663b1a1',
+ './modules/Schedulers/DeleteScheduled.php' => '4c316e04b8b1e166e4075d184bb3dd4c',
+ './modules/Schedulers/Delete.php' => 'efd2fdd9222ba66e5343251681e4447a',
+ './modules/SavedSearch/vardefs.php' => '8170e468e6f1f82a000847df49c3bcd2',
+ './modules/SavedSearch/metadata/listviewdefs.php' => '192cbaf9da9556966576a9ed5e0b3512',
+ './modules/SavedSearch/language/en_us.lang.php' => 'e8cfb480cc94c076f2ea83952941264e',
+ './modules/SavedSearch/index.php' => 'efaefa81ecee8146203b2a5ae2c21a1e',
+ './modules/SavedSearch/field_arrays.php' => '25b090694e486adc18ce183cacb9d643',
+ './modules/SavedSearch/UpgradeSavedSearch.php' => '795be93009d7775a516ad02e35befc2b',
+ './modules/SavedSearch/SearchForm.html' => '3e0e486147cc248570d85c55e4d8950d',
+ './modules/SavedSearch/SavedSearchSelects.tpl' => 'e14b466d89ca1482ba925fadcdd05588',
+ './modules/SavedSearch/SavedSearchForm.tpl' => 'da3645cf5c9f21e2c6d11016e8d7102d',
+ './modules/SavedSearch/SavedSearch.php' => 'eb6d703feb1b5e95f0696a53572445c0',
+ './modules/SavedSearch/Menu.php' => '76c48e25df51f1a0a32e78aa08cf05d8',
+ './modules/SavedSearch/ListView.php' => 'd0dd70645af34446ebfb7b7c2a0b6572',
+ './modules/Roles/views/view.list.php' => '392d4bb043944c45287d3f4bdcd360ba',
+ './modules/Roles/vardefs.php' => '5b7de081974cec1074d575a245c0925d',
+ './modules/Roles/metadata/subpanels/default.php' => '2246d76c8778b443088e62d5ddbc4595',
+ './modules/Roles/metadata/subpaneldefs.php' => '84309164c22abb4c2f688c1d8fc511fe',
+ './modules/Roles/metadata/searchdefs.php' => '0b686b6e1ee2fc58b61754749784f5d5',
+ './modules/Roles/metadata/listviewdefs.php' => 'eb8c0fffc25382723dce28f060018686',
+ './modules/Roles/metadata/SearchFields.php' => 'a0297ea6907a89f59dd169d18edac897',
+ './modules/Roles/language/en_us.lang.php' => 'd08455d2d7f498163d97f0287fe1ce6e',
+ './modules/Roles/field_arrays.php' => '59fe4fc278b0c1bdeab449beb06e8731',
+ './modules/Roles/SubPanelViewUsers.php' => 'a2b377abb3b7592ebb9cd51328d95bb6',
+ './modules/Roles/SubPanelViewUsers.html' => '1a57e7edd64a3a3ab7b154fbd770a39a',
+ './modules/Roles/SaveUserRelationship.php' => 'b44722019bde48112faa0e0f59d8cc97',
+ './modules/Roles/Save.php' => '793d861058e96cd69134a1b87ef9722e',
+ './modules/Roles/Role.php' => '840f5e2e77ffde3fef8713377ad0f11d',
+ './modules/Roles/Menu.php' => '9998ce5ca80ace0a3ec538c5e87fa7b5',
+ './modules/Roles/Forms.php' => '86d7155dd64c40a91d7e7f25ee01fe08',
+ './modules/Roles/EditView.php' => 'd87986b438b3a43a5c3feb71cc71c7d8',
+ './modules/Roles/EditView.html' => '85eb9914e8401320bad6dcecda33a70b',
+ './modules/Roles/DetailView.php' => 'fc296ea8b5ad617eace9f1e7b81dedd3',
+ './modules/Roles/DetailView.html' => 'e978da97c0f1567d1ae8aff98cf217c6',
+ './modules/Roles/DeleteUserRelationship.php' => 'cb0f087d7215b0d54f7a7238efce4d98',
+ './modules/Roles/Delete.php' => '1c5335b304b91abddd25a5b121d44cd1',
+ './modules/Releases/vardefs.php' => 'eda3b2695643ab8cbaf2e8799ff4e403',
+ './modules/Releases/language/en_us.lang.php' => '1868fa24b2b9db7528a57bbf14b1c3aa',
+ './modules/Releases/index.php' => 'b56b041809f81b7be8770e795a73b097',
+ './modules/Releases/field_arrays.php' => 'a7ad1478be87c4c28a336e71e780d885',
+ './modules/Releases/Save.php' => '3836c0f3fc25ae9689f4e64cae875c8b',
+ './modules/Releases/Release.php' => '7cd3b0714dd0e6176a4dde8a21840c06',
+ './modules/Releases/Popup_picker.php' => '50d6e1847bc03fd948e4d62b219fdab1',
+ './modules/Releases/Popup_picker.html' => 'c951953dba287fef4f2a1e04c8858f46',
+ './modules/Releases/Menu.php' => '6bd026361a892e7f2b1cdde2d8b417e3',
+ './modules/Releases/ListView.html' => 'c2501accf7836e8d97bea99b20172074',
+ './modules/Releases/EditView.php' => '9eee379213e94b6555ee9be803094173',
+ './modules/Releases/EditView.html' => '830fd8fa8f60c8e42bc2c315cfc160c3',
+ './modules/Releases/DetailView.php' => 'f49097744c4fbb00df4b3a80b634516b',
+ './modules/Relationships/vardefs.php' => 'fcc33d4741cb1495a8c969827f30d559',
+ './modules/Relationships/language/en_us.lang.php' => '979b1106f5ab083765cddfaddc9bb17e',
+ './modules/Relationships/field_arrays.php' => '45cd3e9bb1f7a0fe2bbfc15b95248c58',
+ './modules/Relationships/RelationshipHandler.php' => 'f7cfdd20a3a14bf5c2d62ee52703c939',
+ './modules/Relationships/Relationship.php' => '8e22b233f0c1cd7eb98a934548a967b3',
+ './modules/Prospects/views/view.list.php' => 'dffbd8d46cf6f37bf409596a8306d2d1',
+ './modules/Prospects/views/view.detail.php' => '524460f732a66b8829430df637a4e9be',
+ './modules/Prospects/vardefs.php' => '87b7d11c7dc6ddbd893c78741fe39dde',
+ './modules/Prospects/tpls/DetailViewHeader.tpl' => '3f7b93710019238efa92653766cc748b',
+ './modules/Prospects/metadata/subpanels/default.php' => '1339522c9eeec38f2a45541d189ce59f',
+ './modules/Prospects/metadata/subpaneldefs.php' => 'c657fdaaa87dd0ee910c5295b95003d4',
+ './modules/Prospects/metadata/studio.php' => '0786db2e28dbe43e51f47e9771841d00',
+ './modules/Prospects/metadata/searchdefs.php' => 'dace2a3e6018d1cb79e9d500a0ae2f23',
+ './modules/Prospects/metadata/quickcreatedefs.php' => 'c97898e1ba07f72f0f4f29a9135fb82a',
+ './modules/Prospects/metadata/popupdefs.php' => '880e8450e847fcd39dc8a6a6487ffb14',
+ './modules/Prospects/metadata/listviewdefs.php' => '30c27f7f365a14974413ab73273b7f8f',
+ './modules/Prospects/metadata/editviewdefs.php' => '77d1d32d21e6f0034cc9eeb89213de81',
+ './modules/Prospects/metadata/detailviewdefs.php' => '1ef40c7f0819f99c212a425c4f4e238c',
+ './modules/Prospects/metadata/additionalDetails.php' => 'f183e1b69fb95f7fa30a35b5f8b821aa',
+ './modules/Prospects/metadata/SearchFields.php' => '1e7ccc95eab7a01d885899825a2a435f',
+ './modules/Prospects/language/en_us.lang.php' => '51d25f98e3699f8a2f5f1e04af5dd5fa',
+ './modules/Prospects/field_arrays.php' => '51241a0004e0bb358a236fa8655258cd',
+ './modules/Prospects/Save.php' => '774b5ad6afb0822f8b56afd85dde4d25',
+ './modules/Prospects/ProspectFormBase.php' => '50497a920fc4b5155dd4c324e148315a',
+ './modules/Prospects/Prospect.php' => '6b69a8fa590f81f86ec12b402a2fd6e3',
+ './modules/Prospects/Popup_picker.html' => '0cab856872d14ffad67db705f9fac5c4',
+ './modules/Prospects/Menu.php' => 'cf73810172808b53ed5befcd8258e61f',
+ './modules/Prospects/Import.php' => '901946e285e08b4e8edab5ecdc2a72aa',
+ './modules/Prospects/Delete.php' => '8dd12fcb031cfad26cc8b0e6bac2ff27',
+ './modules/ProspectLists/vardefs.php' => '5a3361bd1b82da9910f92daa2864ac62',
+ './modules/ProspectLists/metadata/subpanels/default.php' => '3fbedc002f64433b6f50d7b64f0bc489',
+ './modules/ProspectLists/metadata/subpaneldefs.php' => '87eaec0a7e33121dd60f0769f1dc3603',
+ './modules/ProspectLists/metadata/searchdefs.php' => '1fb83db39751ba9e583a3d2019b46cf3',
+ './modules/ProspectLists/metadata/popupdefs.php' => 'e5b406f2dd6981ef5925a11519f59f1e',
+ './modules/ProspectLists/metadata/listviewdefs.php' => '5a1861c39bd93d36e4445d0b5cb0dd18',
+ './modules/ProspectLists/metadata/editviewdefs.php' => '09c4c64e5ea7adf58deebc4b3623aab6',
+ './modules/ProspectLists/metadata/detailviewdefs.php' => '710d9ce60f9fdcf00d01bdf7facf92c6',
+ './modules/ProspectLists/metadata/SearchFields.php' => '51bc2a44632ab09db184cbe82c0653f4',
+ './modules/ProspectLists/language/en_us.lang.php' => 'edd03416cf7d8102abdfa253fee45111',
+ './modules/ProspectLists/field_arrays.php' => 'c9ef4935b8a184a886e2b330ede6f4ce',
+ './modules/ProspectLists/TargetListUpdate.php' => 'eaaf076c5c0dd2c8353fa4ce5d96caba',
+ './modules/ProspectLists/SubPanelView.php' => '647be549716dd760cf29be7aa9630916',
+ './modules/ProspectLists/SubPanelView.html' => '21e44461a9595bad1cce017d2058d2ad',
+ './modules/ProspectLists/Save.php' => 'c0025df53ae0797b7787fd9b1737602f',
+ './modules/ProspectLists/ProspectListFormBase.php' => 'bfaaf6b451bae7635bed05ad102fc3f9',
+ './modules/ProspectLists/ProspectList.php' => '64a539a55212fbcd0ec762231dcb5e5e',
+ './modules/ProspectLists/Popup_picker.html' => '6902311909d092e893ec8d583863ac35',
+ './modules/ProspectLists/Menu.php' => '45c02816fd458c1bf8e8c0a62411a57b',
+ './modules/ProspectLists/Forms.php' => 'e3e083f6f6892fb028f8e30bf5bffc1e',
+ './modules/ProspectLists/Forms.html' => '15ef1dc459471b67c351282d3e00f836',
+ './modules/ProspectLists/Duplicate.php' => 'd89a7f0d0bd285a0930280c738527a63',
+ './modules/ProspectLists/Delete.php' => '796118b7ceafc8f816c6f772798e9da1',
+ './modules/ProjectTask/ProjectTask.js' => 'ada54f7db9ad037c753a6befdfee4791',
+ './modules/ProjectTask/views/view.list.php' => '71ea6bd90ec0ad45455f98b8e3e5256a',
+ './modules/ProjectTask/vardefs.php' => '0d34b70b22bd6811ec3ef2d2b2f896fa',
+ './modules/ProjectTask/tpls/QuickCreate.tpl' => '4dd0099e05fdeaf25b578bea811b26cf',
+ './modules/ProjectTask/metadata/subpanels/default.php' => 'ef6e514d97f20d3dfbb2073be6846378',
+ './modules/ProjectTask/metadata/subpaneldefs.php' => 'ace4e4a48a923d36d07ca55a64634e24',
+ './modules/ProjectTask/metadata/studio.php' => 'e56e0a14e6ed2664e3e19a433ba1dc29',
+ './modules/ProjectTask/metadata/searchdefs.php' => '2c48053cdc23e150746d45e6bf70b45d',
+ './modules/ProjectTask/metadata/popupdefs.php' => '0129a2d82e1f6333221592376da8484d',
+ './modules/ProjectTask/metadata/listviewdefs.php' => '10ed314b9940738bdc41e40e04844081',
+ './modules/ProjectTask/metadata/editviewdefs.php' => '5ddf2e7b95ac8ce945b5576c5d9d07af',
+ './modules/ProjectTask/metadata/detailviewdefs.php' => 'c891578c9ffb78c39d980c6b130aa9c4',
+ './modules/ProjectTask/metadata/additionalDetails.php' => '3debf7d4223659965db368d9072236fa',
+ './modules/ProjectTask/metadata/acldefs.php' => 'c3ff3175b906ede34a4c8b97439096d1',
+ './modules/ProjectTask/metadata/SearchFields.php' => 'ad9e6d2c7dd40f37075ed1e769a15893',
+ './modules/ProjectTask/language/en_us.lang.php' => 'a3133e507944685ba101edb0576cd622',
+ './modules/ProjectTask/field_arrays.php' => '99e9c75602079ee1ebe4483e96d48669',
+ './modules/ProjectTask/SubPanelView.php' => 'ef83d3a0508bcccfb820913d4676918e',
+ './modules/ProjectTask/SubPanelView.html' => 'eae194d95cffea13900ecf9614a02208',
+ './modules/ProjectTask/Save.php' => '613de85e3c64b187f8906a78dc9ce806',
+ './modules/ProjectTask/ProjectTaskQuickCreate.php' => '0096422fcc5afd8ee12582155cb462bf',
+ './modules/ProjectTask/ProjectTask.php' => 'd4bbc572e70e877c40dc1ad38fde8a75',
+ './modules/ProjectTask/Popup_picker.html' => '5954d35200b3998993c6d3834bb79d69',
+ './modules/ProjectTask/Popup.php' => 'c3edbfbdc357850743bfe913750e13d2',
+ './modules/ProjectTask/Popup.html' => 'bd269239afeb5a9865df3eec230ec7f6',
+ './modules/ProjectTask/MyProjectTasks.php' => '8b0258241c7860ad9cd420743d435574',
+ './modules/ProjectTask/MyProjectTasks.html' => '63f6b95493b9f5bbe06c4673d573b4b6',
+ './modules/ProjectTask/Menu.php' => '5d44b3b3bd99d4546ca82baed21c62fe',
+ './modules/ProjectTask/Forms.html' => 'b30faeb6fdb596c4dd425ecd22bcbb73',
+ './modules/ProjectTask/Delete.php' => '53df2a460c75bc1cb87aa419bfdb9131',
+ './modules/ProjectTask/Dashlets/MyProjectTaskDashlet/MyProjectTaskDashlet.php' => '2d3a7f29955a657bd22b28a11e96129b',
+ './modules/ProjectTask/Dashlets/MyProjectTaskDashlet/MyProjectTaskDashlet.meta.php' => 'a7cb681795e78b00e9037ebda350a593',
+ './modules/ProjectTask/Dashlets/MyProjectTaskDashlet/MyProjectTaskDashlet.data.php' => '6adec2dfd0e401f5e97a4fadd53bc055',
+ './modules/Project/Project.js' => '8b1002794632e9b0a91758b0be180c13',
+ './modules/Project/views/view.templatesedit.php' => '665c813d9c54d2e76ce0d2d6fd65db97',
+ './modules/Project/views/view.templatesdetail.php' => 'b87bced26b8e42afbf9208a307b57487',
+ './modules/Project/views/view.list.php' => '415b99993db68bcf349aaab12a7301c8',
+ './modules/Project/views/view.edit.php' => '7585a5def6ad87871dde511e01d518f3',
+ './modules/Project/views/view.detail.php' => 'f16e046281cd919a30dafa8f7d62b613',
+ './modules/Project/vardefs.php' => '0d8065e157c71059c36945be102877bc',
+ './modules/Project/tpls/QuickCreate.tpl' => 'f945805bd5ddb1963cef79413c5c9cdd',
+ './modules/Project/metadata/subpanels/default.php' => '6e4dd1edba8ea8d26a90bc2b47eeb146',
+ './modules/Project/metadata/subpanels/ForEmails.php' => '3005add91d6d61f247093f9232af2570',
+ './modules/Project/metadata/subpaneldefs.php' => '063079fbf6e22dbf09f41bd7e2bc61c5',
+ './modules/Project/metadata/studio.php' => 'b236f2ddd07671e55086596bbac02ccb',
+ './modules/Project/metadata/searchdefs.php' => 'dc4684e05e95216dba9ece5ec9786abb',
+ './modules/Project/metadata/quickcreatedefs.php' => '80bcfcddfdce79f7c1c535410cf6150c',
+ './modules/Project/metadata/popupdefs.php' => '83bd0e0d8e72c1f6b90bad6240479908',
+ './modules/Project/metadata/metafiles.php' => '1911d61a0a285ce8e1f4fd4d29703701',
+ './modules/Project/metadata/listviewdefs.php' => '155c6c174aecbd2303175119901fec54',
+ './modules/Project/metadata/editviewdefs.php' => '12684f40300a74aacd71923485acfb8c',
+ './modules/Project/metadata/detailviewdefs.php' => '8286ec435357279811f854b06d4f944d',
+ './modules/Project/metadata/additionalDetails.php' => 'a9ec9af1f3c83e5439695acce93911e2',
+ './modules/Project/metadata/SearchFields.php' => 'a3e27edbfa0063a91622ddff91a2c772',
+ './modules/Project/language/en_us.lang.php' => '1758b6b050bb6e2aa9c6c3a8dceed672',
+ './modules/Project/field_arrays.php' => '9d093e2a0ce97c512be35f3af7f1df81',
+ './modules/Project/action_view_map.php' => '04326954b793fc76db528f949f541c8c',
+ './modules/Project/SubPanelView.php' => 'a69b4eabcf7b8091a2438712bf97d93c',
+ './modules/Project/SubPanelView.html' => '2096fc5b39062f64191a3f27f4709532',
+ './modules/Project/Save.php' => 'b70640108a1dac870d8e93ef05aeff36',
+ './modules/Project/ProjectQuickCreate.php' => 'f59a98b8e20d89720b8d8258a71345cc',
+ './modules/Project/Project.php' => '10ad3258d0bda1e52051d456cfbe3018',
+ './modules/Project/Menu.php' => '57d1ba844804c2cedee57ce92df78152',
+ './modules/Project/Delete.php' => '3d90ac7e15a52de01d264d6514a50990',
+ './modules/OptimisticLock/language/en_us.lang.php' => 'da108687fe1ad5a2f517b4be760b4500',
+ './modules/OptimisticLock/Menu.php' => 'ab2d8a3388a4ad15ba2a8702d8167438',
+ './modules/OptimisticLock/LockResolve.php' => 'af27e2702d189f540f87112c3ec7f060',
+ './modules/OptimisticLock/Forms.php' => '1426ca53f6b7d0dfa8d2c12164ab814e',
+ './modules/Opportunities/views/view.edit.php' => '7d5f91f50318796a197ed5911ca89090',
+ './modules/Opportunities/views/view.detail.php' => '2031e46f2fe3f86bfed2cb000d8152e7',
+ './modules/Opportunities/vardefs.php' => '66b2b45cd7f71db459e6d0e533d4d540',
+ './modules/Opportunities/tpls/QuickCreate.tpl' => 'a97086f3b05fd812fa5aa13c8934d518',
+ './modules/Opportunities/metadata/subpanels/default.php' => '9055b5051763913602c1b0cfcec6a6a8',
+ './modules/Opportunities/metadata/subpanels/ForEmails.php' => 'a23e3862c9ed6a4eafd63c2f6bd6926b',
+ './modules/Opportunities/metadata/subpanels/ForAccounts.php' => '1c7dc76af48c49c5d32bf619f9fe58c3',
+ './modules/Opportunities/metadata/subpaneldefs.php' => '2e61a5d755c197597eef47005cbeefd2',
+ './modules/Opportunities/metadata/studio.php' => '2ecdfdc439cb4586bbe539e63d037c91',
+ './modules/Opportunities/metadata/searchdefs.php' => 'a2cf2aa25373055ba1557fb1ef259f7a',
+ './modules/Opportunities/metadata/quickcreatedefs.php' => 'ce950482bcd273362f97c4da063ac262',
+ './modules/Opportunities/metadata/popupdefs.php' => 'b33714d9154fb5f4ffaba5c01fc14021',
+ './modules/Opportunities/metadata/metafiles.php' => '8c2f3857e7a218748033ea5ac9c72438',
+ './modules/Opportunities/metadata/listviewdefs.php' => '488ff35629356b012435b17b50190d99',
+ './modules/Opportunities/metadata/editviewdefs.php' => '89552e6704b61aae1ac0c29ab856148e',
+ './modules/Opportunities/metadata/detailviewdefs.php' => '130c67be8848ca23ee84adcd7d578cdd',
+ './modules/Opportunities/metadata/additionalDetails.php' => '4e4a3f43d59864fa1d605ad1bd974c09',
+ './modules/Opportunities/metadata/acldefs.php' => '5268a3225576dff2be5ed567f7754ea3',
+ './modules/Opportunities/metadata/SearchFields.php' => '408a3bc249b78244ce465c7cdd8f6ea4',
+ './modules/Opportunities/language/en_us.lang.php' => 'e4795af2749d63783d2de150f6368d3f',
+ './modules/Opportunities/field_arrays.php' => 'fa73b1cbef1a90e6ff67dd27dac3dd94',
+ './modules/Opportunities/SugarFeeds/OppFeed.php' => '6de18f1cdf081e6ea21d337d0dd0588c',
+ './modules/Opportunities/SubPanelViewProjects.php' => 'd265850f1189b7af991f5d53f4a495d6',
+ './modules/Opportunities/SubPanelViewProjects.html' => 'a61c46eabae260242f80e4395c6271ba',
+ './modules/Opportunities/SubPanelView.php' => 'b526538005e43c951ad309ffaf8d87a0',
+ './modules/Opportunities/SubPanelView.html' => '6b51451724f37acdb37afc007775e52d',
+ './modules/Opportunities/SaveOverload.php' => '50296d5a9749d0cca36d0a2d7b851a67',
+ './modules/Opportunities/Save.php' => '7fbc793c50fecad076ac08d121a5d87d',
+ './modules/Opportunities/OpportunityFormBase.php' => '96d3099b41d15333f2c32a63ceb2f1de',
+ './modules/Opportunities/Opportunity.php' => '4d1a149fa8ce8cd5fc7ad799eaf529ca',
+ './modules/Opportunities/OpportunitiesQuickCreate.php' => '6019102062aa4d93ef001e1d06691ea8',
+ './modules/Opportunities/Menu.php' => 'c1213ce80b4cac1298505d3ef84b69d2',
+ './modules/Opportunities/ListViewTop.php' => 'e77a90af42ace6193feab7d3893a9631',
+ './modules/Opportunities/ListViewTop.html' => '352b5cf148dfd8143d61fd79191dab0d',
+ './modules/Opportunities/Dashlets/MyOpportunitiesDashlet/MyOpportunitiesDashlet.php' => 'f038dcbab37f2c7b3412a533328d299b',
+ './modules/Opportunities/Dashlets/MyOpportunitiesDashlet/MyOpportunitiesDashlet.meta.php' => '30c2ef6dc2728b55feefa6059c15166b',
+ './modules/Opportunities/Dashlets/MyOpportunitiesDashlet/MyOpportunitiesDashlet.data.php' => '7ca8885c9c7d621bf6a362b6333bf8d7',
+ './modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashletOptions.tpl' => 'af2e87f986e73938a4df665c3baa219f',
+ './modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashletConfigure.tpl' => '85a1f82b9edf6d5c867fdbb49b645cda',
+ './modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashlet.tpl' => 'b9cddf9611a364e83fffe6e70e25a466',
+ './modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashlet.php' => '9ae01144105194e42072e3d378ef9fe7',
+ './modules/Opportunities/Dashlets/MyClosedOpportunitiesDashlet/MyClosedOpportunitiesDashlet.meta.php' => 'cd8466622b1201d34fcbb7d13e3084f2',
+ './modules/Notes/Dashlets/MyNotesDashlet/MyNotesDashlet.php' => 'f9ab3897fc09f21ea1ecb3f953dad090',
+ './modules/Notes/Dashlets/MyNotesDashlet/MyNotesDashlet.meta.php' => '0184797e2c51448e2a176ff7c0d1cdaf',
+ './modules/Notes/Dashlets/MyNotesDashlet/MyNotesDashlet.data.php' => 'ab49b04a87d38c96bf763dccff5fda0f',
+ './modules/Notes/vardefs.php' => 'da3a3314abfc2360532518ce50e8c685',
+ './modules/Notes/tpls/QuickCreate.tpl' => '0a9fb5e76a39a8a830f38e98c95b20db',
+ './modules/Notes/tpls/EditViewHeader.tpl' => '6d17efa511b050306ad8917250a55612',
+ './modules/Notes/metadata/subpanels/ForMeetings.php' => '96a261d7cb62b23e280e0ed951838cc1',
+ './modules/Notes/metadata/subpanels/ForCalls.php' => '96a261d7cb62b23e280e0ed951838cc1',
+ './modules/Notes/metadata/subpanels/default.php' => '4be031ba9baa81f049e0a913e74699cd',
+ './modules/Notes/metadata/subpanels/ForHistory.php' => '6764b710d1f251c025ce769e23ae9362',
+ './modules/Notes/metadata/studio.php' => '1f44d8404cbd0338366d6c8fa46736de',
+ './modules/Notes/metadata/searchdefs.php' => 'e8bd7141325af729998e8c28628987b0',
+ './modules/Notes/metadata/quickcreatedefs.php' => 'c00836e71bd882f126294c06a259bcb8',
+ './modules/Notes/metadata/listviewdefs.php' => 'c41f85e58d565bf47a82d6c81eb31c4a',
+ './modules/Notes/metadata/editviewdefs.php' => 'a56c4ca60082b5bf7e6e5e2033c8e77a',
+ './modules/Notes/metadata/detailviewdefs.php' => '826afd0a9cab3b34cef8bda901108828',
+ './modules/Notes/metadata/additionalDetails.php' => 'dee7ede2f0db07e060ef69e7d193b862',
+ './modules/Notes/metadata/SearchFields.php' => 'b1a7b3ea5cbfbe90e3f675278a64d52c',
+ './modules/Notes/language/en_us.lang.php' => 'a943d66117c8118f2603227b6066c392',
+ './modules/Notes/field_arrays.php' => '400e52fbc9b6eadf5db444f142fa6fa7',
+ './modules/Notes/controller.php' => '5f0c26c4e8eb71dcab090cce6b5730f0',
+ './modules/Notes/SubPanelView.php' => 'f099efee6491848eda33f1bb61a927b2',
+ './modules/Notes/SubPanelView.html' => 'f3e126cc96a15934186b9c069d6feb2f',
+ './modules/Notes/NotesQuickCreate.php' => 'b83915d88ed4d6317ffd84edc69e025a',
+ './modules/Notes/NoteSoap.php' => 'a4f0c48060767dcd129e7c53cfc0bc5c',
+ './modules/Notes/Note.php' => 'b87b2da97c012ae6e06df8e354432e0c',
+ './modules/Notes/Menu.php' => '80e4a5be7e5f7a316f11f43e646e7dab',
+ './modules/MySettings/language/en_us.lang.php' => '7ab73e2c534ab7d66597730282c87ae3',
+ './modules/MySettings/TabController.php' => '5bccbc225eae09c59583f438f1525a1b',
+ './modules/MySettings/StoreQuery.php' => '352d80fb2aabd3075a5411d20dd9a4a6',
+ './modules/MySettings/LoadTabSubpanels.php' => 'a255e18695ce5a628f77ea5ee52cf87e',
+ './modules/ModuleBuilder/views/view.wizard.php' => 'c78cb93efd113dde2af478dfc573e804',
+ './modules/ModuleBuilder/views/view.tree.php' => '0b0b0db7b37c683bc7849394162c3222',
+ './modules/ModuleBuilder/views/view.searchview.php' => '4db474573b87f1c477d1a4fe27957938',
+ './modules/ModuleBuilder/views/view.resetmodule.php' => '133a265b7a93a0ba424bef0e518451bf',
+ './modules/ModuleBuilder/views/view.relationships.php' => 'd66fd2c1ef2b4cca10372f00718bf5d6',
+ './modules/ModuleBuilder/views/view.relationship.php' => '197a5b2f70e75fb4eecb70845d8f2c6d',
+ './modules/ModuleBuilder/views/view.property.php' => '1b93903fc16f80366722ea4e866e6556',
+ './modules/ModuleBuilder/views/view.popupview.php' => '226f20d1a309ada7dd37e7d33673d144',
+ './modules/ModuleBuilder/views/view.package.php' => '87f70506bf8828439178f39d894caf91',
+ './modules/ModuleBuilder/views/view.modulelabels.php' => '9dd48dfb5ba54814317ab9caa59a90ce',
+ './modules/ModuleBuilder/views/view.modulefields.php' => '552a0daeba8fbffc9ec8de6ef4adc687',
+ './modules/ModuleBuilder/views/view.modulefield.php' => '2da87211a7afadb1fd2a25d7ab84e423',
+ './modules/ModuleBuilder/views/view.module.php' => '5999056216764952a42fc53d30186e57',
+ './modules/ModuleBuilder/views/view.main.php' => '0f8f0d634d1370ca67726859d2dc9ca6',
+ './modules/ModuleBuilder/views/view.listview.php' => 'c2013e0c055b6ad7019a46d201e82c25',
+ './modules/ModuleBuilder/views/view.layoutview.php' => 'de45ac3a3d6bc24e53d664ae53877b9c',
+ './modules/ModuleBuilder/views/view.labels.php' => 'eb8d62e1dcc22b1aa1345ec4b2e39c23',
+ './modules/ModuleBuilder/views/view.home.php' => '52a4628291c14dad6755a3ad43895e82',
+ './modules/ModuleBuilder/views/view.history.php' => '9aa48373bfbe8324b69facbf2c89aff7',
+ './modules/ModuleBuilder/views/view.exportcustomizations.php' => '24a0779e56fdfc38baf0f7cf642c5d5e',
+ './modules/ModuleBuilder/views/view.dropdowns.php' => 'b702280afdb3e55fe695b1959d8e2c85',
+ './modules/ModuleBuilder/views/view.dropdown.php' => '0281c3b567a564c2a561af85c3fc9168',
+ './modules/ModuleBuilder/views/view.displaydeployresult.php' => '547cd6a7cbf757cba95ac2d899665cd5',
+ './modules/ModuleBuilder/views/view.displaydeploy.php' => '3ae8aa51e9e8c51004656380fe505429',
+ './modules/ModuleBuilder/views/view.deletepackage.php' => '48cac1895df4eb9517b3c10d94a32fac',
+ './modules/ModuleBuilder/views/view.deletemodule.php' => '7a2dc62d2d18191a6d0119e31037be02',
+ './modules/ModuleBuilder/views/view.dashlet.php' => '810c4c14c78e698e583dd95c7090eab0',
+ './modules/ModuleBuilder/tpls/wizard.tpl' => 'a16245f3694aaface1daf7cea52d235f',
+ './modules/ModuleBuilder/tpls/tabBG.png' => '8e2561b0bba66f327d602e6c5f06aa08',
+ './modules/ModuleBuilder/tpls/studioRelationships.tpl' => '63559e6743033f514eed689f5d458afa',
+ './modules/ModuleBuilder/tpls/studioRelationship.tpl' => '8d7177bfcec39edddafae33573525c76',
+ './modules/ModuleBuilder/tpls/resetModule.tpl' => '237bb16f4bfcd274404bfd261cc86d9c',
+ './modules/ModuleBuilder/tpls/main.tpl' => '0a16177d0083d8db2c2821333164ee60',
+ './modules/ModuleBuilder/tpls/listView.tpl' => '232f172456a901a19f8ddf43510bc101',
+ './modules/ModuleBuilder/tpls/layoutView.tpl' => 'c12c505cde12cc8aec12c98f3a5b6eff',
+ './modules/ModuleBuilder/tpls/labels.tpl' => 'a7b10e70775c426d60830ea5e28ca413',
+ './modules/ModuleBuilder/tpls/index.tpl' => '9d267e68e0a713836dab11f5af3eb128',
+ './modules/ModuleBuilder/tpls/includes.tpl' => '957fb37ef63708de02f5ff7495adb210',
+ './modules/ModuleBuilder/tpls/history.tpl' => 'e75aad72381176b2b21a711956bcc025',
+ './modules/ModuleBuilder/tpls/exportcustomizations.tpl' => '3f3a4edb5afbf1a87407de76ffd73b99',
+ './modules/ModuleBuilder/tpls/editProperty.tpl' => '3e857e332bc62ea5849d60e262e57acc',
+ './modules/ModuleBuilder/tpls/assistantJavascript.tpl' => '698546e9a25c7d0fdd69010b61ce5c0e',
+ './modules/ModuleBuilder/tpls/Preview/listView.tpl' => 'fc840cefbd0db68cad7dc06c3438bfbf',
+ './modules/ModuleBuilder/tpls/Preview/layoutView.tpl' => '656d3caf168fbccc5e5021e2916c72ae',
+ './modules/ModuleBuilder/tpls/MBPackage/package.tpl' => '2452daa01c1eca76c302600e0d08c4ba',
+ './modules/ModuleBuilder/tpls/MBPackage/deploy.tpl' => 'f7a7d0f2489b9caaef8f9cdfb25b4341',
+ './modules/ModuleBuilder/tpls/MBPackage/appLanguage.tpl' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/ModuleBuilder/tpls/MBModule/vardef.tpl' => '760c0eb16b8c95e971cfd0c7f01fc721',
+ './modules/ModuleBuilder/tpls/MBModule/module.tpl' => 'c211e3fe7226fa5e8e9db3ef854b536f',
+ './modules/ModuleBuilder/tpls/MBModule/main.tpl' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/ModuleBuilder/tpls/MBModule/language.tpl' => 'f27ee7b7829bcb7f1306eb2153311f52',
+ './modules/ModuleBuilder/tpls/MBModule/form.tpl' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/ModuleBuilder/tpls/MBModule/fields.tpl' => '1bf6aabbf8867f70b65df84518225b2f',
+ './modules/ModuleBuilder/tpls/MBModule/field.tpl' => '02bd0401451644635445f344cdb3c6ba',
+ './modules/ModuleBuilder/tpls/MBModule/dropdowns.tpl' => 'fb5fef35a8894f518fe2f968c475977b',
+ './modules/ModuleBuilder/tpls/MBModule/dropdown.tpl' => '62a3119527321d55ba7dbc3aa63dae9c',
+ './modules/ModuleBuilder/tpls/MBModule/dropdown.css' => 'd80cad459209446b7e37eb50cc587402',
+ './modules/ModuleBuilder/tpls/MBModule/Studio.tpl' => 'b22f8728a3a2587c2fb320b41f98e7f7',
+ './modules/ModuleBuilder/tpls/MBModule/Menu.tpl' => '5c3fb02c1df609001b6b1befbf279fa7',
+ './modules/ModuleBuilder/tpls/MBModule/DeveloperClass.tpl' => 'f88daf535fbee9bcace71677a659e750',
+ './modules/ModuleBuilder/tpls/MBModule/Class.tpl' => '6b2e3d2e8cf7d24a444db0bdf833ee62',
+ './modules/ModuleBuilder/tpls/MB.css' => '5b3eb2ed2f3f390d28eea73c8cd38078',
+ './modules/ModuleBuilder/tpls/ListEditor.css' => 'f602eca9103560b387d46714b556e9d4',
+ './modules/ModuleBuilder/tpls/LayoutEditor.css' => 'e7f0eba7b6239f17056c9cf08b47a442',
+ './modules/ModuleBuilder/parsers/views/UndeployedSubpanelImplementation.php' => '8bf52486443c355c8b79e5fd1dc9cbbc',
+ './modules/ModuleBuilder/parsers/views/UndeployedMetaDataImplementation.php' => '051fd6d8a11da5401ae81beaf4e113e5',
+ './modules/ModuleBuilder/parsers/views/SubpanelMetaDataParser.php' => '542f456cb1cc63ec56e19ae90fe30fcb',
+ './modules/ModuleBuilder/parsers/views/SearchViewMetaDataParser.php' => '6d82587411329201dc37249f8528f2ab',
+ './modules/ModuleBuilder/parsers/views/PopupMetaDataParser.php' => 'b14ee5d20098eae316c670beccc64d59',
+ './modules/ModuleBuilder/parsers/views/MetaDataParserInterface.php' => '9d05e19877d06257eaaa968336df70b2',
+ './modules/ModuleBuilder/parsers/views/MetaDataImplementationInterface.php' => 'b162f891343be882c5592f2739565698',
+ './modules/ModuleBuilder/parsers/views/ListLayoutMetaDataParser.php' => '6a6a48db17770889a0196bdc9ab3401f',
+ './modules/ModuleBuilder/parsers/views/HistoryInterface.php' => 'eaccd7749cff5a9691088dce27bca75b',
+ './modules/ModuleBuilder/parsers/views/History.php' => 'c5165637f19abda0bdc5d643c479a6a5',
+ './modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php' => '0e4184f03a851dcbb669dbbcbcb32a49',
+ './modules/ModuleBuilder/parsers/views/DeployedSubpanelImplementation.php' => '2c71bd7109457cb13c47e58a62c93272',
+ './modules/ModuleBuilder/parsers/views/DeployedMetaDataImplementation.php' => 'bf6dd668cd14bf4e144951464af6a866',
+ './modules/ModuleBuilder/parsers/views/DashletMetaDataParser.php' => '3b4e0e01a297836dcd1082a5ba8c32ea',
+ './modules/ModuleBuilder/parsers/views/AbstractMetaDataParser.php' => '1676f510869784d571936d48bba17a58',
+ './modules/ModuleBuilder/parsers/views/AbstractMetaDataImplementation.php' => '1cec425320c098a6cf3e280695ec7597',
+ './modules/ModuleBuilder/parsers/relationships/UndeployedRelationships.php' => '198956b7f5e0b2503f887b34ca47c520',
+ './modules/ModuleBuilder/parsers/relationships/RelationshipsInterface.php' => 'a3a82ab6f159ecffbe915f6ee51306cb',
+ './modules/ModuleBuilder/parsers/relationships/RelationshipFactory.php' => '039abce7908918481d134f8fb2bb4585',
+ './modules/ModuleBuilder/parsers/relationships/OneToOneRelationship.php' => '8626df0f0f5690a07eb5815b9bb765e7',
+ './modules/ModuleBuilder/parsers/relationships/OneToManyRelationship.php' => '76396e8d76dda04e4b907df7903a6a95',
+ './modules/ModuleBuilder/parsers/relationships/ManyToOneRelationship.php' => '41d2a9d5654fd04996e24e34d237e4b6',
+ './modules/ModuleBuilder/parsers/relationships/ManyToManyRelationship.php' => 'c585937c42e7f7d3922f5a79d98b3e88',
+ './modules/ModuleBuilder/parsers/relationships/DeployedRelationships.php' => '0541d0eefaba34110ca17fa25d2f5f37',
+ './modules/ModuleBuilder/parsers/relationships/ActivitiesRelationship.php' => '7fbd2c704593caf04aa9931c8cfe51b9',
+ './modules/ModuleBuilder/parsers/relationships/AbstractRelationships.php' => '22af5ffa09c436902cb68c41735cd999',
+ './modules/ModuleBuilder/parsers/relationships/AbstractRelationship.php' => '4c2f2157798042c7d48ff8f92c59c22d',
+ './modules/ModuleBuilder/parsers/parser.modifysubpanel.php' => 'fb93686dcd29da10fccd9cca776665f5',
+ './modules/ModuleBuilder/parsers/parser.modifylistview.php' => '12e5f85436196e5716253850bff129d9',
+ './modules/ModuleBuilder/parsers/parser.modifylayoutview.php' => '491f9ca2bd0dc9f0f8e671b4476b788e',
+ './modules/ModuleBuilder/parsers/parser.label.php' => 'a964a5c343d8cb136cd8832ec5bc5e86',
+ './modules/ModuleBuilder/parsers/parser.dropdown.php' => '0ef3cd0b11a27b01aa2c0f157f16b972',
+ './modules/ModuleBuilder/parsers/constants.php' => '878317c7a56c70704155d04d03af5990',
+ './modules/ModuleBuilder/parsers/StandardField.php' => 'a3c5f7fe7ff730579b881375e8e8a4de',
+ './modules/ModuleBuilder/parsers/ParserFactory.php' => 'f89c6c2f309d0e0f126e00ed79b58cd2',
+ './modules/ModuleBuilder/parsers/ModuleBuilderParser.php' => 'aaa840032d534a6f9feb5d0fe2f472ad',
+ './modules/ModuleBuilder/language/en_us.lang.php' => '053510ff32cbe2ec9fa439b938e304f4',
+ './modules/ModuleBuilder/javascript/wizardTemplate.js' => '9060030ef8eec5650ec7d47c2559aa3b',
+ './modules/ModuleBuilder/javascript/studiotabgroups.js' => '0f917259b698ddac0270c8a6220ffad4',
+ './modules/ModuleBuilder/javascript/studio2RowDD.js' => 'ee99ce0578e0505cb0a7fe4c2597141d',
+ './modules/ModuleBuilder/javascript/studio2PanelDD.js' => '86360bf67c978fe29aaa786a046d625f',
+ './modules/ModuleBuilder/javascript/studio2ListDD.js' => '6711ade762b75e9fa47c6d7cf1796c3b',
+ './modules/ModuleBuilder/javascript/studio2FieldDD.js' => 'e779f376e6e70d5815404581effc3cfc',
+ './modules/ModuleBuilder/javascript/studio2.js' => '9f36fc7bf59b444a8e36409efe1299b4',
+ './modules/ModuleBuilder/javascript/SimpleList.js' => '27e1aa030d4084001416b400b8fc0dae',
+ './modules/ModuleBuilder/javascript/ModuleBuilder.js' => '0a94445bf3c4c2a4146913dfbb35c8ce',
+ './modules/ModuleBuilder/javascript/JSTransaction.js' => '33c082aaee31dd249e66c6a929e66dea',
+ './modules/ModuleBuilder/controller.php' => '06d73ecafdf17c991f34ad8945a786ac',
+ './modules/ModuleBuilder/action_view_map.php' => 'd1b1c375b7ebecd14628498dcad8dbe6',
+ './modules/ModuleBuilder/Module/StudioTree.php' => '7aab267a0af104084a1b23c4ecab97e0',
+ './modules/ModuleBuilder/Module/StudioModuleFactory.php' => '864942db27c8f1414dd0da5e63ee4a82',
+ './modules/ModuleBuilder/Module/StudioModule.php' => 'b9e23500a786f49783889a89b161eedb',
+ './modules/ModuleBuilder/Module/StudioBrowser.php' => 'eef1b0c4be2ae9351cf1c7656ac28c9e',
+ './modules/ModuleBuilder/Module/MainTree.php' => '6152c924303fe20769cdbc48b2185913',
+ './modules/ModuleBuilder/Module/DropDownTree.php' => '6d733cb3e2975569079ff8b059087392',
+ './modules/ModuleBuilder/Module/DropDownBrowser.php' => 'b41d9d36bc5f500447f1db68bd62ce8a',
+ './modules/ModuleBuilder/MB/header.php' => 'c8492063d04ce650cf50ce1cdb0e0be9',
+ './modules/ModuleBuilder/MB/ModuleBuilder.php' => '7cb647f9f6d7ecc2271f11fff2afd166',
+ './modules/ModuleBuilder/MB/MBVardefs.php' => 'f4170e6c5a68c8e315863d1693fbc0ba',
+ './modules/ModuleBuilder/MB/MBRelationship.php' => '798e37becc33cfb9eb779b0eebf620c8',
+ './modules/ModuleBuilder/MB/MBPackageTree.php' => '16ec5240bb853fa7595523b1b4f9f759',
+ './modules/ModuleBuilder/MB/MBPackage.php' => 'e4cd835c9c6e5f03ba7cbd73ce225467',
+ './modules/ModuleBuilder/MB/MBModule.php' => '8866b13863363e31859883301835c378',
+ './modules/ModuleBuilder/MB/MBLanguage.php' => '3d19c7397e80b0a6f9ee3d5b37650966',
+ './modules/ModuleBuilder/MB/MBField.php' => '7d1e217fe809e63a3b4e6194ab0205dc',
+ './modules/ModuleBuilder/MB/AjaxCompose.php' => '5482b26bfd548f815c4fdac0668f5075',
+ './modules/ModuleBuilder/Forms.php' => 'e773d1cb9319008bb56c2522ab5021c4',
+ './modules/MergeRecords/Merge.js' => '87d60172b31ff1a67ec5bb451db58a66',
+ './modules/MergeRecords/vardefs.php' => '3ce697d50bfc595a8bb0241a7ca7455e',
+ './modules/MergeRecords/language/en_us.lang.php' => 'f00c0932118f3adb4e78e2dc2411e6b8',
+ './modules/MergeRecords/index.php' => '3f1c68981f5902a648a17018e24ca43a',
+ './modules/MergeRecords/controller.php' => '0865944914ee968c2bc1892da8940b31',
+ './modules/MergeRecords/Step3.php' => '729eee15723be80eb1ff81ca80201d2a',
+ './modules/MergeRecords/Step3.html' => '5fde8a3ec87d93058ec6045c2c012f9a',
+ './modules/MergeRecords/Step2.php' => 'be0020ae7d92d5e0eeeb6478f34058b0',
+ './modules/MergeRecords/Step2.html' => 'ccf7c2669435aa24c38921880ad863e9',
+ './modules/MergeRecords/Step1.php' => 'a0c5f45d20afaabb59a7d54eec167c9f',
+ './modules/MergeRecords/Step1.html' => '0141495f28378923446c97f24e17029f',
+ './modules/MergeRecords/SearchForm.html' => '11f0b679a10c34338e9758ede1e86e93',
+ './modules/MergeRecords/SaveMerge.php' => '9b196e0c0d3a1df0fc1748881bc72de8',
+ './modules/MergeRecords/MergeRecord.php' => 'a1e9378d97dd8f76b6314e5973381791',
+ './modules/MergeRecords/MergeField.html' => 'c00b7430a29310be7eccf3f9791634a0',
+ './modules/MergeRecords/Menu.php' => 'ad435ab227b7f339d340692eb81630d7',
+ './modules/Meetings/jsclass_scheduler.js' => 'd2cd2f86a5c7792d7dd5976c7b410477',
+ './modules/Meetings/action_view_map.php' => '9353afb9cdccf0e50f984924645ea51e',
+ './modules/Meetings/JoinExternalMeeting.php' => 'd72c9518022c7b61fc939e27c9812437',
+ './modules/Meetings/views/view.listbytype.php' => '3942bad99c026b8e31166be85fedd59a',
+ './modules/Meetings/views/view.edit.php' => 'dc124e1a3d940c169ef609916851f634',
+ './modules/Meetings/vardefs.php' => 'f67ecb02f108bead3a03713fc5c12258',
+ './modules/Meetings/tpls/extMeetingNotInvited.tpl' => 'a16fac6c2878a546b25b7b8f96db6fd7',
+ './modules/Meetings/tpls/extMeetingNoStart.tpl' => '8f26c8850c6c4b011169f7703a301037',
+ './modules/Meetings/tpls/header.tpl' => '66489a8b22323aff40e2d825ccb17a9b',
+ './modules/Meetings/tpls/footer.tpl' => 'c21ee3bf6df9db67b7ca95e0103ed207',
+ './modules/Meetings/tpls/QuickCreate.tpl' => '3059bfc6a2c0b602aec17947eed77342',
+ './modules/Meetings/metadata/subpanels/default.php' => '35394792be32e74f512ee190915aba45',
+ './modules/Meetings/metadata/subpanels/ForHistory.php' => '7f8e8880c8454608aa5c245221d1e13b',
+ './modules/Meetings/metadata/subpanels/ForActivities.php' => '956443c7fefc8526ea83d54cd6952309',
+ './modules/Meetings/metadata/subpaneldefs.php' => 'e50d977f6a64ce9f6846b4f3dcd87668',
+ './modules/Meetings/metadata/studio.php' => '1981fa5a4500fc8baa39805f20774581',
+ './modules/Meetings/metadata/searchdefs.php' => '88c16d8f11fd6069d31377b27661dbfa',
+ './modules/Meetings/metadata/quickcreatedefs.php' => '114fac63f776dd420fde02d967e3b67f',
+ './modules/Meetings/metadata/listviewdefs.php' => 'ad9666beb71a77b362266866b0d9a7ac',
+ './modules/Meetings/metadata/editviewdefs.php' => '9322e10ac0c22822659c7cb362b15015',
+ './modules/Meetings/metadata/detailviewdefs.php' => '3a24ccd7bcb969cf3a56851cd871353b',
+ './modules/Meetings/metadata/additionalDetails.php' => '17521ec60172b283b5f70d0530554f19',
+ './modules/Meetings/metadata/SearchFields.php' => 'ac6b61f3370200cbd09d80308774f41f',
+ './modules/Meetings/language/en_us.lang.php' => '72aa9397c10cc6dc1739c7645ba4d87f',
+ './modules/Meetings/field_arrays.php' => '841aa6a94d88a3ded39d98a1fca9ef1f',
+ './modules/Meetings/SubPanelViewInvitees.php' => '1b7e228b1f978364ef44d6c685ea8a43',
+ './modules/Meetings/SubPanelViewInvitees.html' => 'b326b8407ec99cf7bf729b4abb1ebdbd',
+ './modules/Meetings/Save.php' => '78a9978019f2574a6cb3e245d50c2271',
+ './modules/Meetings/Menu.php' => '1228f556ef6077e055d6a3c3c54961b2',
+ './modules/Meetings/MeetingsQuickCreate.php' => 'fe1af8fffc9869640fbced53801515ab',
+ './modules/Meetings/MeetingFormBase.php' => '0b976469ad53ec8902864c9febfb089d',
+ './modules/Meetings/Meeting.php' => '84eef79555d3b39b393efedcdccbaee3',
+ './modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.php' => '2a3fa5ad5e35ee01c5cb9517dbdd4924',
+ './modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.meta.php' => '17de05e1c0f4594e7e6fae86634c1871',
+ './modules/Meetings/Dashlets/MyMeetingsDashlet/MyMeetingsDashlet.data.php' => 'bf07be2a58971f99255feb513e3c4a68',
+ './modules/MailMerge/modules_array.php' => 'd7429db3ce45e1f3892bae3c16f7c648',
+ './modules/MailMerge/language/en_us.lang.php' => 'b4f2b23f8c783c30d9bd978504f71244',
+ './modules/MailMerge/index.php' => '83016d79c0d5339fb29cbf810f2db535',
+ './modules/MailMerge/get_doc.php' => 'd244583dae7a38dcdf808f6e162d382e',
+ './modules/MailMerge/Step5.php' => 'c5196b6ed569e3aad2ddb19e988d46c3',
+ './modules/MailMerge/Step5.html' => '26db7d29f0b2e0cff3916ea640192a84',
+ './modules/MailMerge/Step4.php' => '29241896250224de06c596cb8f8ac035',
+ './modules/MailMerge/Step4.html' => '56977de1515277840c4e4ad92c351bdb',
+ './modules/MailMerge/Step3.php' => '401bc7d3564b5e39fabdf35992b81972',
+ './modules/MailMerge/Step3.html' => 'eb56b14c55aeda67fa0fcbb20389972e',
+ './modules/MailMerge/Step2.php' => 'f9aefe6dc3ea6918799f6b702e5ef583',
+ './modules/MailMerge/Step2.html' => '8b7a503eec1252b74963375cd95f84db',
+ './modules/MailMerge/Step1.php' => '08d7c525f2d4e7c884370e7a9c537907',
+ './modules/MailMerge/Step1.html' => 'f931d9d6a0068e27fbfe2fd7eb1d6c1a',
+ './modules/MailMerge/Save.php' => '46e066bc591a9bab82b3045eeb54c01a',
+ './modules/MailMerge/Merge.php' => '1fb9ec1f8b2b00da9902e3285c81552a',
+ './modules/MailMerge/Merge.html' => '154631ef3dea42357140c9d5c2fabe92',
+ './modules/MailMerge/Menu.php' => 'cfc24dcc3be57f9d81154ab4a8dd5760',
+ './modules/MailMerge/MailMerge.php' => '8def99841e9123eb70b513e5d4f39f90',
+ './modules/MailMerge/EditView.php' => '8af659df9972420db817b302cdf6d2e7',
+ './modules/MailMerge/DetailView.php' => '75ff223c12372a4313b3de488108fef1',
+ './modules/Leads/Lead.js' => '8cddbfd55de6fb05ae7feaf42a68c700',
+ './modules/Leads/views/view.list.php' => '79cee6cbb0929820b27cacc3ae3cea68',
+ './modules/Leads/views/view.convertlead.php' => '1ac0edb8f44834e9235bd5229b556e03',
+ './modules/Leads/vardefs.php' => 'e2410b82291f154d12877b5e4e61f847',
+ './modules/Leads/tpls/QuickCreate.tpl' => 'a76c0c529eadb1bef44454e7c7f5ebd9',
+ './modules/Leads/tpls/DetailViewHeader.tpl' => 'f075c3a6effa72926e1a0f8a5cd5e6a6',
+ './modules/Leads/tpls/ConvertLeadHeader.tpl' => '6ca934f6a0fb7829c2df9efc1c752108',
+ './modules/Leads/tpls/ConvertLeadFooter.tpl' => 'a9096026969ab32e7904ca5401abd0c6',
+ './modules/Leads/tpls/ConvertLead.tpl' => '462df9f18bb2dbe093887ec471679707',
+ './modules/Leads/metadata/subpanels/default.php' => 'a9323ca8f714372b1cd48ebb97a34edd',
+ './modules/Leads/metadata/subpanels/ForMeetings.php' => '6cce6e61c8f9f460c98d781476821243',
+ './modules/Leads/metadata/subpanels/ForEmails.php' => '10b4f0e2731083e598749c4ac3915f50',
+ './modules/Leads/metadata/subpanels/ForCalls.php' => 'b3c3c02da24f25cce0a7cf478de67809',
+ './modules/Leads/metadata/subpaneldefs.php' => 'e8771108264fcc6a9c01794505f4b003',
+ './modules/Leads/metadata/studio.php' => '1d2702e596cf568c7705f857b207b481',
+ './modules/Leads/metadata/searchdefs.php' => '7839892852980e0f4f1196fd29f0b95c',
+ './modules/Leads/metadata/quickcreatedefs.php' => '211f03435d7664712fc459ed0d396def',
+ './modules/Leads/metadata/popupdefs.php' => '8bd61ecd2395b404135d6a2444d04566',
+ './modules/Leads/metadata/listviewdefs.php' => 'f3d23bdd5032749f94537349ff4c94f3',
+ './modules/Leads/metadata/editviewdefs.php' => 'ac0c2ae2f4302dff9957ee83606a4e94',
+ './modules/Leads/metadata/detailviewdefs.php' => '8c2dd819d9e99e5546f973c983605670',
+ './modules/Leads/metadata/convertdefs.php' => '5b9422be772856ad372ff43cf37d1cab',
+ './modules/Leads/metadata/additionalDetails.php' => '7a0e37d6e021a4c3ae185f17f9bf56c0',
+ './modules/Leads/metadata/SearchFields.php' => '1105a52bed12ef1761e91ad890946140',
+ './modules/Leads/language/en_us.lang.php' => '034728e804b4cd847563a7b688f78fa0',
+ './modules/Leads/field_arrays.php' => '43f3d073ac584e5347be1edcd18e269c',
+ './modules/Leads/controller.php' => '23f4cec6b391edf5ffa887e12120a7ad',
+ './modules/Leads/action_view_map.php' => '667e4d332ea94abca24d8ee7f2feeb45',
+ './modules/Leads/SugarFeeds/LeadFeed.php' => '9f45be730bf02e1caf63e6dd7d198bff',
+ './modules/Leads/SubPanelView.php' => '94f76a3cc9b66e946a6cb2eeb90b22cd',
+ './modules/Leads/SubPanelView.html' => 'b90b3d11c1510f8fffc44e274e1701b0',
+ './modules/Leads/Save.php' => '2d1e5faa00ad9ee1c6635e9a91de7463',
+ './modules/Leads/Popup_picker.html' => 'f2317124eeaa249b64a72e4d9ed939a5',
+ './modules/Leads/MyLeads.php' => '5a7f8947cfcc67c21fe07fed4bad4d0a',
+ './modules/Leads/MyLeads.html' => '221c652a4a6a54c53c80d95a4f8b0dfa',
+ './modules/Leads/Menu.php' => '9ff4db24b9e03909f7de8f0d3d89282f',
+ './modules/Leads/LeadsQuickCreate.php' => '07ed1970eab3cbe82f3378aa43cfa54a',
+ './modules/Leads/LeadFormBase.php' => 'd4ec745504b5dd5eb0d9cbff540eb38b',
+ './modules/Leads/Lead.php' => '761737b8018b56465224b8387b7248d3',
+ './modules/Leads/Dashlets/MyLeadsDashlet/MyLeadsDashlet.php' => 'd7e1e39172ab361dbfe553bad41145b5',
+ './modules/Leads/Dashlets/MyLeadsDashlet/MyLeadsDashlet.meta.php' => '854c043c1061766f86fad727cc3f8b82',
+ './modules/Leads/Dashlets/MyLeadsDashlet/MyLeadsDashlet.data.php' => 'd9d36456f7df31eec9941743f4a5b740',
+ './modules/Leads/Capture.php' => '243892d927a146c5873c985f7d675105',
+ './modules/LabelEditor/language/en_us.lang.php' => '0dd99b6b8d7a0fddb04ce49bc2d2e01a',
+ './modules/LabelEditor/Save.php' => 'b33e2d79bf8f5a009c59beec2d43c0a4',
+ './modules/LabelEditor/Menu.php' => 'afc3a627ab78a69c58b586095e79864a',
+ './modules/LabelEditor/LabelList.php' => 'f23746d552d021ad5a19d2fb3d226f3d',
+ './modules/LabelEditor/Forms.php' => 'fbafcea6235be8a109124d1870e5c76d',
+ './modules/LabelEditor/EditView.php' => '2eeb9a92ec8f14e4ecb1587aa59c3ff5',
+ './modules/LabelEditor/EditView.html' => 'd26998cd92945e931f4207509bd8444f',
+ './modules/InboundEmail/InboundEmail.js' => '40dcced2eee76088930804d810e19eb4',
+ './modules/InboundEmail/vardefs.php' => 'b502ad0ed0fbd0756c8dbfea8e6f0c3b',
+ './modules/InboundEmail/language/en_us.lang.php' => '6efdc5c47a673ba196569159bb1da72f',
+ './modules/InboundEmail/index.php' => '8b465dd0e7055136f21eaddba390a92f',
+ './modules/InboundEmail/field_arrays.php' => 'a4337fd64c1ff5c5a78d6c3d1dda4960',
+ './modules/InboundEmail/View.html' => '58f26da62e64f0630806e6dde187a357',
+ './modules/InboundEmail/ShowInboundFoldersList.php' => '45d7e8bfbff96456cb27a9f1ef3eea3c',
+ './modules/InboundEmail/SaveGroupFolder.php' => 'b25cf3f6fae0a6220773c43966dfccdc',
+ './modules/InboundEmail/Save.php' => 'd1fa0cd35ffbb8b3e17687ee2225dde9',
+ './modules/InboundEmail/Popup.php' => 'dae5482f102fb7cbbcedd46b2cf6a550',
+ './modules/InboundEmail/Menu.php' => '79c0619ae84aa23303de599889406019',
+ './modules/InboundEmail/ListView.php' => '693d6cb94dede156a0ddf15b031ff031',
+ './modules/InboundEmail/ListView.html' => 'd198339eed60a1f901c0082646ac3707',
+ './modules/InboundEmail/InboundEmailTest.php' => '18e54a84dd10ebbdb875c4a0c2887bc9',
+ './modules/InboundEmail/InboundEmail.php' => '2f8914619fa8d6e4f1208dffd2f72be2',
+ './modules/InboundEmail/EditView.php' => '97e92df283f59d8beeafabe686c65a3e',
+ './modules/InboundEmail/EditView.html' => 'ae48de7b568c54f7891f5751651059d6',
+ './modules/InboundEmail/EditGroupFolder.php' => '52d841e00eeb5d43c736de0adbc5293f',
+ './modules/InboundEmail/DetailView.php' => '90c04ee9076496043b423a96ae44d155',
+ './modules/InboundEmail/DetailView.html' => 'c26f51c1f5b4d301c56e773de896758d',
+ './modules/InboundEmail/Delete.php' => '783bea5996b38be48d88bef0edf1189c',
+ './modules/Import/views/view.undo.php' => '57d944180c9f39b54a7a435fa2095154',
+ './modules/Import/views/view.step4.php' => 'b6022b98fe0d660c6bb842e8525097c6',
+ './modules/Import/views/view.step3.php' => 'afc16e641c2e311a1b1e6d800c14f3de',
+ './modules/Import/views/view.step2.php' => '942f30486caf79d52ae3e86af9c8f7a9',
+ './modules/Import/views/view.step1.php' => '9e56c783069b59b6513b0fccbc48fc40',
+ './modules/Import/views/view.last.php' => 'e3499c1f445cbae2ec6ec326ce8dafe8',
+ './modules/Import/views/view.error.php' => 'c19b5de391cdd9f4106ae85b9e0f4d51',
+ './modules/Import/vardefs.php' => 'f386f7b3e194e8c0b6175b60671b4f11',
+ './modules/Import/tpls/undo.tpl' => '07c0a5ae1d14facd9cb291f1d1c19f87',
+ './modules/Import/tpls/step3.tpl' => '821dd850badcf325d7f817ec164919df',
+ './modules/Import/tpls/step2.tpl' => '79a84e8cb8caafc13d4636c6d5230914',
+ './modules/Import/tpls/step1.tpl' => 'd5be2d2396844d8e542a5be53b0cafb9',
+ './modules/Import/tpls/last.tpl' => 'cd2f76b2e8991cacaa7cb6504360e67d',
+ './modules/Import/tpls/error.tpl' => '4c561e896c8cf26a72f934fc83b08ab6',
+ './modules/Import/language/en_us.lang.php' => '83f1561638750f5f5f9c4e773aa86cf7',
+ './modules/Import/controller.php' => 'e81e3c248c0f2533bc3a30bae4adda96',
+ './modules/Import/UsersLastImport.php' => '9537110142dab755d1536ef0e438df91',
+ './modules/Import/Menu.php' => '4231e11718ef59bbaca20b46ea195950',
+ './modules/Import/ImportMapTab.php' => 'c34339dd1b1c691ad605f7b2316c56e6',
+ './modules/Import/ImportMapSalesforce.php' => '539a104896e214c018c8c81669236220',
+ './modules/Import/ImportMapOutlook.php' => '606cf0efd7a8c98e8e8fdfcaa5a7acd2',
+ './modules/Import/ImportMapOther.php' => 'fe11a14b72acbe9cde4511c5d7e4a09e',
+ './modules/Import/ImportMapCsv.php' => '448d8931c85cacc4179120c2a20c4bc7',
+ './modules/Import/ImportMapAct.php' => '78df0dfb26f4c89dd23eda4329917d70',
+ './modules/Import/ImportMap.php' => '8c3c3445cd1109331517d0f2be193c35',
+ './modules/Import/ImportFileSplitter.php' => 'ff77217515cea4fe6bef98f72efbca20',
+ './modules/Import/ImportFile.php' => '1e67c950bc97e690c4c39dc58f3694ad',
+ './modules/Import/ImportFieldSanitize.php' => 'ef42108beab1cae966874ee9d12b9e70',
+ './modules/Import/ImportDuplicateCheck.php' => 'ffa9c7513f3ad00c70645e86ef686264',
+ './modules/Import/ImportCacheFiles.php' => '7ccd3d16e86f7e244afa2c3ec79d6585',
+ './modules/Import/Forms.php' => 'aa21c1468d24d31d1c1a8c2071acb940',
+ './modules/Home/about.js' => 'd15c260b194de31361e331b841bff4fc',
+ './modules/Home/action_view_map.php' => '0fb6609851be65b5c71cb78738cddfda',
+ './modules/Home/views/view.additionaldetailsretrieve.php' => '4c1b017c7466a4d08e2fca1b5210e5a7',
+ './modules/Home/views/view.modulelistmenu.php' => '53cad4dd9a279abd1f93be32d4c2249a',
+ './modules/Home/views/view.list.php' => '24f2acac32fc46bba2b65617f742021b',
+ './modules/Home/sitemap.tpl' => '0aaf71c46029f50c65cfc40244f4c123',
+ './modules/Home/sitemap.php' => 'dc0b3803d35cd2a5dafb7ab98dd881b1',
+ './modules/Home/quicksearchQuery.php' => '7b3025ec8d69ab7e770a187f02d0f020',
+ './modules/Home/language/en_us.lang.php' => 'a412cb38ef330fac398279e30352fe42',
+ './modules/Home/dashlets.php' => '3336d96f1a154c5e8bb4486666d1e343',
+ './modules/Home/UnifiedSearchAdvancedResults.tpl' => 'ece94de0e868fd044c148642e5b821d0',
+ './modules/Home/UnifiedSearchAdvancedForm.tpl' => '3afe71c2a3ab906e6d832a909b8a4f73',
+ './modules/Home/index.php' => '65bacfb3bc4d126ebabe55e645f8a193',
+ './modules/Home/UnifiedSearchAdvanced.tpl' => '5133d64ca90bb45329fcb9fa8bad2e01',
+ './modules/Home/UnifiedSearchAdvanced.php' => '94d5fb5eede6e6fd92334d7c71bdbff1',
+ './modules/Home/TrainingPortal.tpl' => '0049d2a11e2aa770d91965fa140490e6',
+ './modules/Home/TrainingPortal.php' => '355a092e948ab2740e8b63ecacd8110d',
+ './modules/Home/UnifiedSearch.php' => '8b1fd77832d3067cb6bd5c64296928e5',
+ './modules/Home/SaveSubpanelLayout.php' => 'e338069c63a8aad2c3c27ed0dda7611e',
+ './modules/Home/PopupSugar.php' => 'f95d5b92fb0d367436d09f9a235dda3d',
+ './modules/Home/Menu.php' => '3fa23b2242e96d9891d841b336f351f5',
+ './modules/Home/LastViewed.php' => 'c59382fac20f91b5081513da98827ad3',
+ './modules/Home/Home.tpl' => '22ea7307a163b643d2fdc57833bed091',
+ './modules/Home/Home.html' => '1cfd71deea974236ad79b5a59a39ac96',
+ './modules/Home/DynamicAction.php' => '8de09f545e517b5a91039b605898627e',
+ './modules/Home/Dashlets/iFrameDashlet/iFrameDashlet.php' => '093c0b3886c49e37d542936e4fb3f325',
+ './modules/Home/Dashlets/iFrameDashlet/iFrameDashlet.meta.php' => '4227913d52f981f847c48e63e71b2d07',
+ './modules/Home/Dashlets/iFrameDashlet/configure.tpl' => 'af2e87f986e73938a4df665c3baa219f',
+ './modules/Home/Dashlets/SugarNewsDashlet/configure.tpl' => 'af2e87f986e73938a4df665c3baa219f',
+ './modules/Home/Dashlets/SugarNewsDashlet/SugarNewsDashlet.php' => 'a9bf3c4562700024d4089f87a0d5000c',
+ './modules/Home/Dashlets/SugarNewsDashlet/SugarNewsDashlet.meta.php' => 'c61db581e2b16a9ae9459091a494c921',
+ './modules/Home/Dashlets/RSSDashlet/RSSDashletOptions.tpl' => 'd0077fe1045f2468f91b81a4f8e6435d',
+ './modules/Home/Dashlets/RSSDashlet/RSSDashlet.tpl' => '6736755324f99b169fd55cfb5186a039',
+ './modules/Home/Dashlets/RSSDashlet/RSSDashlet.php' => '01b329ff8f38eaef94475e176cf0d3d0',
+ './modules/Home/Dashlets/RSSDashlet/RSSDashlet.meta.php' => '2868db4815ce439503871be342c6aaba',
+ './modules/Home/Dashlets/RSSDashlet/RSSDashlet.icon.jpg' => '7b0cb2ec97ce8e71d74d60a0da81ba53',
+ './modules/Home/Dashlets/RSSDashlet/RSSDashlet.en_us.lang.php' => 'ec24eac2fde553b6a7190b0ac40b9068',
+ './modules/Home/Dashlets/JotPadDashlet/JotPadDashletScript.tpl' => '44fe1cc9a5d2fc4d43207d37d9facba9',
+ './modules/Home/Dashlets/JotPadDashlet/JotPadDashletOptions.tpl' => '3dec6d95f5b5297b9f184e2be3afb8fe',
+ './modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.tpl' => '99b1f580406b7aa128719886b73e64e8',
+ './modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.php' => 'c2d3c87ddfae95bd4bbfc80d0a3f43a1',
+ './modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.meta.php' => 'f684f24e9455ff722136faf5ec2ce552',
+ './modules/Home/Dashlets/JotPadDashlet/JotPadDashlet.en_us.lang.php' => '05b9d95822105ffd36ffb87c09b94ef7',
+ './modules/Home/Dashlets/InvadersDashlet/sprites/player.png' => 'e5cac3126e8afc4a33374c12651669ab',
+ './modules/Home/Dashlets/InvadersDashlet/sprites/cube.png' => '2e8e87c58816e987578025e21a19c3e7',
+ './modules/Home/Dashlets/InvadersDashlet/sprites/bg.png' => 'cd531b08b65ec6ed046d182122d54b3a',
+ './modules/Home/Dashlets/InvadersDashlet/sprites/alien.png' => '30696cdec3d5ae84a3150d426cea9d12',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersOptions.tpl' => '9d3147b44f9f89b4499391e00db3d3d2',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersDashletScript.tpl' => '67f59f04e3458dacb3cac344841e6296',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.tpl' => '7874271cdf42994f3043a00dce93c446',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.php' => '54619be90827d7aa860a4af530856f9d',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.meta.php' => '4dfe49727e4a60650b8b23d39dd6460c',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.icon.jpg' => '7b0cb2ec97ce8e71d74d60a0da81ba53',
+ './modules/Home/Dashlets/InvadersDashlet/InvadersDashlet.en_us.lang.php' => '55dfa5c7a2a87a8c07a823a739defa9e',
+ './modules/Home/Dashlets/ChartsDashlet/ChartsDashletScript.tpl' => 'dd411a07bad4a9ff68676d92bccf8235',
+ './modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.php' => '24a3ca162a3be8d9dbbdd950c9756a19',
+ './modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.meta.php' => 'b63a2caee0d5d33921fab2017e0dc61d',
+ './modules/Home/Dashlets/ChartsDashlet/ChartsDashlet.en_us.lang.php' => 'a17865b601f0870d5e864f76839a47ee',
+ './modules/Home/SubpanelCreates.php' => 'b65d7d8997f074f8b981a3888ac76d81',
+ './modules/Home/AddToFavorites.php' => '4e113ab3ea13a302ce66e89a4ecce74d',
+ './modules/Home/About.php' => 'c799b63f8d13901a079d553ffe6df17e',
+ './modules/History/metadata/subpaneldefs.php' => 'f3986a34f5d8bb4a79b44903c3598144',
+ './modules/History/language/en_us.lang.php' => '0daa27d2314c4abfed502f3cb5234cc7',
+ './modules/Help/language/en_us.lang.php' => '344bf51c077fc8fdffe33f5fd238be25',
+ './modules/Help/index.php' => '8001cc9a2eaac900eeb07f528b7a64e9',
+ './modules/Help/Menu.php' => '5d40b90cb2c96497c439b5ab1d1a1242',
+ './modules/Groups/vardefs.php' => '3d78ea13abcc58a854ecb205320afc77',
+ './modules/Groups/language/en_us.lang.php' => 'a234b6d219d2f793b60f50ddb7590587',
+ './modules/Groups/index.php' => '2cef162dc968cd4475d1bcabc3d047a7',
+ './modules/Groups/Save.php' => 'bcdd33e478e3d6221fc4da3d4fb7dc5d',
+ './modules/Groups/Menu.php' => '4c44bf811052dcac45902c161b49257a',
+ './modules/Groups/ListView.php' => '0acdda7db7d88ed6fd8572cde7f811d6',
+ './modules/Groups/ListView.html' => 'c94c29c0800a97cf7bf85aaff058b8f2',
+ './modules/Groups/Group.php' => '3c9c86fda7e9f7fcfd2e1e1d2224cf3f',
+ './modules/Groups/Forms.php' => '3d78ea13abcc58a854ecb205320afc77',
+ './modules/Groups/EditView.php' => '4aafca0e9a90ea125b2e481a1d20f394',
+ './modules/Groups/EditView.html' => '5aa0ae8440621955c98ac8c973021f2e',
+ './modules/Groups/DetailView.php' => '2fb58d8e395a508e6acad046b4068c2c',
+ './modules/Groups/DetailView.html' => '9dab041fc1be503de6769ea70911cba5',
+ './modules/Groups/Delete.php' => '6766206f16b826890facdfc4be15e92c',
+ './modules/Employees/views/view.list.php' => 'e15d1d43c1d43b3cb62743447e260e6d',
+ './modules/Employees/views/view.edit.php' => 'd3e44391b0f1abe2c37716004a28e1ad',
+ './modules/Employees/views/view.detail.php' => 'b360b199402973c454b791bcf4034b35',
+ './modules/Employees/vardefs.php' => '8479de606f3beb25e119178b5b46e646',
+ './modules/Employees/metadata/searchdefs.php' => '1340db5e164cece39b1470a2a0a9c778',
+ './modules/Employees/metadata/listviewdefs.php' => '874253a6f56c264596721353f8cc5e3b',
+ './modules/Employees/metadata/editviewdefs.php' => 'c5f55fa972ce09fbd845ff49af6b04b2',
+ './modules/Employees/metadata/detailviewdefs.php' => '929da865fd722196b482d18a20e4fe77',
+ './modules/Employees/metadata/SearchFields.php' => 'fb28c93f3ebafbf436d4ca2e3e746200',
+ './modules/Employees/language/en_us.lang.php' => '2ce4ae0dddca70df365b0e7fc9cc5365',
+ './modules/Employees/field_arrays.php' => 'c20bc0f73165e17d3b7683966ab81181',
+ './modules/Employees/controller.php' => '1e78e15e871835524a935d1d131fb73e',
+ './modules/Employees/WapMenu.php' => '3e2aa5ebfe0cadb963b254b89edbea6f',
+ './modules/Employees/WapAuthenticate.php' => '0884c8b0884ef63b2cdfa9752ff4368d',
+ './modules/Employees/Popup_picker.php' => '09ef8ea00509c554cfdee141283b66f3',
+ './modules/Employees/Popup_picker.html' => '92f9604067d1279e038c64e52f3a0ae4',
+ './modules/Employees/Menu.php' => 'f18a2a7887a5ef61b1feeb7deb894556',
+ './modules/Employees/Forms.php' => '9ed5ba9fb7e1e06adf0346c68f23361c',
+ './modules/Employees/Error.php' => 'c651b08c57c2b78dfa68520822cc6bc1',
+ './modules/Employees/Save.php' => '1a61bfa66090a2d66b6a0abc9f334c72',
+ './modules/Employees/Employee.php' => 'fdad9e9d9766399e8a7048f0e77b0bb2',
+ './modules/Emails/views/view.quickcreate.php' => '58e2115f8d2a69f4afc2a04976fac02b',
+ './modules/Emails/views/view.modulelistmenu.php' => 'e9ca39c1e0e3abc394b1a9dad2804ebd',
+ './modules/Emails/views/view.classic.config.php' => 'bfb5df976e677f3b7ea82de5b403e2e4',
+ './modules/Emails/vardefs.php' => '49943485f43e7102d02842430c513b59',
+ './modules/Emails/templates/successMessage.tpl' => 'f2a5b761c0f480ded16d358e0e650ae4',
+ './modules/Emails/templates/overlay.tpl' => '064c362704b97dd6f41ba062d16f2552',
+ './modules/Emails/templates/outboundDialogTest.tpl' => 'db35198ac6efcdb06604504a5e3fd5cb',
+ './modules/Emails/templates/outboundDialog.tpl' => '910c40e39314d9035af1c41746fedd0c',
+ './modules/Emails/templates/importRelate.tpl' => 'b3897fb62f70b64c9fc202320e176a8b',
+ './modules/Emails/templates/emailSettingsRules.tpl' => '6fe8b27d9e161596113223f607b13c80',
+ './modules/Emails/templates/emailSettingsGeneral.tpl' => '3563cc551b3103b1b50244843c121dfd',
+ './modules/Emails/templates/emailSettingsFolders.tpl' => '651283dc3f1a228aa989c416127d8b2f',
+ './modules/Emails/templates/emailSettingsAccounts.tpl' => '45883d0df275997a0d353a0b0d91b6e1',
+ './modules/Emails/templates/emailSettingsAccountDetails.tpl' => 'b81fe2355184a51c9f3f4987d95c065e',
+ './modules/Emails/templates/emailSettings.tpl' => '7dfced6223a7c43cb6827504b86eb341',
+ './modules/Emails/templates/emailDetailView.tpl' => 'f3c6f5cc2a662f08da043caca50e16c4',
+ './modules/Emails/templates/editMailingList.tpl' => 'b4fb8c08aa00f663ffd01d51525be2fa',
+ './modules/Emails/templates/editContact.tpl' => 'da032deef1d61f195ffe396292384aa3',
+ './modules/Emails/templates/editAccountDialogue.tpl' => '8296045e10b01f885218bd15349ceb1c',
+ './modules/Emails/templates/dceMenuQuickCreate.tpl' => 'e954a3bd597aa2fe455c9048acf822d8',
+ './modules/Emails/templates/assignTo.tpl' => '79446b8acf76f9440bdcee11787a37d2',
+ './modules/Emails/templates/advancedSearch.tpl' => 'ba3419272ea3549ed31ee7e84470b64a',
+ './modules/Emails/templates/addressSearchContent.tpl' => '742860f9399e347935682184334ea250',
+ './modules/Emails/templates/addressSearch.tpl' => 'a51678c98ec0d8962f0376c241d439e1',
+ './modules/Emails/templates/addressBook.tpl' => 'd97ea06ba14fa80442685621698cd467',
+ './modules/Emails/templates/_createGroupFolder.tpl' => '909a49586dd69be9f465e753ec0b9f7e',
+ './modules/Emails/templates/_blank.html' => 'e629bac7136292395f2a281da41c68e2',
+ './modules/Emails/templates/_baseJsVars.tpl' => '70f2e0a7e263630e3389cdb1c24f7983',
+ './modules/Emails/templates/_baseEmail.tpl' => '06f33256be4041305df49164b78afa36',
+ './modules/Emails/templates/_baseConfigData.tpl' => '49a2fa95eaa4599a8e5bd9d4774d760c',
+ './modules/Emails/subpanels/ForUsers.php' => '3f1cb8aa8dc7407fd9e98575d4d9c65e',
+ './modules/Emails/subpanels/ForQueues.php' => '0b9d30578ba6ab100603332f15c333eb',
+ './modules/Emails/subpanels/ForHistory.php' => 'c646947f0bd46cfbee6554b6caea8c3e',
+ './modules/Emails/subpanels/ForContacts.php' => '125bee776e196e52371122f9abfcdde3',
+ './modules/Emails/metadata/qcmodulesdefs.php' => '81404f499637aa9c798863361f4720c5',
+ './modules/Emails/metadata/subpanels/ForUsers.php' => '3f1cb8aa8dc7407fd9e98575d4d9c65e',
+ './modules/Emails/metadata/subpanels/ForUnlinkedEmailHistory.php' => 'e50fbe692c61e34002ce0a3d37267f9b',
+ './modules/Emails/metadata/subpanels/ForQueues.php' => '0b9d30578ba6ab100603332f15c333eb',
+ './modules/Emails/metadata/subpanels/ForHistory.php' => '7559b8ed8cddd188da8b341d7b045fe3',
+ './modules/Emails/metadata/subpanels/ForContacts.php' => '125bee776e196e52371122f9abfcdde3',
+ './modules/Emails/metadata/subpaneldefs.php' => 'c36b83707f89bb561749d97fa5dafb6b',
+ './modules/Emails/metadata/popupdefs.php' => '0275329aead4baf66320f834ed573115',
+ './modules/Emails/metadata/additionalDetails.php' => '31f34aadd311817bb2d43c0acb85b452',
+ './modules/Emails/language/en_us.lang.php' => 'edb317cb70b160089640bf448aa38c7a',
+ './modules/Emails/javascript/viewPrintable.js' => '5aab03393cdc54f2dd875441953c33fc',
+ './modules/Emails/javascript/vars.js' => 'f33408357602a43c032aa90d7c751ee3',
+ './modules/Emails/javascript/init.js' => '1499225ea83f183744425213102bd030',
+ './modules/Emails/javascript/grid.js' => 'd14d32123de014fabb7ad605883f4339',
+ './modules/Emails/javascript/email_popup_helper.js' => 'd554d0576666510cd702a418e1fe47ae',
+ './modules/Emails/javascript/displayOneEmailTemplate.js' => '36286f4d5dfa7b3ecb989eaa1347fc74',
+ './modules/Emails/javascript/composeEmailTemplate.js' => '1d3a616e3192d976bc3dec881ec9e0e2',
+ './modules/Emails/javascript/complexLayout.js' => '05a5609d5457d093993b06cac8fbc145',
+ './modules/Emails/javascript/ajax.js' => '9ef0d1b8d475f971c0e14f773343c246',
+ './modules/Emails/javascript/EmailUIShared.js' => 'a7be59721553f5754aa4a5b1ca719c08',
+ './modules/Emails/javascript/EmailUICompose.js' => '0c49c07f04baeac647dbbadb45a5f81b',
+ './modules/Emails/javascript/EmailUI.js' => 'b4d2307e6918292281961860bcdf5cff',
+ './modules/Emails/javascript/Email.js' => '9c505070f1ff470ab07ab79374a15cbd',
+ './modules/Emails/index.php' => '6cc6a189db79619fe86fe1469e9ff7d3',
+ './modules/Emails/images/sugarGroup.gif' => 'ad21210176b6a2a10a7a9b8f876ad83b',
+ './modules/Emails/images/sugarDynamic.gif' => '82285d963771975b2def7f19e6438a8c',
+ './modules/Emails/images/sugar.gif' => '7596d03d810578248397bd29e7d708da',
+ './modules/Emails/images/rowsView.gif' => 'd1e22c7c55eff098bd0d1fea1a42b289',
+ './modules/Emails/images/rightarrow_inline.gif' => 'd4cde743094e6e6c59d547f296456e98',
+ './modules/Emails/images/leftarrow_inline.gif' => '505062559e730bf5451d037be485cfc4',
+ './modules/Emails/images/fullscreen.gif' => '2f2d93eb81fdf22a91a2dda873eb883a',
+ './modules/Emails/images/emailGroup.gif' => 'b2acc4673f0eec0fd3f74d9c972bec42',
+ './modules/Emails/images/email.gif' => '359e9214dc577e10de38d286a30a5113',
+ './modules/Emails/images/colsView.gif' => '05a47212195473198ec86bc7cc152730',
+ './modules/Emails/images/autofit.gif' => '3c3e9c06b10b0ea41d89edef7c0b947e',
+ './modules/Emails/field_arrays.php' => '2abd13368de95a97236118469af2cf14',
+ './modules/Emails/SugarRoutingAsync.php' => '1a0be585c1d2bee11481b0e241a2a63c',
+ './modules/Emails/SubPanelViewRecipients.php' => '732be5c347a5817672a6489ee90d5e89',
+ './modules/Emails/SubPanelViewRecipients.html' => 'f07c4e81fa6c04a47fd45d727c4ea751',
+ './modules/Emails/Status.php' => 'bcb357445138451929653364e7ae07c5',
+ './modules/Emails/Status.html' => '1801ca32d3646ee0c98306f604919607',
+ './modules/Emails/SearchFormSent.html' => '5b9f23633463ed27da895b70a17725e4',
+ './modules/Emails/SearchFormMyInbox.html' => 'c339d9af64cfe5d63148f1f639730dad',
+ './modules/Emails/SearchFormGroupInbox.html' => 'cc514802ad41c7c2a39651bbfc4c672f',
+ './modules/Emails/SearchForm.html' => 'cf30409165e6f78d6341281e8de9845c',
+ './modules/Emails/Save.php' => 'fae1087bee2de233cb78d82833e1a2f6',
+ './modules/Emails/Popup_picker.php' => 'f7a97994261d17eef56d3909bd046efa',
+ './modules/Emails/Popup_picker.html' => 'b64e7ed7ebea9b23d3a2becb000efacb',
+ './modules/Emails/PopupDocuments.php' => '5b833ead51454c4200f744890d271bae',
+ './modules/Emails/PopupDocuments.html' => '2dc8dd008819e903f069a7c8fd5ba51f',
+ './modules/Emails/Popup.php' => 'b9d8fd64d2ebf2b89fdb65df7ae65d23',
+ './modules/Emails/PessimisticLock.php' => '5b25ed2ea1f768ace3381178c57b39d1',
+ './modules/Emails/Menu.php' => '0f68402e34f3e4c64869216b208851c7',
+ './modules/Emails/MassDelete.php' => 'cc57671b3dc0adcdc83cf8e192056fb2',
+ './modules/Emails/ListViewSent.html' => '01160346dead8739eb4ed9def4bad364',
+ './modules/Emails/ListViewMyInbox.html' => 'f02418a857d211e4902052188e94bd0c',
+ './modules/Emails/ListViewHome.php' => '6cae8e0431e69db98940d4cc5f717ded',
+ './modules/Emails/ListViewHome.html' => '171e189b1ab65677602f2e3d43c77901',
+ './modules/Emails/ListViewGroupInbox.html' => '7069de21f85a2596a8bf3b4ddea21448',
+ './modules/Emails/ListViewGroup.php' => '35787a4cf90680cc47634e073225be41',
+ './modules/Emails/ListViewDrafts.html' => '67e8857521daaf70fc1468a363d9ec3f',
+ './modules/Emails/Grab.php' => '95a6e008baa1cdeebbf72a74bf72db68',
+ './modules/Emails/GenerateQuickComposeFrame.php' => '0c9dbc7d32d522b624198d21f57f6338',
+ './modules/Emails/EmailUIAjax.php' => '1a07741d81c08b0b7ab4173ac56a6669',
+ './modules/Emails/EmailUI.php' => 'e3149cad51065fc936964d51e140d156',
+ './modules/Emails/EmailUI.css' => 'daf7eb7d61e5b8777613d4f550bfa572',
+ './modules/Emails/Email.php' => 'edf545a223eca70ec14fddfabcc348e4',
+ './modules/Emails/EditViewArchive.html' => 'ad802e567b75e39a6c7885bbb8fb9fcc',
+ './modules/Emails/EditView.php' => '26af8ed4744f4029ac287aab737c1dc0',
+ './modules/Emails/EditView.html' => 'dd94b8950eeac04fb7663ba68a54440c',
+ './modules/Emails/DetailViewSent.html' => 'affa0cffa08a90c174a039d78230f7e1',
+ './modules/Emails/DetailView.php' => '6c69821e3d9e42d6af23760c707a2645',
+ './modules/Emails/DetailView.html' => 'ef22c46096ec2e20e74582bcc2812b64',
+ './modules/Emails/Delete.php' => '0b9f91d0aef5219b1be1d50592f3979f',
+ './modules/Emails/Dashlets/MyEmailsDashlet/MyEmailsDashlet.php' => '30bf4eeabbd41decbef1747ebc8f8b56',
+ './modules/Emails/Dashlets/MyEmailsDashlet/MyEmailsDashlet.meta.php' => '1d1f601cfbea07b1d59850fee27393ac',
+ './modules/Emails/Dashlets/MyEmailsDashlet/MyEmailsDashlet.data.php' => 'e04693eb309f98f4afb83d419d9a5f5e',
+ './modules/Emails/Compose.php' => 'f39afb096cf094dec08d6f7b8b079e3f',
+ './modules/Emails/Check.php' => '3643d7c5f3a716ac2f59ab358090badf',
+ './modules/EmailTemplates/EmailTemplate.js' => '41a0f2088124d487d8134fc0d522a162',
+ './modules/EmailTemplates/vardefs.php' => 'c1db0f25697a39b8a2e458c383aec8c8',
+ './modules/EmailTemplates/metadata/searchdefs.php' => 'afa314da331a40d53c5ae14c1eed1bcc',
+ './modules/EmailTemplates/metadata/listviewdefs.php' => 'c82edfad0756cb59915633e81a304fee',
+ './modules/EmailTemplates/metadata/SearchFields.php' => '210c298a3aea2b198e3aa6219026fe29',
+ './modules/EmailTemplates/language/en_us.lang.php' => 'bf4c44ff40160b7ae1217b2be2709905',
+ './modules/EmailTemplates/field_arrays.php' => '6da2acc09f343043e3e624d424aea6e9',
+ './modules/EmailTemplates/Save.php' => '3ef908df02a47472b47f810c1dcd6499',
+ './modules/EmailTemplates/PopupDocumentsCampaignTemplate.php' => '383a7ad98ff501f3d5e408a1a0ca5d7a',
+ './modules/EmailTemplates/PopupDocumentsCampaignTemplate.html' => '042f740f594f4ff5b463bc8ad258fe6c',
+ './modules/EmailTemplates/Menu.php' => '75d3b7fadc146b1bf2fd0b465a2099f1',
+ './modules/EmailTemplates/EmailTemplateFormBase.php' => '78c467f8ae5ac646d95ec93e4c6a3526',
+ './modules/EmailTemplates/EmailTemplate.php' => 'c556a2a2fec319201b500e2318e6a8fc',
+ './modules/EmailTemplates/EditViewMain.html' => '198347cfe799371733dcc1929c5b0f07',
+ './modules/EmailTemplates/EditView.php' => '3893991b1768f0aef3a95f9870f1c4df',
+ './modules/EmailTemplates/EditView.html' => '7f83285c5c1b9763a4f085d3e83ea6c8',
+ './modules/EmailTemplates/DetailView.php' => '2d6718ce402a490aaf5b3b856bc0a9c1',
+ './modules/EmailTemplates/DetailView.html' => '4e07f3f529aa4dd7aa17ccc0f635700b',
+ './modules/EmailTemplates/Delete.php' => 'd26b04de325778d192333d1b4d1be8ce',
+ './modules/EmailTemplates/CheckDeletable.php' => '613ca7e81baf06d12df1117363b76b24',
+ './modules/EmailTemplates/AttachFiles.php' => '6d997841491bd058bfaaea67f2c6baf8',
+ './modules/EmailMarketing/vardefs.php' => '3db38c851ee5b051461860f05d2754f4',
+ './modules/EmailMarketing/subpanels/default.php' => '05cba11a3fc14ecd377696301a9c0a35',
+ './modules/EmailMarketing/metadata/subpanels/default.php' => '69c9b30a0a5cd2e74d719db0164958e1',
+ './modules/EmailMarketing/metadata/subpaneldefs.php' => 'b8d167fcfbe7d88635939a394535cd46',
+ './modules/EmailMarketing/language/en_us.lang.php' => '477217ffccc85950b9f26ee82ecb914d',
+ './modules/EmailMarketing/field_arrays.php' => '726e7f9319b1753ee3a82c5e2ad966ea',
+ './modules/EmailMarketing/SubPanelView.php' => '9af7ad5c01b8ea8b09f8e572c459f9f7',
+ './modules/EmailMarketing/SubPanelView.html' => 'f0fbf5a76a52153e15456438ea6022e2',
+ './modules/EmailMarketing/Save.php' => 'b9fdcfb143d84fb5c5b8e6e3fc5d4cf0',
+ './modules/EmailMarketing/Menu.php' => '22676bda0f00f43d9aa328268026869a',
+ './modules/EmailMarketing/Forms.php' => 'b1b36a92909246484fea795acb03d363',
+ './modules/EmailMarketing/EmailMarketing.php' => '6684471a20ef6dfa07aaa9ba755a5bff',
+ './modules/EmailMarketing/EditView.php' => '1db6cc5c64860de04a1d5b0bed3e5f2b',
+ './modules/EmailMarketing/EditView.html' => '91cf42cad9202f2062af36934049c8d5',
+ './modules/EmailMarketing/DetailView.php' => 'd070fb2de3d73129261c0a877e12e406',
+ './modules/EmailMarketing/DetailView.html' => '7b65b4ff73fb5e80a0dc6f9e7d78b932',
+ './modules/EmailMarketing/Delete.php' => '3c915ebc36fe5bbb3b785211465c0899',
+ './modules/EmailMan/views/view.list.php' => '6d4902b6cf464c45ef6b7b368b450136',
+ './modules/EmailMan/views/view.config.php' => '6aab29db0bb8706f46a523003dd943a0',
+ './modules/EmailMan/views/view.campaignconfig.php' => '35d5be99f58836dbf2ded6d05189911f',
+ './modules/EmailMan/vardefs.php' => '11ea605c45446d341bd8590c2455340e',
+ './modules/EmailMan/tpls/config.tpl' => 'cf708f8e63b0ac2e1f6885d165f06748',
+ './modules/EmailMan/tpls/campaignconfig.tpl' => '1374e1451a901d40270fedc86ecd942f',
+ './modules/EmailMan/testOutboundEmail.php' => 'f426713a1bee0bda8ee5e623094e62ce',
+ './modules/EmailMan/subpanels/default.php' => 'a5bfe693b6607b29e6a7eedf0ae018d1',
+ './modules/EmailMan/metadata/subpanels/default.php' => 'a5bfe693b6607b29e6a7eedf0ae018d1',
+ './modules/EmailMan/metadata/searchdefs.php' => 'b03aec4d6d6af23ddac8788394f34367',
+ './modules/EmailMan/metadata/listviewdefs.php' => '00a5290dd11f4d2e12ff80df3e975191',
+ './modules/EmailMan/metadata/SearchFields.php' => '3366b325da4e03e28df43c1ec6864fab',
+ './modules/EmailMan/language/en_us.lang.php' => '729f9dc0d3d90be0fadd3225b3894550',
+ './modules/EmailMan/field_arrays.php' => '89e4e98aa8bf3c3f00b74d175e17be44',
+ './modules/EmailMan/action_view_map.php' => '137158647e55f119ece5ef3106e08bd9',
+ './modules/EmailMan/Save.php' => '53866932041c1e0b684e61813ee19b3f',
+ './modules/EmailMan/Menu.php' => '935f5e5e9940e2b115c0862dff26e96a',
+ './modules/EmailMan/Forms.php' => '712377fd87dd4176905b4b927fe39cbd',
+ './modules/EmailMan/EmailManDelivery.php' => '46d4d9c43c6f97251f54646d9b3fbc63',
+ './modules/EmailMan/EmailMan.php' => '95934f08c69cc52b3259152b0f5781cc',
+ './modules/EmailAddresses/vardefs.php' => '8464b804f5be7f2e7ab271babb910ed7',
+ './modules/EmailAddresses/language/en_us.lang.php' => '682d246e21989b838797f677b0517fda',
+ './modules/EmailAddresses/EmailAddress.php' => '9c55bd8a741f19c7048d2fb1f28b11f1',
+ './modules/DynamicFields/vardefs.php' => '1940251900df925de38b31049bb5fb3c',
+ './modules/DynamicFields/templates/Files/EditView.php' => '96c1b1ae2d80412e5f9d9b8881c9c9fa',
+ './modules/DynamicFields/templates/Files/DetailView.php' => '1049de42d76a8d790b31ab2156cd49b3',
+ './modules/DynamicFields/templates/Fields/TemplateRange.php' => 'c6f10b2314ac8ac1c11741a481c35388',
+ './modules/DynamicFields/templates/Fields/TemplateURL.php' => 'e916b152a08645abf170f7848670a667',
+ './modules/DynamicFields/templates/Fields/TemplateTextArea.php' => 'a44b7ca6cb1e9bf6a441abe6025412c3',
+ './modules/DynamicFields/templates/Fields/TemplateText.php' => '4a19bab77eb7427451c1ed5a10aeb43c',
+ './modules/DynamicFields/templates/Fields/TemplateRelatedTextField.php' => 'a865d9b0d83eb33186d53cd077f49e0c',
+ './modules/DynamicFields/templates/Fields/TemplateRadioEnum.php' => '6b8f1c4a074f726e7c19ca1664c6ba69',
+ './modules/DynamicFields/templates/Fields/TemplatePhone.php' => '3222ca1ab2170b5221c6b71dc6024b24',
+ './modules/DynamicFields/templates/Fields/TemplateParentType.php' => '968bd9527d214ed6e9ff6d02c675fd3b',
+ './modules/DynamicFields/templates/Fields/TemplateParent.php' => '52bac9df03d7b11cd4007a651db97d54',
+ './modules/DynamicFields/templates/Fields/TemplateMultiEnum.php' => '3bac9768ea7855733e163ca6962d5480',
+ './modules/DynamicFields/templates/Fields/TemplateInt.php' => 'a776d6dc3ae3316530134413c8643e78',
+ './modules/DynamicFields/templates/Fields/TemplateImage.php' => '804aee08f3169fa2f33a8889b8ba3692',
+ './modules/DynamicFields/templates/Fields/TemplateId.php' => '64616dede55f5f1fa8cc9e0a48b5c02a',
+ './modules/DynamicFields/templates/Fields/TemplateIFrame.php' => '86e361840afad1c98ec7565ce5e5146d',
+ './modules/DynamicFields/templates/Fields/TemplateHTML.php' => 'de047ceef03750cf2c7a446b8c222c08',
+ './modules/DynamicFields/templates/Fields/TemplateFloat.php' => 'a692b82633c68b963b1839b5975f47a6',
+ './modules/DynamicFields/templates/Fields/TemplateField.php' => '09ab55dc404802b1716d2058c7087944',
+ './modules/DynamicFields/templates/Fields/TemplateEnum.php' => '68afaa64599ad85713df76ff57c479cd',
+ './modules/DynamicFields/templates/Fields/TemplateEncrypt.php' => '581e09a06f8fb69ca495dde60fc2c9ad',
+ './modules/DynamicFields/templates/Fields/TemplateEmail.php' => '61d3983c998fc97b75132b323da82e37',
+ './modules/DynamicFields/templates/Fields/TemplateDecimal.php' => '726f6c5b927e968a0e64352428210fd8',
+ './modules/DynamicFields/templates/Fields/TemplateDatetimecombo.php' => '3d407715f96102e426cef14e3576ebc1',
+ './modules/DynamicFields/templates/Fields/TemplateDate.php' => '1c89210c5d7cd32d2319a44e8ae538b7',
+ './modules/DynamicFields/templates/Fields/TemplateCurrencyId.php' => 'dc91f2deb794748114de23cc7b4cdc09',
+ './modules/DynamicFields/templates/Fields/TemplateCurrency.php' => '3cee6d3c8507486227baa80243a29fd4',
+ './modules/DynamicFields/templates/Fields/TemplateBoolean.php' => '060d4349e3756351791ac862a8814af6',
+ './modules/DynamicFields/templates/Fields/TemplateAddressCountry.php' => '522ab825c2c18d722df9d9d0dda5c13b',
+ './modules/DynamicFields/templates/Fields/TemplateAddress.php' => '9f24e128e05ad01de87b8e323c36c3e7',
+ './modules/DynamicFields/templates/Fields/Forms/phone.tpl' => '97581b77ffde48b0dbe8aef9a1a9f705',
+ './modules/DynamicFields/templates/Fields/Forms/phone.php' => '45a60141bef3af6ac5dd71259649e324',
+ './modules/DynamicFields/templates/Fields/Forms/varchar.tpl' => '05aea29acabb0987bca9b932e70f61b1',
+ './modules/DynamicFields/templates/Fields/Forms/url.tpl' => '4fbced3e9414687494d53fb40e535d87',
+ './modules/DynamicFields/templates/Fields/Forms/url.php' => '21b0e80433b0cc07dccd3c6dbd2606bd',
+ './modules/DynamicFields/templates/Fields/Forms/text.tpl' => 'b745f2b359fc21c1f8d6a3f000ef78a0',
+ './modules/DynamicFields/templates/Fields/Forms/relate.tpl' => 'c04f3abe417f433d21da6854a8cabd7a',
+ './modules/DynamicFields/templates/Fields/Forms/relate.php' => '2776ceb54ad1e580d9311fbd44c32e41',
+ './modules/DynamicFields/templates/Fields/Forms/radioenum.php' => '457c1027437211ad734331974c50513b',
+ './modules/DynamicFields/templates/Fields/Forms/parent.tpl' => '8664691eee2fe9fa52ccbfd6502882b3',
+ './modules/DynamicFields/templates/Fields/Forms/parent.php' => '6f73a276856953fe2bebcfb1a3c60fcc',
+ './modules/DynamicFields/templates/Fields/Forms/multienum.tpl' => 'f76bbb109e3915416df7141ad2d6c7dd',
+ './modules/DynamicFields/templates/Fields/Forms/multienum.php' => '17ad63f685ea5f289e42c3e973b01e1d',
+ './modules/DynamicFields/templates/Fields/Forms/int.tpl' => 'b00e937d643eb478200c61a8be35f913',
+ './modules/DynamicFields/templates/Fields/Forms/image.tpl' => '8819674e601946cb15a4de99f9a6e10e',
+ './modules/DynamicFields/templates/Fields/Forms/image.php' => '31df95d5969eed1a0f8bfdf356f6bc4a',
+ './modules/DynamicFields/templates/Fields/Forms/iframe.tpl' => '6a99ae96432266b24229c988a742f037',
+ './modules/DynamicFields/templates/Fields/Forms/iframe.php' => 'c6d042efca51ca0a99eb58f5840fa132',
+ './modules/DynamicFields/templates/Fields/Forms/html.tpl' => 'a1bc8985dd422758b674c1e5047bfad6',
+ './modules/DynamicFields/templates/Fields/Forms/html.php' => '8bf209be25d0e3459470268685b5b1cd',
+ './modules/DynamicFields/templates/Fields/Forms/float.tpl' => 'eec764e851c0ebfd92f98b257cf5c942',
+ './modules/DynamicFields/templates/Fields/Forms/enum2.php' => 'fd3a49996fcd8ad2cfddde0df6666b22',
+ './modules/DynamicFields/templates/Fields/Forms/enum.tpl' => 'adc4c505d67fcd9c18febcf5d7aa34e0',
+ './modules/DynamicFields/templates/Fields/Forms/encrypt.tpl' => 'd680507b7d44a7732be8e46c8cfd2cf8',
+ './modules/DynamicFields/templates/Fields/Forms/encrypt.php' => '41f5d5ff83df9e288f881b7f3bda4209',
+ './modules/DynamicFields/templates/Fields/Forms/datetimecombo.tpl' => '0aa8d6c1e37c646926b957b5e552b6d1',
+ './modules/DynamicFields/templates/Fields/Forms/datetimecombo.php' => 'e95cc013b77efa88984ddde6a1ee41e3',
+ './modules/DynamicFields/templates/Fields/Forms/date.tpl' => 'b79d0cc53eababe4d1c0f3fcd036cbd3',
+ './modules/DynamicFields/templates/Fields/Forms/date.php' => '09b7d866f9654631c223410ee94a34e3',
+ './modules/DynamicFields/templates/Fields/Forms/currency.tpl' => '6edc5e3318e62f4b46b636a60a4cbf2a',
+ './modules/DynamicFields/templates/Fields/Forms/coreTop.tpl' => '5271cfdffa816a609b623cd6179fa65c',
+ './modules/DynamicFields/templates/Fields/Forms/coreBottom.tpl' => '991541c474e4333e9757485d0dbaf7ad',
+ './modules/DynamicFields/templates/Fields/Forms/bool.tpl' => 'b44e01f200cf8e243c3d9a4602019056',
+ './modules/DynamicFields/templates/Fields/Forms/address.tpl' => 'bfaee150ccca6370715adfa01bd204d0',
+ './modules/DynamicFields/language/en_us.lang.php' => 'e904f9c5240dedc3cee49c5e3709b632',
+ './modules/DynamicFields/UpgradeFields.php' => 'a1880f6a70750840063205c16bc4e2ca',
+ './modules/DynamicFields/Save.php' => 'f47bc3a9fc4e35bb867d92b77676fee1',
+ './modules/DynamicFields/FieldsMetaData.php' => '296f6d11e6572e1e4ac9f230b3b3dd45',
+ './modules/DynamicFields/FieldViewer.php' => '2050b8802e13802b36d4ca2dd0069417',
+ './modules/DynamicFields/FieldCases.php' => '8147d93a82ca4a415a38b744d36c50a2',
+ './modules/DynamicFields/DynamicField.php' => '7aa8f24fd5be276dbd2c47be8c220369',
+ './modules/Documents/documents.js' => '58425e6b28feb5424a1a44cc11e5e927',
+ './modules/Documents/tpls/view.extdoc.tpl' => 'b5c9539ff7427f60b075adbc04f4f0a1',
+ './modules/Documents/action_view_map.php' => 'e0852de31b1bbbbb80218205c2f2fbf7',
+ './modules/Documents/DocumentExternalApiDropDown.php' => '073eef6ba2b79bb25204419ebf96ddbe',
+ './modules/Documents/views/view.extdoc.php' => 'be76032ab4c036957cde42f5ccd75054',
+ './modules/Documents/views/view.edit.php' => '02b497a597f4c64e33f63932d41fb9f6',
+ './modules/Documents/views/view.detail.php' => '120516f7a34b3aad7c3542903a220d0d',
+ './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.php' => '5de53713106c0ae6b5ad378fd156e5a0',
+ './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.meta.php' => '646b19ac73a520c331a9cae4e8b7fde9',
+ './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.data.php' => 'ebbef0679a8b5bb7e02a4987cb6332f5',
+ './modules/Documents/vardefs.php' => '57ab47aaa2ca3fab68e244d29058ce9a',
+ './modules/Documents/metadata/subpanels/default.php' => 'c8eaa7900e9c63168f7bb080eed86aa4',
+ './modules/Documents/metadata/subpanels/ForContractType.php' => 'e4a3e73968acf2d0a2f211a291e6fcb5',
+ './modules/Documents/metadata/subpaneldefs.php' => 'e58d020bdf070a67368e346b56da70f7',
+ './modules/Documents/metadata/studio.php' => 'ef88e2e795f36cb9dddf39c59daf767e',
+ './modules/Documents/metadata/searchdefs.php' => '4d411dae4fd25c153fd398f7f6e3f4d6',
+ './modules/Documents/metadata/quickcreatedefs.php' => 'f0ae983deec7432bf0f98e581fbd9988',
+ './modules/Documents/metadata/listviewdefs.php' => '4ea73f783cf4c96fd94fc5050847ae02',
+ './modules/Documents/metadata/editviewdefs.php' => '17a1301aa3dc33229b9d03d65ff3f01a',
+ './modules/Documents/metadata/detailviewdefs.php' => '2f2e9944602d987b9312c9008be1e006',
+ './modules/Documents/metadata/SearchFields.php' => '9183287ac55da0719114a8e9f093b43b',
+ './modules/Documents/language/en_us.lang.php' => '2eab3bc37ccf0843360c55ec415a9430',
+ './modules/Documents/field_arrays.php' => '17ab246ffa0317da253689361f1dfb3a',
+ './modules/Documents/TreeData.php' => '16ad8acdfecb80e79b2c6838ca5f6113',
+ './modules/Documents/Popup_picker.php' => '975912e51cc22c5c8354843297b16ba6',
+ './modules/Documents/Popup_picker.html' => '7e2f68d3ed1d18cdb6c658a661ff2659',
+ './modules/Documents/Popup.php' => '468c860fd3edb73570cd47420165ab21',
+ './modules/Documents/Menu.php' => '333b4909040dd17503600c4db615cdd7',
+ './modules/Documents/GetLatestRevision.php' => '3f0f3ab61f376d3cf50b759d8f655b8a',
+ './modules/Documents/DocumentSoap.php' => 'ea6ba67ff29c16ef8f22379ce4682a94',
+ './modules/Documents/Document.php' => '48a7eec0d4b328fbe31be84ce410f613',
+ './modules/Documents/Delete.php' => '8620d185f38b20a32a492e02ee9d248c',
+ './modules/DocumentRevisions/subpanels/default.php' => 'dbc240b4c77f5ee6b8fb8e09c4c66d86',
+ './modules/DocumentRevisions/metadata/editviewdefs.php' => '62dbcf0f9879e49727b626caec71c64f',
+ './modules/DocumentRevisions/metadata/detailviewdefs.php' => '065930313ea614dff0044e40743a4e3d',
+ './modules/DocumentRevisions/metadata/subpanels/default.php' => '0733fa74d8c63d07f3ddeb1464bf2b0e',
+ './modules/DocumentRevisions/language/en_us.lang.php' => '50f782d58ab988825e177eb716318c63',
+ './modules/DocumentRevisions/field_arrays.php' => '8946268a3f327b347bd6e6dbadd99927',
+ './modules/DocumentRevisions/Menu.php' => 'e37e3e5bcfdeb6990f12b73ccfb49413',
+ './modules/DocumentRevisions/ListView.html' => 'c4abed4e08f852d67f13884377595b1e',
+ './modules/DocumentRevisions/Forms.php' => '45fa36924dbe3290cb54734c640bc549',
+ './modules/DocumentRevisions/vardefs.php' => '5dc107ecc501ac49924533b31cd4c1c4',
+ './modules/DocumentRevisions/DocumentRevision.php' => '7744d6c6f4d978e84818eacbab787e1e',
+ './modules/Currencies/EditView.js' => '0556649f3fca63b880c53bbe8a8cfc64',
+ './modules/Currencies/vardefs.php' => 'd6b4b591dda346931bee3509c3636428',
+ './modules/Currencies/language/en_us.lang.php' => '3c96645089ad8919955df4351a3f4b80',
+ './modules/Currencies/iso4217.php' => 'e4b97cb7b108bfbb56a0f4b4ed634244',
+ './modules/Currencies/index.php' => '0200e0104be4d3e86c088ba274796c35',
+ './modules/Currencies/field_arrays.php' => 'c6056d9901110e8e5b11a48dfd4b7bfa',
+ './modules/Currencies/Menu.php' => '733f57c3acdbccd062a4dda2bb551c9f',
+ './modules/Currencies/ListView.html' => '3d4e93cbef259fc09d386cc04fdd2b41',
+ './modules/Currencies/ListCurrency.php' => '4f77eabdbd1a9d25d8a6ed8b33d855f1',
+ './modules/Currencies/Forms.php' => '4c8798c62061fc02a93699b90be1ae5f',
+ './modules/Currencies/EditView.tpl' => '4987de1dbad853674eaaaabeb5126be2',
+ './modules/Currencies/EditCurrency.php' => '8b484f51f73f2e2d7f308fed49c5bfd2',
+ './modules/Currencies/Currency.php' => '14fc560933dee2e5d04c2677392cc6ce',
+ './modules/Contacts/Contact.js' => 'c25c0f38cc8da0ed4dcf514593dc4015',
+ './modules/Contacts/views/view.list.php' => '0926c2683a1e47f09c90b6699022714a',
+ './modules/Contacts/views/view.validportalusername.php' => 'd931af4e4d45c3bb81f6e35d93185c10',
+ './modules/Contacts/views/view.retrieveemail.php' => '9640acc692cd227bb9eb62f5e093f5e7',
+ './modules/Contacts/views/view.mailmergepopup.php' => '48644b73c9fd9d28f577756de1047d19',
+ './modules/Contacts/views/view.edit.php' => '616587437c988dea31c3bcf6f164199a',
+ './modules/Contacts/views/view.detail.php' => 'ddc36d7454144420ca368a40d34c85d8',
+ './modules/Contacts/views/view.contactaddresspopup.php' => '5527c284f39b5b5a8f5b6442c66418e3',
+ './modules/Contacts/views/view.closecontactaddresspopup.php' => 'ea49918991a66737c59935aab4b95868',
+ './modules/Contacts/tpls/QuickCreate.tpl' => 'bc8b3245dd9829b8e3c43b368f03f535',
+ './modules/Contacts/metadata/subpanels/default.php' => 'dafdcd6f26d232719006723883815f27',
+ './modules/Contacts/metadata/subpanels/ForProject.php' => 'de0f32c9a1a9cdaa9564f24274317e85',
+ './modules/Contacts/metadata/subpanels/ForOpportunities.php' => '90e4952a5da71178ed18e33f1ddf1603',
+ './modules/Contacts/metadata/subpanels/ForMeetings.php' => '2e9a131214adb2f99710a780fb84f8ee',
+ './modules/Contacts/metadata/subpanels/ForEmails.php' => 'dc93d730f7e6c5e9aa975c0257cf532a',
+ './modules/Contacts/metadata/subpanels/ForContacts.php' => '555c8550cbc7ef6e6331679a3b25cb83',
+ './modules/Contacts/metadata/subpanels/ForCases.php' => '11977517e432f540e8818390579b50be',
+ './modules/Contacts/metadata/subpanels/ForCalls.php' => '05728178cd78cad474a8a0970b86d44c',
+ './modules/Contacts/metadata/subpanels/ForAccounts.php' => 'dc4bc95c9ab4fa1a94932f0623c6b516',
+ './modules/Contacts/metadata/subpaneldefs.php' => 'eb042ef2d0bf11346e2f593f8b41a91d',
+ './modules/Contacts/metadata/studio.php' => 'cd366f7f66c095df7ad089dc16c56dbf',
+ './modules/Contacts/metadata/searchdefs.php' => 'd14992c1c5b35bf3ea9ff33f3c412f1a',
+ './modules/Contacts/metadata/quickcreatedefs.php' => 'f3071587fe73499a7436a46c73b20dc6',
+ './modules/Contacts/metadata/popupdefsEmail.php' => 'ce9d210c9205a052bc4abd020301cf54',
+ './modules/Contacts/metadata/popupdefs.php' => '29d9a8b0823c22649d62ab00d1e0b22e',
+ './modules/Contacts/metadata/metafiles.php' => 'de7d02f5eed16516f68c430cd353bb9a',
+ './modules/Contacts/metadata/listviewdefs.php' => '45a70da06f20f60052498ff35bfc4fee',
+ './modules/Contacts/metadata/editviewdefs.php' => '2ff317404ec6cb66e3cbd33ec94db87f',
+ './modules/Contacts/metadata/detailviewdefs.php' => '75d4d4a0456df3d76f97ca46e1e1c791',
+ './modules/Contacts/metadata/additionalDetails.php' => 'c3253504941c2f8c61adb49647875de9',
+ './modules/Contacts/metadata/SearchFields.php' => 'c7ec0d2d5f13a516ec5a6898ffcefcc2',
+ './modules/Contacts/language/en_us.lang.php' => '9de3bfac54f4df57d472ba0259bc9e57',
+ './modules/Contacts/field_arrays.php' => '7979238d640cc613dcb97ef7b8369520',
+ './modules/Contacts/controller.php' => 'b2385209924456abde6cabff56a4afd5',
+ './modules/Contacts/vardefs.php' => 'ceb5a8b6dd43a21f3b8276f79d8097c4',
+ './modules/Contacts/SugarFeeds/ContactFeed.php' => '7660842c3373bb38fb4ea53066daabee',
+ './modules/Contacts/ShowDuplicates.php' => '1eab54c20a91e829674014ece2775ea0',
+ './modules/Contacts/ShowDuplicates.html' => 'c326e91ae04dfa6833ddce04ee60d769',
+ './modules/Contacts/SaveContactOpportunityRelationship.php' => '8ac7f5cbffc192f6322416d3d16bed96',
+ './modules/Contacts/Save.php' => '1b4ce85e609248a628125166c5030077',
+ './modules/Contacts/Popup_picker.php' => '4de07c7a6064d7cb6cefb2036c3b8662',
+ './modules/Contacts/Menu.php' => '8ddaf15eb43427d158a48ee8599442e3',
+ './modules/Contacts/MailMergePicker.html' => 'a8cba0cba92b774e25ead5b3f976b74c',
+ './modules/Contacts/Email_picker.html' => '78bdb107df9c0222aadaa98ae35ff69b',
+ './modules/Contacts/Dashlets/MyContactsDashlet/MyContactsDashlet.php' => 'd34a72276371f7304f99f4aab38cecee',
+ './modules/Contacts/Dashlets/MyContactsDashlet/MyContactsDashlet.meta.php' => '3044ab418bf29f2ee89b06548dad7d07',
+ './modules/Contacts/Dashlets/MyContactsDashlet/MyContactsDashlet.data.php' => '0d778c85679f45a9ae3b4a9bb7a49f49',
+ './modules/Contacts/ContactsQuickCreate.php' => '461a6331753225577ea1b5c74815a052',
+ './modules/Contacts/ContactOpportunityRelationshipEdit.php' => 'd1946dd0e5403b21bbe9733e920c7678',
+ './modules/Contacts/ContactOpportunityRelationshipEdit.html' => 'f2eeb01bb169f5bd9a43c9985473583d',
+ './modules/Contacts/ContactOpportunityRelationship.php' => '23e4e969874e613f7e55a37c4bbf96e8',
+ './modules/Contacts/ContactFormBase.php' => 'd6c1e53d1c119722feedec3c4251f7a6',
+ './modules/Contacts/Contact.php' => 'f807fed9e5e4044a84b401d705a74ae6',
+ './modules/Contacts/BusinessCard.php' => '32d5200d10e7996dd416c39a20401512',
+ './modules/Contacts/BusinessCard.html' => 'c2bfce3507bdfd8b438c67f0a9e60cde',
+ './modules/Contacts/Address_picker.html' => '7232668a97db6fa8eb87c87f0b033401',
+ './modules/Contacts/AcceptDecline.php' => '09d9c0c134fa2488bf6cc22b2b0f7257',
+ './modules/Connectors/Connector.js' => '448a920b04476b7e61ad78fc4c5c4123',
+ './modules/Connectors/views/view.sourceproperties.php' => '5f43019c57e6c94cfa0b97694662c92a',
+ './modules/Connectors/views/view.searchproperties.php' => 'b3a55332662378c058a05d75bcf00015',
+ './modules/Connectors/views/view.modifysearch.php' => 'a1c1d1b9410c593d8995bfbd4fa1f15b',
+ './modules/Connectors/views/view.modifyproperties.php' => 'ffb71afd16610191accf19caa1246d4a',
+ './modules/Connectors/views/view.modifymapping.php' => 'c46ba78f560ac98c7c634245ead59cb7',
+ './modules/Connectors/views/view.modifydisplay.php' => 'd317001974987b5783a313b102a89519',
+ './modules/Connectors/views/view.mappingproperties.php' => '332325d9ec58a2e269a1773086c64468',
+ './modules/Connectors/views/view.displayproperties.php' => '031a0fb4f29803b4aaa55bdf19160cd3',
+ './modules/Connectors/views/view.connectorsettings.php' => 'b8a5bcb2dd0688d4cb51f169d9ab9942',
+ './modules/Connectors/tpls/tabs.css' => 'cdac9cfd5fb156606b441ec785bc677f',
+ './modules/Connectors/tpls/source_properties.tpl' => '7f469c2832dd3dba7a14fdbb23ae1302',
+ './modules/Connectors/tpls/search_properties.tpl' => 'a2f98440eb1dcb34dd0a465a6409b1cd',
+ './modules/Connectors/tpls/search_form.tpl' => 'e69676baf219ad0e51cc2265a6503fe9',
+ './modules/Connectors/tpls/modify_search.tpl' => 'c2ffa75bfd81a2e53c89fa4cc2ecdf2e',
+ './modules/Connectors/tpls/modify_properties.tpl' => '1f18a624b7123d56d93aa03ba8f99f57',
+ './modules/Connectors/tpls/modify_mapping.tpl' => '2559ca3fb736e336e4776300099c1fc2',
+ './modules/Connectors/tpls/modify_display.tpl' => '4c578aecdf3b8194d9f4b62b1b53ae4d',
+ './modules/Connectors/tpls/mapping_properties.tpl' => 'bca2954c7d96ba94ad4fd3c107348854',
+ './modules/Connectors/tpls/listview.tpl' => '4264ad6abd2ae56dbb0eea70300f7b63',
+ './modules/Connectors/tpls/display_properties.tpl' => 'b91385de219f5edb96681477869c088c',
+ './modules/Connectors/tpls/administration.tpl' => '5593390a3a543f00dc7abb6fd6582349',
+ './modules/Connectors/metadata/searchdefs.php' => 'ac41e08a95787079b76e1b4214b48536',
+ './modules/Connectors/language/en_us.lang.php' => '7de2c6735b830221701cae546e0b0688',
+ './modules/Connectors/controller.php' => '6b664c1df209c9ec3c50807cad2ea55c',
+ './modules/Connectors/connectors/sources/ext/rest/linkedin/vardefs.php' => 'f58cabfef259cdfdd1c7f5c451579e9f',
+ './modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php' => 'bdcb08f59c7f7190c89d522f8a8eb1bd',
+ './modules/Connectors/connectors/sources/ext/rest/linkedin/linkedin.php' => '02d33b07337483103e4ed86c4fbafcf2',
+ './modules/Connectors/connectors/sources/ext/rest/linkedin/language/en_us.lang.php' => 'a28f344139465e4d57275f2b3c1462d9',
+ './modules/Connectors/connectors/sources/ext/rest/linkedin/config.php' => 'de7e0716993ecb8a65438c0ca6c57d8a',
+ './modules/Connectors/connectors/formatters/ext/rest/twitter/tpls/twitter.gif' => '025ad081fbafed4577cc09c9eddb9a8d',
+ './modules/Connectors/connectors/formatters/ext/rest/linkedin/tpls/linkedin.gif' => '3440ba160f32d8eb17a5b2ed03be60c6',
+ './modules/Connectors/connectors/formatters/ext/rest/linkedin/tpls/default.tpl' => 'b04c46cb0025aeecc37a13119b45f3e1',
+ './modules/Connectors/connectors/formatters/ext/rest/linkedin/linkedin.php' => 'e5f3dc4e58123f2ed7c45e49c13cca2a',
+ './modules/Connectors/action_view_map.php' => 'c7c6db82bfb2579b3e1cf60d32c60122',
+ './modules/Connectors/Menu.php' => '6dc050c32fc631c5f5835272a95ca16e',
+ './modules/Connectors/InstallDefaultConnectors.php' => '134be513282c4d9c24bbb95b645b1c67',
+ './modules/Connectors/Forms.php' => 'e773d1cb9319008bb56c2522ab5021c4',
+ './modules/Connectors/ConnectorRecord.php' => 'ab7b51444082460d55cb5f62dd83a716',
+ './modules/Configurator/views/view.sugarpdfsettings.php' => 'dde9cc7d75d3f19f8ebc4358154b0ce3',
+ './modules/Configurator/views/view.fontmanager.php' => '89fc1754f7943bbab734a64f0786e5b1',
+ './modules/Configurator/views/view.edit.php' => '1cb57776f2d139bed2b0088f30ccde02',
+ './modules/Configurator/views/view.adminwizard.php' => '6826936013bd84bcacf9e11337354ab7',
+ './modules/Configurator/views/view.addfontview.php' => '1465d6c0ee67ce9ee85e8b94abcf751a',
+ './modules/Configurator/views/view.addfontresult.php' => 'a22a73b6b915a13dce62431a27160a89',
+ './modules/Configurator/tpls/fontmanager.tpl' => '45f58b42e0a31f0ce33be60e420155e1',
+ './modules/Configurator/tpls/adminwizard.tpl' => 'afc0eac0c32019a82dab648f1619606d',
+ './modules/Configurator/tpls/addFontView.tpl' => '730f5df9fcf9b30c3cb9aa58d0045c7b',
+ './modules/Configurator/tpls/addFontResult.tpl' => '0788b5174905d3013feb14f7ec4381be',
+ './modules/Configurator/tpls/SugarpdfSettingsFields.tpl' => '7a8b844ca3e554a8050ffc9a4bdbb294',
+ './modules/Configurator/tpls/SugarpdfSettings.tpl' => '186fed1d7dffb54c8319d439d63c35de',
+ './modules/Configurator/tpls/EditView.tpl' => '8bc868d1724ef38a042f93d3acbcebd6',
+ './modules/Configurator/metadata/SugarpdfSettingsdefs.php' => 'd9b13b9d6b0ef655942d094d116f509d',
+ './modules/Configurator/language/en_us.lang.php' => '5d121c096948caf0675e743dafcba16f',
+ './modules/Configurator/controller.php' => '8304c1c649cb5549328ab56b406045b3',
+ './modules/Configurator/UploadFileCheck.php' => '9ea5cae1af2a1f9eec3bb6b48945dc27',
+ './modules/Configurator/action_view_map.php' => '5ae1cc06862e145e7726734cfd89d9a2',
+ './modules/Configurator/Menu.php' => 'f978c89aacc457107486e53fe5768f80',
+ './modules/Configurator/LogView.php' => '77668af21cdf1132cbbff065419e56c0',
+ './modules/Configurator/Forms.php' => 'a904600913c726e07c3ae5d7c81a9803',
+ './modules/Configurator/Configurator.php' => 'bf225a3445d6fb2111756c04e223311b',
+ './modules/Charts/DynamicAction.php' => '006d59c830fae1d8d2f61e66936dcb28',
+ './modules/Charts/language/en_us.lang.php' => '35fb7000f67e1a0a80e4082e07eee3ee',
+ './modules/Charts/code/predefined_charts.php' => '26bb40f32bad05579ed73a87e07c3c32',
+ './modules/Charts/code/Chart_pipeline_by_sales_stage.php' => '6ddf4d467fbf5f66796fcc961e8df518',
+ './modules/Charts/code/Chart_pipeline_by_lead_source.php' => '7dfd55d4b930670002fee0f0e62e8c40',
+ './modules/Charts/code/Chart_outcome_by_month.php' => '725b9cd7b67a7ad88d266065a90e8add',
+ './modules/Charts/code/Chart_my_pipeline_by_sales_stage.php' => '801b0f178cd47f2e25eff2f7ab9da185',
+ './modules/Charts/code/Chart_lead_source_by_outcome.php' => '52f6db752fe424c66980c71d788dc480',
+ './modules/Charts/chartdefs.php' => '9abdf4acefb1bf18df7d12cc9edb1ed1',
+ './modules/Charts/PredefinedChart.php' => 'd72fef32d4b54638fd16f2f2a9f0780d',
+ './modules/Charts/Dashlets/PredefinedChartDashletScript.tpl' => 'a6cb84b6eb49a5a777bd84179f3d7fb3',
+ './modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.php' => '0a3fb878b1dc6750d8978c9534f13ef9',
+ './modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.meta.php' => '596379d45a15cbfcab6df35fa7aea504',
+ './modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.en_us.lang.php' => '1cfcb557f086058718227e063fb51174',
+ './modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageDashlet.data.php' => '6fa623f04ca10da8cd5daa927308920c',
+ './modules/Charts/Dashlets/PipelineBySalesStageDashlet/PipelineBySalesStageConfigure.tpl' => '4c26515a8f4654ff635cec79d87fa18b',
+ './modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.php' => 'e79d8cbc1b3e709c1bd4e238c37d36ce',
+ './modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.meta.php' => 'eb83981e07033343210913c8552e98cb',
+ './modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.en_us.lang.php' => 'ad28142c5393a17c71b561466a09509a',
+ './modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthDashlet.data.php' => '320e1e77b43d882254febbbc151d15ac',
+ './modules/Charts/Dashlets/OutcomeByMonthDashlet/OutcomeByMonthConfigure.tpl' => '387bdbb2e000cd674ff76919f6e0d334',
+ './modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.php' => 'ad404e86d38ea1f603fa7fd79b58db55',
+ './modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.meta.php' => '1b0aef72159327751b70f28d56348a3b',
+ './modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.en_us.lang.php' => '31b731d78ef6ff8fc6c1ae685e65bd5b',
+ './modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceDashlet.data.php' => 'b57e760d1e0be35e53cec4290d54a80d',
+ './modules/Charts/Dashlets/OppByLeadSourceDashlet/OppByLeadSourceConfigure.tpl' => '26e1153049e0ec20b9b6092d1c274f37',
+ './modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.php' => 'e2b735735dbbfd483e6a2257756ac45c',
+ './modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.meta.php' => 'f410571259098d9c5351df98fe586a58',
+ './modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.en_us.lang.php' => 'f7f11fcc59acfc96595206d38442773d',
+ './modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeDashlet.data.php' => 'd8337b4ff674acf896f15aa59598cf81',
+ './modules/Charts/Dashlets/OppByLeadOutcomeDashlet/OppByLeadOutcomeConfigure.tpl' => '431b0d628ad92789389e58ba84f3715c',
+ './modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.php' => 'f470b9e8c9959ea9409c73a8ea0d2d65',
+ './modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.meta.php' => '80a6fb7ae30d669bbde56b908907d381',
+ './modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.en_us.lang.php' => 'af53f692afb8c957a29ebc997d034cc5',
+ './modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageDashlet.data.php' => '69ac6d4207accac35af17dc7faea66ef',
+ './modules/Charts/Dashlets/MyPipelineBySalesStageDashlet/MyPipelineBySalesStageConfigure.tpl' => '37eafb5d1b8ef3df4e074a7d672f32dd',
+ './modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.php' => 'ddf0a69768bc1b44bd0aaa2008b5f720',
+ './modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.meta.php' => '6b2964ec3b17a25ed8dfdcb61492f913',
+ './modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.en_us.lang.php' => '4851b79a0581975e1b4e78aa4676e82b',
+ './modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartDashlet.data.php' => 'c8da14210aa4478fa84d9ed10f215349',
+ './modules/Charts/Dashlets/CampaignROIChartDashlet/CampaignROIChartConfigure.tpl' => 'e2f8e61a236a9f10a44909accac0777b',
+ './modules/Cases/vardefs.php' => 'c7659b74521095cb41152d2b494ed1af',
+ './modules/Cases/tpls/QuickCreate.tpl' => '797858191cb07c7ca91d09fd93126694',
+ './modules/Cases/metadata/subpanels/default.php' => '3c1eba43b601bd86dd4c7b8703d2a46f',
+ './modules/Cases/metadata/subpanels/ForEmails.php' => '6facba33a069dc4ee000b6dcc358058a',
+ './modules/Cases/metadata/subpanels/ForAccounts.php' => 'a1bfe3a4423771972a2a3773e8caa1ec',
+ './modules/Cases/metadata/subpaneldefs.php' => 'd137d32a50230212d86792f2776edf68',
+ './modules/Cases/metadata/studio.php' => '11e821aac94c253d481d5a7be2a8a662',
+ './modules/Cases/metadata/searchdefs.php' => '467c870d47f30abe975501354935a2eb',
+ './modules/Cases/metadata/quickcreatedefs.php' => '027b0adfdcf631f290d51db06b8a991e',
+ './modules/Cases/metadata/popupdefs.php' => '944fabacbbbb5e1b7c8108e7dced46c0',
+ './modules/Cases/metadata/listviewdefs.php' => 'fbaffa79fc817cc6bacab216cd98e37b',
+ './modules/Cases/metadata/editviewdefs.php' => '9c7b9d83c0b7410112dcac58fb8c6100',
+ './modules/Cases/metadata/detailviewdefs.php' => '456060728ba6c23a7c21fca8eff48234',
+ './modules/Cases/metadata/additionalDetails.php' => 'b5fdd019a481f19c1ce2eca6791857f3',
+ './modules/Cases/metadata/accountsquickcreatedefs.php' => '3356167b784bbcbb3eaabf31fd2b6f3f',
+ './modules/Cases/metadata/SearchFields.php' => 'efc6859977ba842d18c2942a5a230f95',
+ './modules/Cases/language/en_us.lang.php' => 'a1f9017806b75f77a704736b8280bcb8',
+ './modules/Cases/field_arrays.php' => '3b9c8352d892a4e19ca7ff5005a85f30',
+ './modules/Cases/SugarFeeds/CaseFeed.php' => 'b9d038b0508335b872b2df25574140df',
+ './modules/Cases/Menu.php' => '86f7bab5fd40631e0565b376c201a5b0',
+ './modules/Cases/Dashlets/MyCasesDashlet/MyCasesDashlet.php' => '994eb878596fa41a8e14744d18cf8b46',
+ './modules/Cases/Dashlets/MyCasesDashlet/MyCasesDashlet.meta.php' => 'cb8284529059186a4c16765170ddff96',
+ './modules/Cases/Dashlets/MyCasesDashlet/MyCasesDashlet.data.php' => 'eb93b8b1caa0cfe15eaae4212014daed',
+ './modules/Cases/CasesQuickCreate.php' => 'b879a8dcfbf3a942dce6fb262c823d74',
+ './modules/Cases/Case.php' => 'f2962240f2d093a7f47f5d1615dea6fa',
+ './modules/Campaigns/DetailView.js' => '9c71b63bea528bbf482fac49f0e38113',
+ './modules/Campaigns/WebToLead.js' => 'da75713a096d89079d4ff82ebc385c7e',
+ './modules/Campaigns/wizard.js' => 'f53e95ad336d9649168d18c5c6c4319b',
+ './modules/Campaigns/views/view.newsletterlist.php' => '2015b9de130f1e78e94eedca04893be3',
+ './modules/Campaigns/views/view.modulelistmenu.php' => '1751b4ef7f8b269f3b0af2d19f488e2f',
+ './modules/Campaigns/views/view.detail.php' => 'af18d9f32a40b17ee42d7eab081cf2b7',
+ './modules/Campaigns/views/view.classic.php' => 'c21fffc7f64f157157aa94b046b98d5f',
+ './modules/Campaigns/vardefs.php' => 'd0278b4d89bb664c57f676d72787458e',
+ './modules/Campaigns/utils.php' => '9dac051dd98e886c7e8dcfb07f5f5747',
+ './modules/Campaigns/tpls/WizardNewsletter.tpl' => 'b5269b70c8f7dce81302806d37308738',
+ './modules/Campaigns/tpls/WizardHomeStart.tpl' => 'b2c166db9c1b6d84f5e06fda0906d002',
+ './modules/Campaigns/tpls/WizardCampaignTracker.tpl' => 'b99769ad295f43da1955b4f5ca99d6c8',
+ './modules/Campaigns/tpls/WizardCampaignTargetListForNonNewsLetter.tpl' => 'c0e4dbb5ac73d179ca47beb48da1ca5e',
+ './modules/Campaigns/tpls/WizardCampaignTargetList.tpl' => '97ac788a3940113c7449916b0966a66b',
+ './modules/Campaigns/tpls/WizardCampaignHeader.tpl' => 'cd06160635248ed576d795547568dfe9',
+ './modules/Campaigns/tpls/WizardCampaignBudget.tpl' => '1ce4df30bbad4f8449aea58b6bffe3a7',
+ './modules/Campaigns/metadata/subpanels/default.php' => 'ccd38c1082a6bc4fbda39b830ef6a13e',
+ './modules/Campaigns/metadata/subpanels/ForEmailMarketing.php' => '8acc990d657f278da67a12d19840a2a2',
+ './modules/Campaigns/metadata/subpaneldefs.php' => '7a8cedd24d8a05f422bc57d1fcaa27c3',
+ './modules/Campaigns/metadata/studio.php' => '141bd1ea7d7209a4d349fdc8ba795d38',
+ './modules/Campaigns/metadata/searchdefs.php' => 'cd57f35951f25372ed5317aab5f2c74e',
+ './modules/Campaigns/metadata/popupdefs.php' => 'b73f6ffbd1768594c157645e88d495dc',
+ './modules/Campaigns/metadata/listviewdefs.php' => 'ae1c799286ec57c7b997608036c89013',
+ './modules/Campaigns/metadata/editviewdefs.php' => '5974e03290fce92dfab03fdaf67ae0ee',
+ './modules/Campaigns/metadata/detailviewdefs.php' => '6e53e967b9a001f0b85bcc2dba94eb3c',
+ './modules/Campaigns/metadata/additionalDetails.php' => 'dadbd74bc0e5c908e63786758b706d17',
+ './modules/Campaigns/metadata/SearchFields.php' => 'a9fcb8e72d83353cb2f39af139b30492',
+ './modules/Campaigns/language/en_us.lang.php' => 'c35bb1c0ec0cb28f3680db743939527a',
+ './modules/Campaigns/image.php' => '3fcaeccb6fd036d4b250be1f030ae4a9',
+ './modules/Campaigns/field_arrays.php' => '933825db8adca7af782b2dc8104e36cc',
+ './modules/Campaigns/controller.php' => '241be0ccc9559c9a86c941cb6c961589',
+ './modules/Campaigns/chart.tpl' => '323ee5c2992ae57303a540ba97ae9a4b',
+ './modules/Campaigns/action_file_map.php' => 'fa8777d95f02d8105263d70f2d0856c7',
+ './modules/Campaigns/WizardNewsletterSave.php' => '380e4d734a2bf0d7a03101fc98b19597',
+ './modules/Campaigns/WizardNewsletter.php' => '0a31e62d9373465c8b261ca4bca9bfbc',
+ './modules/Campaigns/WizardNewsletter.html' => '005541645fa95275b0a607e1beff83af',
+ './modules/Campaigns/WizardMarketingSave.php' => '74336fd83c554fa45c81dfcbac6d2c1d',
+ './modules/Campaigns/WizardMarketing.php' => '46ba7cdcface748a224e1188a7dbd71e',
+ './modules/Campaigns/WizardMarketing.html' => '9c790a08a611ef353b29108fc7619f49',
+ './modules/Campaigns/WizardHome.php' => '5ba81d74b4a335f4f8bf9d5706e125a9',
+ './modules/Campaigns/WizardHome.html' => '546c0d6b0954c035a7109927b77e6565',
+ './modules/Campaigns/WizardEmailSetupSave.php' => '374734a4576af66f12c5698d80f48867',
+ './modules/Campaigns/WizardEmailSetup.php' => '6459fad4a6876e6b31da710d4eb07e6d',
+ './modules/Campaigns/WizardEmailSetup.html' => 'e0d0ed0cc9f4bbb7e188118aa5365dfb',
+ './modules/Campaigns/WebToLeadFormSave.php' => '266c2ee48c66ea479c6a3ae1e0bf34d8',
+ './modules/Campaigns/WebToLeadForm.html' => 'd5b07a69b1f449361777d289323bb3e5',
+ './modules/Campaigns/WebToLeadDownloadForm.html' => '0dad56489a4f4ee750ece5fb5a39c87b',
+ './modules/Campaigns/WebToLeadCreation.php' => 'fe2eb3bf194f8e0657531aa3b6c9837d',
+ './modules/Campaigns/WebToLeadCreation.html' => '2bc9da494178149c4f9c96eac5964392',
+ './modules/Campaigns/WebToLeadCapture.php' => '8165676b95d18de0c07aac4970e7dad5',
+ './modules/Campaigns/Tracker.php' => '88f83ca5e269791b2672e041484d018a',
+ './modules/Campaigns/TrackDetailView.tpl' => 'ccc80278e8a3043169831651120a28f8',
+ './modules/Campaigns/TrackDetailView.php' => 'dcc740690b11ec19085065c5d4415e44',
+ './modules/Campaigns/Subscriptions.tpl' => 'c4c0ce84e79bc1cb51cf675e1d78e940',
+ './modules/Campaigns/Subscriptions.php' => '5ab4f874103d5b4a2885b5bc86a42d88',
+ './modules/Campaigns/Subscriptions.html' => 'c48c2e2ee5ad0a6d71d9bd3d424e311b',
+ './modules/Campaigns/SubPanelViewer.php' => '685d8a558a788f75783c2fe27b0163b8',
+ './modules/Campaigns/SearchForm_NewsLetter.html' => 'b63e7dff9a0bd5821d9edc4afca44700',
+ './modules/Campaigns/Schedule.php' => '66284d35a57831c6970c503b48e70c9d',
+ './modules/Campaigns/Schedule.html' => '0a8fcc4b6f67cf99dab1efb104bba071',
+ './modules/Campaigns/Save.php' => '5cc149ddf1dc50ce8ebe13893615417a',
+ './modules/Campaigns/RoiDetailView.tpl' => '2cb5ff9612b303b9b83708b9584d958c',
+ './modules/Campaigns/RoiDetailView.php' => 'f52966766f1c651fdc9be9cbf8ac6eef',
+ './modules/Campaigns/RemoveMe.php' => '101b10e4dfbc2ded6217050feab4061d',
+ './modules/Campaigns/QueueCampaign.php' => '2339dd5a8e48272dc23edb41dd329af7',
+ './modules/Campaigns/ProcessBouncedEmails.php' => '0646fc980371a2060a816bcb73903853',
+ './modules/Campaigns/Popup_picker.php' => '16904e33546e9e4f7c831c3b47ad7f10',
+ './modules/Campaigns/Popup_picker.html' => '98b49c1bbf13fc6c83007ab48f978a42',
+ './modules/Campaigns/PopupCampaignRoi.php' => 'b524b8d0e13b50886519077673ceb34f',
+ './modules/Campaigns/PopupCampaignRoi.html' => 'e6fce810a3f3191cd0ca321c2fea0159',
+ './modules/Campaigns/Menu.php' => 'ed5ab9b80037a9013a96ebdbe23a38db',
+ './modules/Campaigns/MailMerge.php' => 'f875b21b8c8f5e60d256a09558f17799',
+ './modules/Campaigns/GenerateWebToLeadForm.php' => '56437b51720d89222126161b881e2672',
+ './modules/Campaigns/EmailQueue.php' => '79151d29eef076a928194529519f530f',
+ './modules/Campaigns/Delete.php' => 'aae524b404a661c8ff3709219a1f9712',
+ './modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashletConfigure.tpl' => '85a1f82b9edf6d5c867fdbb49b645cda',
+ './modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashlet.tpl' => 'c2f9905521e83c1af638f83e4988fc67',
+ './modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashlet.php' => 'ec101f3befe73ca359fae4f6251c6d26',
+ './modules/Campaigns/Dashlets/TopCampaignsDashlet/TopCampaignsDashlet.meta.php' => '6da4b31958931a8f5138fecb7925b7c4',
+ './modules/Campaigns/Charts1.php' => '3e0262e983a12a06565b6865be74670a',
+ './modules/Campaigns/Charts.php' => '9199f1b68c7a79fdddf26859fb07bc33',
+ './modules/Campaigns/CaptchaValidate.php' => 'ba5f2ca64c8efd231363692da67be91a',
+ './modules/Campaigns/CampaignDiagnostic.php' => '3a22574096c9a30c12332d6c666bb7cc',
+ './modules/Campaigns/CampaignDiagnostic.html' => '8fab01d12a48e429496c63d383fbbb88',
+ './modules/Campaigns/Campaign.php' => '1ec8c6e4a91c517b60354f67647e74b1',
+ './modules/CampaignTrackers/vardefs.php' => 'f3a7c681ec09bbbb2e5771494acaf0ce',
+ './modules/CampaignTrackers/metadata/subpanels/default.php' => 'be3e6ba5ec9b5d8fa840aa0e96bda115',
+ './modules/CampaignTrackers/language/en_us.lang.php' => 'de5f4597b9f33db1aa92383f631a82f4',
+ './modules/CampaignTrackers/Save.php' => '45d01ff1f43f76e58d5b9679adc67fdf',
+ './modules/CampaignTrackers/Menu.php' => '757e41606b50ef3bd765688c58da6ab6',
+ './modules/CampaignTrackers/Forms.php' => '1cfbf63c2df97772313450ef33f404c2',
+ './modules/CampaignTrackers/Forms.html' => 'fba11af98aec13a0240fdb1995649fab',
+ './modules/CampaignTrackers/EditView.php' => '1cd0eba6aecfdb1d2a2e610d2d64d3f4',
+ './modules/CampaignTrackers/EditView.html' => '080d867a1b0fac32edbbffc2a1d565e9',
+ './modules/CampaignTrackers/DetailView.php' => '4ef4d9972013f7790404a43d3f3b19c3',
+ './modules/CampaignTrackers/DetailView.html' => '4f5b76bc757284ac2a7dc029d733496d',
+ './modules/CampaignTrackers/CampaignTracker.php' => 'eaf4cb5ad33c4cd5aa497d94a89188de',
+ './modules/CampaignLog/vardefs.php' => '6d64865931155de64f176d507ba0ac30',
+ './modules/CampaignLog/metadata/subpanels/default.php' => 'd29a247f61cf3e64cfec8c6bab63821d',
+ './modules/CampaignLog/metadata/subpanels/ForTargets.php' => 'aea0656fb66b1762d3139bf70000d101',
+ './modules/CampaignLog/language/en_us.lang.php' => '03e85595b5c4cb5b27425763e9592e76',
+ './modules/CampaignLog/Popup_picker.php' => '355e51e3620b3d03c4417b7547c2d279',
+ './modules/CampaignLog/Popup_picker.html' => '45f8b45d8730af406dddfdf19a6c7756',
+ './modules/CampaignLog/Menu.php' => '72cee4346bd510cecbc46485b04ade14',
+ './modules/CampaignLog/CampaignLog.php' => 'ba7bff8e1cbbfbbc4cd511e1ff63935f',
+ './modules/Calls/views/view.edit.php' => '2de3014f25fd6bb22f2657ddf6d94d43',
+ './modules/Calls/vardefs.php' => '35b6a6a0024b522fbf9645f762972ea4',
+ './modules/Calls/tpls/footer.tpl' => '6082af4d775df02784dc2e6038cc1cbf',
+ './modules/Calls/tpls/QuickCreate.tpl' => 'd3152acfc1a288743f3a617d1051334c',
+ './modules/Calls/metadata/subpanels/default.php' => '69cc2557c0ee5092e31e0e15dc3ccef0',
+ './modules/Calls/metadata/subpanels/ForHistory.php' => '8f647c21eee39024e543e526579ce90d',
+ './modules/Calls/metadata/subpanels/ForActivities.php' => '85ba197064ce84a95d0f863d0b42ef0a',
+ './modules/Calls/metadata/subpaneldefs.php' => '37cf3687ca0e24f995d7f3c9a998fdbe',
+ './modules/Calls/metadata/studio.php' => '6e05d6a206af3864af7b2fe2e00ce5dc',
+ './modules/Calls/metadata/searchdefs.php' => 'ed1582ec1c2f8aec4268b00b60cbeffb',
+ './modules/Calls/metadata/quickcreatedefs.php' => 'e32f8243306633414f4e5fc074c52a7c',
+ './modules/Calls/metadata/listviewdefs.php' => '89051fa7faf2c02ecc5623604fd919fe',
+ './modules/Calls/metadata/editviewdefs.php' => '16d8c43a17106fc34cd6995fd862c090',
+ './modules/Calls/metadata/detailviewdefs.php' => 'fa642df7f3da9169e36da510579fd574',
+ './modules/Calls/metadata/additionalDetails.php' => '97f403bbf8c0989ec3db860f49e6db84',
+ './modules/Calls/metadata/SearchFields.php' => '1f35a511c44a9040f634ecd9c3c222ee',
+ './modules/Calls/language/en_us.lang.php' => 'cebca26458070b491b9e459a928e6e0b',
+ './modules/Calls/field_arrays.php' => 'f4523e1742b9106acfaac6cb4f61175e',
+ './modules/Calls/SubPanelViewInvitees.php' => '5cb02de48efd780fe2c4925cbebf7237',
+ './modules/Calls/SubPanelViewInvitees.html' => '81983d6f2c7415c8602e21b33a60c896',
+ './modules/Calls/Save.php' => 'ce8a54c0bd9cb48c0d680c7873674895',
+ './modules/Calls/Menu.php' => 'e1fd861118213c1367bc3ab5df6b5cfa',
+ './modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.php' => '1a4e4aaebab7532336ee5860e931bffc',
+ './modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.meta.php' => '67b5354cb664fb2f64c7d7d4778c0f0c',
+ './modules/Calls/Dashlets/MyCallsDashlet/MyCallsDashlet.data.php' => '128bb818a9174f56cc03a574aa6f378c',
+ './modules/Calls/CallsQuickCreate.php' => '29ce9ba05e059e7c66d576a93935c1c4',
+ './modules/Calls/CallHelper.php' => 'd772215c0ab7f719711d3546d7529094',
+ './modules/Calls/CallFormBase.php' => '418352a6f8ab4c42d39789c20b1ef11b',
+ './modules/Calls/Call.php' => '9b1b2fec4fcd3e0f7ba1bb4002b0b4a1',
+ './modules/Calendar/views/view.list.php' => 'd0828a61e0acb41956f815c41e6cf609',
+ './modules/Calendar/templates/templates_calendar.php' => 'a840f71ec99db9c4dcc24d33371a7f9c',
+ './modules/Calendar/templates/template_shared_calendar.php' => 'db4237ff405a53de6c8711f69433921a',
+ './modules/Calendar/small_month.php' => '3365291aab18318106c40107d6d34dbb',
+ './modules/Calendar/metadata/listviewdefs.php' => '7a5882bd93cc1353b402b5d2542f033e',
+ './modules/Calendar/language/en_us.lang.php' => 'eea61667d4e8fb2063b9826ddfa33a82',
+ './modules/Calendar/index.php' => '8820c0fbe6db19c497a838d567137a8c',
+ './modules/Calendar/TasksListView.php' => '9bd353c2ca21b290be495aa47b6241db',
+ './modules/Calendar/TasksListView.html' => '9e88f3dfbaa5334dffa19fdb60413428',
+ './modules/Calendar/SubPanelSharedCalendar.php' => '31f7f9a358e80cdc5f5bac5a30904760',
+ './modules/Calendar/Forms.php' => 'a7fe2be5ad8ae8abbd68ce16c70c1825',
+ './modules/Calendar/Menu.php' => '9ff62f2ed70cdf0feec71ac6d7a7cd56',
+ './modules/Calendar/DateTimeUtil.php' => '65cd9a6db1d67bf825fabe9343c136a8',
+ './modules/Calendar/Calendar.php' => '10d12a54e83dce736365cb6d7fc2ef94',
+ './modules/Bugs/views/view.edit.php' => 'e2ac75d46479fe3748b11782913ec248',
+ './modules/Bugs/views/view.detail.php' => '4a33cf87111a05df094d38cead553683',
+ './modules/Bugs/vardefs.php' => '6398740b5e910547bc945b7fafe0ef35',
+ './modules/Bugs/tpls/QuickCreate.tpl' => '34574e6b44da09c734660ee3e027ff24',
+ './modules/Bugs/metadata/subpanels/default.php' => '66f7415c0f6bb180d4fa6b8099956c77',
+ './modules/Bugs/metadata/subpanels/ForEmails.php' => '74fe97a99990f83e1bd3de1a8054036e',
+ './modules/Bugs/metadata/subpaneldefs.php' => '7b8507aeaf8a489c802f68bdd26db965',
+ './modules/Bugs/metadata/studio.php' => '051b0e5dce864dec9c2a0c0279afee0f',
+ './modules/Bugs/metadata/searchdefs.php' => '36e62774c552c9706b1c4429e3437607',
+ './modules/Bugs/metadata/quickcreatedefs.php' => 'acd4c7d420aba7e8ed8769983fb13152',
+ './modules/Bugs/metadata/popupdefs.php' => 'e94d05768bb0cb4071b84aae03ab3e3c',
+ './modules/Bugs/metadata/metafiles.php' => 'eb37f1cc4850e60e296ece70506aa4fe',
+ './modules/Bugs/metadata/listviewdefs.php' => '6d7ca22bca5bcc3c8239c86830aaefe7',
+ './modules/Bugs/metadata/editviewdefs.php' => '7157e347cc165de5660354c6b67a5fe0',
+ './modules/Bugs/metadata/detailviewdefs.php' => '9465de63c8330e1fd96c2c30fab49c3e',
+ './modules/Bugs/metadata/additionalDetails.php' => '2d84911e0e5b611ebf5713106c24c6af',
+ './modules/Bugs/metadata/SearchFields.php' => 'c594a4a3436cf2f79792303faf1d4e54',
+ './modules/Bugs/language/en_us.lang.php' => 'f853c51736708c728c8baa40b2ef3b3e',
+ './modules/Bugs/field_arrays.php' => '905bf453c39714dc786f94d7f252c7f8',
+ './modules/Bugs/Menu.php' => 'f4eb9960fc4e7795d22b5d720d65e0cd',
+ './modules/Bugs/Dashlets/MyBugsDashlet/MyBugsDashlet.php' => '82f002f167c39ef796f9122d46183377',
+ './modules/Bugs/Dashlets/MyBugsDashlet/MyBugsDashlet.meta.php' => '3af77ac99657ab6d4e12ae7271644ad6',
+ './modules/Bugs/Dashlets/MyBugsDashlet/MyBugsDashlet.data.php' => '8e009899a2873cac3a1d2d48cc0de0fe',
+ './modules/Bugs/BugsQuickCreate.php' => '0ea39a55511d497bb16842e929687b28',
+ './modules/Bugs/Bug.php' => 'd8e05547c44c993d42ff4f189a45ded7',
+ './modules/BeanDictionary.php' => '2573609224ce688c56607c9450d6688e',
+ './modules/Audit/vardefs.php' => 'bb43929bc96abb7d89824a2bf1b6fe8f',
+ './modules/Audit/language/en_us.lang.php' => '00a5222fcdd00a246ca5ff6f139a6236',
+ './modules/Audit/field_assoc.php' => '9a7307afa1f8c6ebd45a2596fd44798b',
+ './modules/Audit/Popup_picker.php' => 'be9ec35605bed7b59aee3ea1c6fcdc37',
+ './modules/Audit/Popup_picker.html' => '6789fbb26a2fb173f0318eaa7aa54a2c',
+ './modules/Audit/Audit.php' => 'b24c748105c5a3787c67c3eabc834d2a',
+ './modules/Administration/views/view.languages.php' => '1cfa32f9c7f164c9163f17791d8ab848',
+ './modules/Administration/views/view.globalsearchsettings.php' => 'a5e8d3ad998f88ee347411e5b58ea8c5',
+ './modules/Administration/views/view.backups.php' => '516c2b886d0b0e7cab06b9d9a7ab30c7',
+ './modules/Administration/views/view.themesettings.php' => 'e2fc584638ded589a4a45dcce7c3737e',
+ './modules/Administration/views/view.repair.php' => 'bd8a7f2a8c082b08482954355f1a6a6d',
+ './modules/Administration/views/view.configuretabs.php' => '92e1e1ddf483fb3f9062821a7efc6809',
+ './modules/Administration/vardefs.php' => '60e43233b0b2fa7a8495a300bca6a01b',
+ './modules/Administration/upgrade_custom_relationships.php' => '025c57943e189ae2fb5793f725238001',
+ './modules/Administration/updateclass.php' => 'a317ca3f3b24fb656a999c2730f0e883',
+ './modules/Administration/updateTimezonePrefs.php' => '8a0baf4e4fdf997aa1c125c640a5232f',
+ './modules/Administration/undoupdateclass.php' => 'bb8da501b8bd927812a9cf694da79c7b',
+ './modules/Administration/templates/Languages.tpl' => 'b858359aa8fa24dd9705a07a3022a93e',
+ './modules/Administration/templates/GlobalSearchSettings.tpl' => 'af3e174b2dc44eb2d6ba6221b53655b9',
+ './modules/Administration/templates/themeSettings.tpl' => '6f9ad6507725e0caa54087efa21cec74',
+ './modules/Administration/templates/ShortcutBar.tpl' => 'fb74964e1d7bfbb1f9ad8dbe4ea07dec',
+ './modules/Administration/templates/RepairXSS.tpl' => 'a936c8f3386ac244bc600b60b0a42773',
+ './modules/Administration/templates/RepairDatabase.tpl' => 'a26068c872051ebbdd727ee5e2475a7a',
+ './modules/Administration/templates/QuickRepairAndRebuild.tpl' => '75659804131a655f3f79e628023bbba0',
+ './modules/Administration/templates/ConfigureTabs.tpl' => '5d5afb070db596dc828be765fb78cd3d',
+ './modules/Administration/repairUniSearch.php' => 'e687dbc61a6575390e985e05cbbaba1f',
+ './modules/Administration/repairSelectModule.php' => 'dbda01e72f1bb45430b700e4e143914b',
+ './modules/Administration/ncc_config.php' => 'aa5cbf334ba0430d97b0c370b5f1e83c',
+ './modules/Administration/metadata/adminpaneldefs.php' => '7415b75ef50d852c795af5714025b7a6',
+ './modules/Administration/metadata/SearchFields.php' => '4ad8c4a214135a7a1dc307aaf1576d9a',
+ './modules/Administration/language/en_us.lang.php' => 'c7c7a9d07fd42a14b8e0e1fecdf9ab1f',
+ './modules/Administration/javascript/Administration.js' => '47ab364695829994ccac9df0da22b960',
+ './modules/Administration/javascript/Async.js' => 'dbab93ac538b27db2097547870bb798d',
+ './modules/Administration/index.tpl' => 'd1f99979c433724a009c13b847a96b5e',
+ './modules/Administration/index.html' => '5faed788211b0d671bf982f89b68d339',
+ './modules/Administration/clear_chart_cache.php' => '5aaf3f5813aae9666dcb6490f12d9859',
+ './modules/Administration/callJSRepair.php' => 'e1854b35f5e12e29aa44b7effd53dfff',
+ './modules/Administration/UpgradeWizard_prepare.php' => '0a5a65e0fcb335799ccec1a0b7ef72b8',
+ './modules/Administration/UpgradeWizard_commit.php' => '391e96a960d0942100541687e8ded4ab',
+ './modules/Administration/UpgradeWizard.php' => '09e311f0515cc62200e39b535ad7ccfd',
+ './modules/Administration/UpgradeIISAccess.php' => 'f28b5f8203d1e759f9720f90137bbc1c',
+ './modules/Administration/updater_utils.php' => '626cdbf8ace9069bd1a012963e5ec481',
+ './modules/Administration/UpgradeFields.php' => '0d4606783c2ae9e605e8511a0e118191',
+ './modules/Administration/UpgradeAccess.php' => '2d8230957ce0ac95d4764956202bd2cf',
+ './modules/Administration/index.php' => '6ab549226783a8a6ad5628ab0a4c7550',
+ './modules/Administration/expandDatabase.php' => '88e6e137e945db23dcc3c3b3a1b79d38',
+ './modules/Administration/UpgradeWizardCommon.php' => '65de6441fc6d0f94ce1f5db904512626',
+ './modules/Administration/SupportPortal.tpl' => 'c2608013eda58535ad7ceaff45fbb2db',
+ './modules/Administration/Diagnostic.tpl' => 'cf1ec6c5b37859ba006458fe925bf1f1',
+ './modules/Administration/repairDatabase.php' => '0ee1055a74ed8e6936ae7fe5df0ecbe9',
+ './modules/Administration/Save.php' => '8820d9ec573f90bb107616f0e5a344b1',
+ './modules/Administration/RepairXSS.php' => '344293c69d1cfd206a81dc16f65ba903',
+ './modules/Administration/controller.php' => 'efbecd1f823622ba6c3ccb251274d277',
+ './modules/Administration/RepairSeedUsers.php' => 'aa568a6f3019b773ab86496d610ecbb6',
+ './modules/Administration/RepairJSFile.php' => '9f7634a710ea20fbcd87752ab13effb0',
+ './modules/Administration/RepairIndex.php' => '3992ab770c32db420d7fd560f2ae95d1',
+ './modules/Administration/RepairIE.php' => 'e902626f208e5a41a87cfd53c0d1fddd',
+ './modules/Administration/action_view_map.php' => '02226b63be1e133468f6047838997115',
+ './modules/Administration/UpgradeHistory.php' => '82dd740b6973fde52bafdb5e0e5f4691',
+ './modules/Administration/RebuildSchedulers.php' => 'd6830c651d51d966aa8aaf72053e49c8',
+ './modules/Administration/RebuildRelationship.php' => 'aefd2a3512ddc04ae46ad377c01d1c19',
+ './modules/Administration/RebuildJSLang.php' => '296049405f80d81f416cba73bc3c0969',
+ './modules/Administration/RebuildFulltextIndices.php' => '0a3187381e10da07834e3acb6a3577a3',
+ './modules/Administration/RebuildExpressionPlugins.php' => 'dbc337c8c58047aa0f64e79877bdf7f7',
+ './modules/Administration/RebuildDashlets.php' => 'ad5955e7b098f886da230b6228e140b3',
+ './modules/Administration/RebuildConfig.php' => 'f0cfcb9081364d92d1f5b64ad00528ef',
+ './modules/Administration/RebuildConfig.html' => 'e168d267267af1313aef423e5132ecab',
+ './modules/Administration/RebuildAudit.php' => '742edda237b3ea73675cf4a4b5414ad9',
+ './modules/Administration/QuickRepairAndRebuild.php' => '8edec44758e4622cac3ca403855a09ad',
+ './modules/Administration/PasswordManager.tpl' => 'a83bea75b5efad137994959162140dad',
+ './modules/Administration/Upgrade.php' => '30550d2d80a3bc25431344f1ea1b0c22',
+ './modules/Administration/Updater.php' => 'ac82b60037d73b1027948bcfdda1cba6',
+ './modules/Administration/SupportPortal.php' => 'aa08f5ea1a3aa708030163074cdf0089',
+ './modules/Administration/Menu.php' => 'b3d795eeb0207fd94afa809483eef0a5',
+ './modules/Administration/Locale.tpl' => '21cd1751ab0e347953cde5789ddfd65e',
+ './modules/Administration/RepairFieldCasing.php' => 'b19b00ee9fb585d0f0ed76f37474dbc9',
+ './modules/Administration/RepairActivities.php' => '3451129c5fb2238cd4474ea63ee2854c',
+ './modules/Administration/PasswordManager.php' => 'ac854237850e85bdbda11202b3134ec4',
+ './modules/Administration/ImportCustomFieldStructure.php' => '647f9b22ecd0a9c25ceafcffe44ee52b',
+ './modules/Administration/Forms.php' => '7069bf25e2ea8f0dea84f57888342ffa',
+ './modules/Administration/ExportCustomFieldStructure.php' => '96ae8db0f2bc6899ab2b64fc8172c932',
+ './modules/Administration/DstFix.php' => '055ec23e49d4e004e94af374b51ac21a',
+ './modules/Administration/DisplayWarnings.php' => '34df220bbe489ae2383d0712dd447adc',
+ './modules/Administration/DiagnosticRun.php' => 'fc7d37418eef959a335a53e2cb819e02',
+ './modules/Administration/DiagnosticDownload.php' => 'c83c765b948c58dd7c49b7bf0659bf41',
+ './modules/Administration/DiagnosticDelete.php' => 'dc08fd1ccf4dbf7eeed96b7c283d27a8',
+ './modules/Administration/Updater.html' => '04c70c9ff003335c4bea8de0382c973b',
+ './modules/Administration/Locale.php' => 'a42121cabed35bddcda16b1d07f73666',
+ './modules/Administration/Development.php' => '4c00066a4bfc60b2f2b8b5299957eb66',
+ './modules/Administration/CustomizeFields.php' => '35b0082f266f25617ed2099b9f15b228',
+ './modules/Administration/Diagnostic.php' => '2b63dd6c2b61b54e17becea02670981e',
+ './modules/Administration/Common.php' => 'a6d5797b16d8e8cccf53fc6aa84e6919',
+ './modules/Administration/Async.php' => '584be9abcffc33646555e2a3d8c7e031',
+ './modules/Administration/Administration.php' => '69f113587c5acb66659f8ac19de46d1e',
+ './modules/Activities/views/view.modulelistmenu.php' => '9efa778eae448089cb84a562f506d768',
+ './modules/Activities/views/view.list.php' => '02c5c45c2b372377b8cb6bf5b5c24899',
+ './modules/Activities/metadata/subpaneldefs.php' => '14e67382d41c1872b88fb385db9b358e',
+ './modules/Activities/language/en_us.lang.php' => '2cf2bd9f916453b28661237c5322e6b4',
+ './modules/Activities/config.php' => '3b2627039e24f44515ccdfc74ebfcc44',
+ './modules/Activities/SubPanelViewContacts.html' => '9f2971c6ce64f5c5cc7167b594220ce7',
+ './modules/Activities/SubPanelView.php' => '3eb692371455ab4315ee730ff074128d',
+ './modules/Activities/SubPanelView.html' => '441a3dac1aff1ba0c2307fbb6142310b',
+ './modules/Activities/SetAcceptStatus.php' => '56c167c5c05adb3850806573a6475e05',
+ './modules/Activities/Popup_picker.php' => '49b1309a0a5253f2c129b03e81c29447',
+ './modules/Activities/Popup_picker.html' => 'a47cea076ad0cf062049f81bf6c0671f',
+ './modules/Activities/OpenListView.php' => '7f437aabb36cb3095afc755dd2d6151f',
+ './modules/Activities/OpenListView.html' => '602ec3f7ea1feb0015d8db34cee32175',
+ './modules/Activities/Menu.php' => '7c068e6241e35dfccf6adf5a3ed66a7a',
+ './modules/Activities/Forms.php' => '8cb762e9eb0ed07d33a25fcfce415d0e',
+ './modules/Accounts/Account.js' => 'aaadd93f63957d23c664defeeb4974a4',
+ './modules/Accounts/views/view.list.php' => '640d1efee8cbd6d341551888e616302a',
+ './modules/Accounts/views/view.detail.php' => '1db788034f47c0f7acf536cbda3d1e5c',
+ './modules/Accounts/vardefs.php' => '2ccb7872aa489baa97cc45b4b009cd02',
+ './modules/Accounts/tpls/QuickCreate.tpl' => 'af5def51e0cf961b8bdb37e81d292b94',
+ './modules/Accounts/metadata/subpanels/default.php' => '5d06b046d9953c23a18b2b65cdb2b06b',
+ './modules/Accounts/metadata/subpanels/ForProspectLists.php' => '2c2510cc71ae4fef661e52e9ba71a005',
+ './modules/Accounts/metadata/subpanels/ForEmails.php' => 'd01a68523d5f403deb8f365f81e59d67',
+ './modules/Accounts/metadata/subpaneldefs.php' => '68279085f4821bf2cac4be2f34c7106c',
+ './modules/Accounts/metadata/studio.php' => '60b423a0edb569abd941710ca3383438',
+ './modules/Accounts/metadata/searchdefs.php' => '98e718406aa9654f709f87dfcb643f05',
+ './modules/Accounts/metadata/quickcreatedefs.php' => '8126f101291cd19f2546c5fc2bd724fd',
+ './modules/Accounts/metadata/popupdefs.php' => 'a14dbb8989162637577dc18fb75e2501',
+ './modules/Accounts/metadata/metafiles.php' => '0563265a72e7938964052220f440019d',
+ './modules/Accounts/metadata/listviewdefs.php' => 'e98b01acea18e487334a94e7117fd38a',
+ './modules/Accounts/metadata/fieldGroups.php' => 'e773d1cb9319008bb56c2522ab5021c4',
+ './modules/Accounts/metadata/editviewdefs.php' => 'b6368fe684631549be229924278ecea7',
+ './modules/Accounts/metadata/detailviewdefs.php' => 'e8cb94fd84edcf11f1c6115abc057a52',
+ './modules/Accounts/metadata/additionalDetails.php' => '47166be7d697144cca990a877b05375e',
+ './modules/Accounts/metadata/acldefs.php' => '8b931397415eb8cdc913a163c207cf9e',
+ './modules/Accounts/metadata/SearchFields.php' => 'c5bbe8c8bbf3abfd68e180ab1707d743',
+ './modules/Accounts/language/en_us.lang.php' => '38e5b559daa2bc85753db511b6549eb9',
+ './modules/Accounts/field_arrays.php' => '106c36b4c76a9be3cc79fcc93c740536',
+ './modules/Accounts/ShowDuplicates.php' => '20f5314b5d295100748fe56e330f03e8',
+ './modules/Accounts/ShowDuplicates.html' => 'e7e020a2998798b0035d4274d91ee6ff',
+ './modules/Accounts/Save.php' => '97cd93a301ffd3f067420b583f5c9606',
+ './modules/Accounts/Popup_picker.html' => '1bde804fee020802014194059f937976',
+ './modules/Accounts/Menu.php' => '99cbaac77be307095e364b76f6bb1b00',
+ './modules/Accounts/Dashlets/MyAccountsDashlet/MyAccountsDashlet.php' => '3a3af600ce95426444c110954e0a5550',
+ './modules/Accounts/Dashlets/MyAccountsDashlet/MyAccountsDashlet.meta.php' => '03f72a153c4075edddc3ba3ce7be9fba',
+ './modules/Accounts/Dashlets/MyAccountsDashlet/MyAccountsDashlet.data.php' => 'c82b508ee4f8f2368a755262dfec3964',
+ './modules/Accounts/AccountsQuickCreate.php' => '753f5606d9517aa9d1905dfa9b3f38ea',
+ './modules/Accounts/AccountFormBase.php' => '61c19c1c1e91292db336a74fa92da84b',
+ './modules/Accounts/Account.php' => 'b763b482d669dd38167c682e57c8b2c6',
+ './modules/ACLRoles/ACLRoles.js' => '0bd3ee68360d56e1d30c308a3e41aee6',
+ './modules/ACLRoles/views/view.list.php' => '3322a80f428bd1e850cdf0a7cff465bf',
+ './modules/ACLRoles/vardefs.php' => '74b07d76833db7fe1de3135940326f14',
+ './modules/ACLRoles/popup.tpl' => '3dfda18f986393f5b48e007573b24c72',
+ './modules/ACLRoles/metadata/subpanels/default.php' => '1f1796d75be2ba7c12707168f8e8b0f5',
+ './modules/ACLRoles/metadata/subpanels/admin.php' => '3542104728fc157a481e742e7c4f1ea5',
+ './modules/ACLRoles/metadata/subpaneldefs.php' => 'b331d588a8e29a1eee6fd3cf88964c6e',
+ './modules/ACLRoles/metadata/searchdefs.php' => '34d0cde4c0da69f86c71203d4a122bb0',
+ './modules/ACLRoles/metadata/popupdefs.php' => 'fcbc192e90e3c3c1413c9bc2e70bf387',
+ './modules/ACLRoles/metadata/listviewdefs.php' => '502ff91ae4c2307645d1a0400a30b606',
+ './modules/ACLRoles/metadata/SearchFields.php' => '611839f897c04352be3c04a520255ea8',
+ './modules/ACLRoles/language/en_us.lang.php' => '8b9830b485b9b81c80c6965ff013c1af',
+ './modules/ACLRoles/Save.php' => '96a53590c707b0d49acb6868523f1c35',
+ './modules/ACLRoles/Popup_picker.php' => '0746d71f28fc3079e04882890af40375',
+ './modules/ACLRoles/Popup_picker.html' => '770647d71db7a99f56a9a49d220d6e70',
+ './modules/ACLRoles/Menu.php' => '81d7c462edd2f34ef74afdb1e7d0c80e',
+ './modules/ACLRoles/ListUsers.php' => 'b1aa49e880af4f2eba3fcbe768f0ada0',
+ './modules/ACLRoles/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/ACLRoles/EditViewBody.tpl' => 'b14fe85dd531ebcae5ffe2544e3dce8a',
+ './modules/ACLRoles/EditView.tpl' => 'd4e46bbab0273ccbd0cbdcc2dbed3f9d',
+ './modules/ACLRoles/EditView.php' => '913812dcb3b030f4210ac9d74d69720a',
+ './modules/ACLRoles/EditRole.tpl' => '2351443b01ebeffcd46a4d36fbc38a72',
+ './modules/ACLRoles/EditRole.php' => '4adb16d298a49f87702c9479f833754e',
+ './modules/ACLRoles/EditAllBody.tpl' => 'ae4adc42ac97354c095c29b10d85b51f',
+ './modules/ACLRoles/DetailViewUser.tpl' => '657b774282f68fc37dc8c8d8b9b77751',
+ './modules/ACLRoles/DetailViewBody.tpl' => 'bd46bb5d18ae394f19ff7e9aec909beb',
+ './modules/ACLRoles/DetailView.tpl' => '91dce288c76628529a523c80425c6bf0',
+ './modules/ACLRoles/DetailView.php' => 'ef51f8b1296deebfe6271ba2ccd34132',
+ './modules/ACLRoles/DetailUserRole.php' => '00f1101abf19e5e012b5c9c06dc75cd0',
+ './modules/ACLRoles/Delete.php' => '52df20fce849f424f27eaf23dad7d166',
+ './modules/ACLRoles/ACLRole.php' => '80ba5c9f82fbf1161e0da056c5a6737e',
+ './modules/ACLActions/vardefs.php' => '56901797986eb3077d243e42f7c07b27',
+ './modules/ACLActions/metadata/subpaneldefs.php' => '44fde78af7fc63c493207f50a84cfb0c',
+ './modules/ACLActions/language/en_us.lang.php' => 'e02750afad49f3660d697497767c8460',
+ './modules/ACLActions/actiondefs.php' => '260cf35c9f8f54a3bd901205c957ae15',
+ './modules/ACLActions/Menu.php' => '4e419af53d8e00ec63e6b54d25d4607f',
+ './modules/ACLActions/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/ACLActions/ACLAction.php' => 'f673ef7bced8513bf68431771800fb2e',
+ './modules/ACL/vardefs.php' => 'a0bb6947c5dd41edd02000f4fa3583e4',
+ './modules/ACL/remove_actions.php' => '1d521e3e7b37b81fb05a24c7f7eb0709',
+ './modules/ACL/metadata/subpaneldefs.php' => '44fde78af7fc63c493207f50a84cfb0c',
+ './modules/ACL/language/en_us.lang.php' => '370abfe5b94cd3997332aebb6f73bec5',
+ './modules/ACL/install_actions.php' => 'a02b58a42ce84ab7318a720426edae39',
+ './modules/ACL/Save.php' => '17f5017f24502538bbbf399128e74111',
+ './modules/ACL/Menu.php' => '4e419af53d8e00ec63e6b54d25d4607f',
+ './modules/ACL/List.php' => '863a968e6e27b80fc2501120c1683994',
+ './modules/ACL/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './modules/ACL/ACLJSController.php' => 'a8cefd0b088bae46168acbf514b6ce74',
+ './modules/ACL/ACLController.php' => 'a7ee7846c43fd81c606b246592c3a590',
+ './metagen.php' => '80dfab586cf8640852d36683d4007cad',
+ './metadata/documents_opportunitiesMetaData.php' => 'b776892c7a27b7e666b6bb4e23e94774',
+ './metadata/documents_contactsMetaData.php' => '6941f4fe0715d55f9aa7cea3af00b561',
+ './metadata/documents_casesMetaData.php' => 'ca42c730a65e33487f1bee05a80cb0a5',
+ './metadata/documents_bugsMetaData.php' => '60526589bfad1dabea30dd1e0bff7e7d',
+ './metadata/documents_accountsMetaData.php' => '1a40c95528106d1fba63e1dea97f961e',
+ './metadata/users_signaturesMetaData.php' => '67c651bc9ed014ea15ac9fdd2f6bab61',
+ './metadata/users_passwordLinkMetaData.php' => '142fbf7843981a13065b0d9ecc767302',
+ './metadata/users_last_importMetaData.php' => '9ab931c7b2e6ef9dbd8a3505ec1814dd',
+ './metadata/usersMetaData.php' => 'fbd92f30ed0272e500754a7c57b92eac',
+ './metadata/user_feedsMetaData.php' => 'd3bd694d277da6b2aa8d2bcdd1835d8b',
+ './metadata/schedulers_timesMetaData.php' => '72f76139cf0b648e5f519d3e00066d35',
+ './metadata/roles_usersMetaData.php' => 'ec1920cb8a866a2d705d9e18eb52260d',
+ './metadata/roles_modulesMetaData.php' => 'f8c0fe75cfd118f31eaf01b9057595f7',
+ './metadata/queues_queueMetaData.php' => '4e60ab7d775111fe5a88bdb76a6cb75f',
+ './metadata/queues_beansMetaData.php' => 'a6fb690f6b43654b110eacd7ea1ebbf2',
+ './metadata/prospect_lists_prospectsMetaData.php' => '0560912ae453e085ef73237f2551c978',
+ './metadata/prospect_list_campaignsMetaData.php' => 'ca02ac08ff94c6ab02b28a6ae0c4dbb1',
+ './metadata/projects_quotesMetaData.php' => '4be3d068e848b5d473f5cfbcd0b8daa5',
+ './metadata/projects_opportunitiesMetaData.php' => '8a5cca0c5090e54b4a37bd72094ba14f',
+ './metadata/projects_contactsMetaData.php' => 'd568b27baa934ce1cd34b43b9ae784dd',
+ './metadata/projects_accountsMetaData.php' => 'b542add1efa244747882d1d5091902aa',
+ './metadata/project_task_project_tasksMetaData.php' => 'e3e041e24142483bce72ab9cb3fc41f3',
+ './metadata/project_relationMetaData.php' => '81a6b4aa262d6ec95671033fd3cf2a17',
+ './metadata/project_productsMetaData.php' => 'b195958e9cd92435ddefc1f29f59af6c',
+ './metadata/project_casesMetaData.php' => 'b1c44dcc5b91d3d6b2090f8a768530ef',
+ './metadata/project_bugsMetaData.php' => '7d70027464ad16b62cc8f320bd8d767b',
+ './metadata/outboundEmailMetaData.php' => 'daa846dade10e9f93ebbdc244b88b2d6',
+ './metadata/opportunities_contactsMetaData.php' => '4cbcf355929ce9fff264fcb85cb74f74',
+ './metadata/meetings_usersMetaData.php' => '7572c7925f3eacf2bf812ddfda582d9f',
+ './metadata/meetings_leadsMetaData.php' => 'e0af35e3e18940eef9f07e2d63a66b29',
+ './metadata/meetings_contactsMetaData.php' => 'f060b980ab328a2c07cee26a060f8b91',
+ './metadata/linked_documentsMetaData.php' => '4912a3b9a7dd02184d75e5af45102056',
+ './metadata/kbdocuments_views_ratingsMetaData.php' => '96d7a46c751de8f677978d355e837e37',
+ './metadata/inboundEmail_cacheTimestampMetaData.php' => 'b0a12c16859f8eb5c622a5056b492152',
+ './metadata/inboundEmail_autoreplyMetaData.php' => 'b380d666de5b57f4276d18432cbde141',
+ './metadata/import_mapsMetaData.php' => 'fbd92f30ed0272e500754a7c57b92eac',
+ './metadata/foldersMetaData.php' => 'a9263e7f6e7001c15c129b9c57b37a0f',
+ './metadata/fields_meta_dataMetaData.php' => 'fbd92f30ed0272e500754a7c57b92eac',
+ './metadata/emails_beansMetaData.php' => '4e01d0385cb35201c84cf3be307250af',
+ './metadata/email_marketing_prospect_listsMetaData.php' => 'f7830fe5246d2932ad4c4a717ad2a956',
+ './metadata/email_cacheMetaData.php' => '067d13920f88864eacc1ae54b2b0df3a',
+ './metadata/email_addressesMetaData.php' => '36d7a888e737eeebb1bd7100dbf8ed98',
+ './metadata/custom_fieldsMetaData.php' => '469a0e40bb1cbe229a15326eb664243d',
+ './metadata/contacts_usersMetaData.php' => '45a4a253009fbfa71fcb8ba4d179968c',
+ './metadata/contacts_casesMetaData.php' => '691a92b305bb34e379d16a0119d4dd31',
+ './metadata/contacts_bugsMetaData.php' => '37ac1fbd8d92c3eac21766f8e3535e0c',
+ './metadata/configMetaData.php' => 'fbd92f30ed0272e500754a7c57b92eac',
+ './metadata/cases_bugsMetaData.php' => '71298125bde0aded1619c232e07f65bb',
+ './metadata/calls_usersMetaData.php' => '635f8011edf4d11c4e31bb63064c7b8f',
+ './metadata/calls_leadsMetaData.php' => '6e480abab966a8e3604d09db8de9eaa6',
+ './metadata/calls_contactsMetaData.php' => '3dcf697cd830cd731ac73621a72e1442',
+ './metadata/audit_templateMetaData.php' => '7ffbb7f84bb4e387018fc836716a828d',
+ './metadata/addressBookMetaData.php' => '7f741cceddf56ded991313ae29a45e84',
+ './metadata/acl_roles_usersMetaData.php' => '674bb5e51c78aa11540d6cc834f6fca3',
+ './metadata/acl_roles_actionsMetaData.php' => '6cdac7aa5fed3c23a7c1f4979f277d32',
+ './metadata/accounts_opportunitiesMetaData.php' => '7a8f9cd199bc54e6e15f6f4771b8fdac',
+ './metadata/accounts_contactsMetaData.php' => 'c8f05d76641a9df3a8f160e80341bb0b',
+ './metadata/accounts_casesMetaData.php' => '3210123d15c162e4e406ca0b24759991',
+ './metadata/accounts_bugsMetaData.php' => 'a04724023df98e4ee65831f5e1b942e7',
+ './maintenance.php' => 'b8f1850c321a12bf41d7b91385858f1c',
+ './log_file_restricted.html' => 'db7ac0ce0822e215c1c62e5592e56eac',
+ './log4php/LoggerManager.php' => 'fa34194306cd50c01b71d8d5060ee362',
+ './leadCapture.php' => '6acff84b622ac060efef67d110f8f10b',
+ './jssource/src_files/include/JSON.js' => '513eb0113124c215e17c1495f8a202dd',
+ './jssource/src_files/include/MySugar/javascript/MySugar.js' => '320180d49455ae9978863f9d211a858f',
+ './jssource/src_files/include/SubPanel/SubPanelTiles.js' => 'a3f311e30548aa66e34a8a8542bb9eea',
+ './jssource/src_files/include/SugarCharts/Jit/FlashCanvas/canvas2png.js' => '4c95a8c2071e0d5b4ae1531a790f1492',
+ './jssource/src_files/include/SugarCharts/Jit/FlashCanvas/flashcanvas.js' => 'c06bd0d01f1daa8ee7c54b83fe33f03a',
+ './jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js' => '569389f06a8902b9ca8ee28d1526149b',
+ './jssource/src_files/include/SugarCharts/Jit/js/mySugarCharts.js' => 'ea73d4e9be70f83c81fbea0e6864fe5a',
+ './jssource/src_files/include/SugarCharts/Jit/js/sugarCharts.js' => '5274ef040f4f386cd89b552b613644e6',
+ './jssource/src_files/include/SugarDependentDropdown/javascript/SugarDependentDropdown.js' => 'c7d0f70a1f6108ad01b66065d07ce3b0',
+ './jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js' => 'd1f2d39aeb58defc6c9e647792459621',
+ './jssource/src_files/include/SugarFields/Fields/Address/SugarFieldAddress.js' => '2230e649a72034d4e7aefe81fb964ccf',
+ './jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js' => 'd453a1b2ee708c96b17fe9e43c676c68',
+ './jssource/src_files/include/SugarFields/Fields/Datetimecombo/Datetimecombo.js' => 'f5868f390ce9f214331f1c0c4feddf9f',
+ './jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js' => 'ec13311644ef4adddd6933491047492f',
+ './jssource/src_files/include/connectors/formatters/default/company_detail.js' => 'bf41167826e3fd4019fb46a69e7d7560',
+ './jssource/src_files/include/javascript/cookie.js' => 'eb329b102eecc7a6278e7c2712a531b5',
+ './jssource/src_files/include/javascript/dashlets.js' => 'aa8ae5e5853d88389628f36feca2554d',
+ './jssource/src_files/include/javascript/include.js' => '4fd5d7da5c00e4c0a9a83b4b65a493f1',
+ './jssource/src_files/include/javascript/jsclass_async.js' => '616ca1070d5e3f3bf6dcb210a59b302c',
+ './jssource/src_files/include/javascript/jsclass_base.js' => '3f5f1bd86e7b3c501431a71269200cdd',
+ './jssource/src_files/include/javascript/menu.js' => '21f57ea7c6d0ab2166021bb928d98251',
+ './jssource/src_files/include/javascript/overlibmws.js' => '9fb2df046948fb09baf9bf62cf8d7877',
+ './jssource/src_files/include/javascript/overlibmws_iframe.js' => '3714ae1a5be03f1470b30e8920386d14',
+ './jssource/src_files/include/javascript/popup_helper.js' => 'b329eaa528e55e17a70bca7e450ee865',
+ './jssource/src_files/include/javascript/popup_parent_helper.js' => '2753b1b6d525a4e1245605d544252465',
+ './jssource/src_files/include/javascript/quickCompose.js' => 'c87742cdae04b75afc7e59c9e9440d39',
+ './jssource/src_files/include/javascript/quicksearch.js' => 'f1660fd0ecb23c3ce215e0f1992442a6',
+ './jssource/src_files/include/javascript/report_additionals.js' => '7d8f86186481775d3f2b9577f62d7e01',
+ './jssource/src_files/include/javascript/sugar_3.js' => 'c9fb3f4ee58114e99226229c9f24a350',
+ './jssource/src_files/include/javascript/sugar_connection_event_listener.js' => '3f0ed5a6340391e82521b208d6b39e8d',
+ './jssource/src_files/include/javascript/sugarwidgets/SugarYUILoader.js' => '91ce3f8311a938d63f6f4f41a2780855',
+ './jssource/src_files/include/javascript/sugarwidgets/SugarYUIWidgets.js' => '18d0fbff67ee96b852f8d3bf2d033978',
+ './jssource/src_files/include/javascript/swfobject.js' => 'a7dc61c4ada3b828e0e09e51f943c6db',
+ './jssource/src_files/include/javascript/yui3/assets/dpSyntaxHighlighter.js' => '9f8e259fd1682f21971db93c2465812a',
+ './jssource/src_files/include/javascript/yui3/assets/syntax.js' => '3dcb7c2cccb0b8d6eaa0bf2700a14645',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-base-min.js' => '5cd35b730551e2f143f8b2aeb3dc43f0',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-base.js' => '18155aa48babf0db52f49ef2df3fa355',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-color-min.js' => 'faec1c0ed471704a006e95b4865f2a61',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-color.js' => 'dbfbd467f74fd9706942a4dcc1798508',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-curve-min.js' => '1867dfb160e262228341cc1a7da74d3f',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-curve.js' => 'a8fa1f8d3176b2b77228d7324d7e28cc',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-easing-min.js' => '3b25c5521f9a0eba5c761b42f1d7c90a',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-easing.js' => '1936ddcbb402ea9772b9bffa41e1d85b',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-min.js' => '6d754f4c4fee88a77c5939babc20b08d',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-node-plugin-min.js' => 'b74864d9fe6ce5bb68002950abb7f4d9',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-node-plugin.js' => '0e8bb8913787d98c7dbd6842a783b068',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-scroll-min.js' => 'c2e2f8abedb377ad656bf4cb79600a6d',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-scroll.js' => '64f2edf606cbd8bdf2763b6321e28801',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-xy-min.js' => '6850aba5ef84ad2912ed491e2eae46ce',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim-xy.js' => '78ca48b8bbe8b917e818def37804b9aa',
+ './jssource/src_files/include/javascript/yui3/build/anim/anim.js' => '58e7b584e85972b486c9e1d3f0647428',
+ './jssource/src_files/include/javascript/yui3/build/async-queue/async-queue-min.js' => 'ffd73da1dcddab565bbd50c16873581d',
+ './jssource/src_files/include/javascript/yui3/build/async-queue/async-queue.js' => '04d2c0f553fff5b53f4b239662c99806',
+ './jssource/src_files/include/javascript/yui3/build/attribute/attribute-base-min.js' => 'f62e92ea97016fe0125d224eb5ff8272',
+ './jssource/src_files/include/javascript/yui3/build/attribute/attribute-base.js' => 'd88e857d7401b689cedc605f290d9f96',
+ './jssource/src_files/include/javascript/yui3/build/attribute/attribute-complex-min.js' => 'ca78452cabfa8a6d001ccb05aa442bf3',
+ './jssource/src_files/include/javascript/yui3/build/attribute/attribute-complex.js' => '87957b017c75b79ecd9c1f586ab3b621',
+ './jssource/src_files/include/javascript/yui3/build/attribute/attribute-min.js' => '4b846745a8c917c6885c7c75ce630c45',
+ './jssource/src_files/include/javascript/yui3/build/attribute/attribute.js' => '39d35aa02bb83866ea2efbfcbeaa3631',
+ './jssource/src_files/include/javascript/yui3/build/base/base-base-min.js' => 'd3574e77aedcb6d77fe42f65ba82d90c',
+ './jssource/src_files/include/javascript/yui3/build/base/base-base.js' => '0f3295ad24f08dc27a7774af785a65b8',
+ './jssource/src_files/include/javascript/yui3/build/base/base-build-min.js' => '477ad185b0b7d00376a84a20b4e8845b',
+ './jssource/src_files/include/javascript/yui3/build/base/base-build.js' => 'c8dc5087a3d3fb24af6a83efe1ac4a27',
+ './jssource/src_files/include/javascript/yui3/build/base/base-min.js' => 'ec3f0972e25534ac6d174100f64a9463',
+ './jssource/src_files/include/javascript/yui3/build/base/base-pluginhost-min.js' => 'c7fece0a58c7e24a82df90083af76d55',
+ './jssource/src_files/include/javascript/yui3/build/base/base-pluginhost.js' => '3555cba0946209ec58d6c7fa298083eb',
+ './jssource/src_files/include/javascript/yui3/build/base/base.js' => 'a0726f5ded064913b374a218d52fadb0',
+ './jssource/src_files/include/javascript/yui3/build/cache/cache-min.js' => '3d336358405079ad391fd1f456239a88',
+ './jssource/src_files/include/javascript/yui3/build/cache/cache.js' => 'd3ffbda96ddeb5b2eb1643dda354b5cc',
+ './jssource/src_files/include/javascript/yui3/build/classnamemanager/classnamemanager-min.js' => '9618fe08329cb8ab8858db0457bc7beb',
+ './jssource/src_files/include/javascript/yui3/build/classnamemanager/classnamemanager.js' => '0d314e7fb9508e153dcddbb6790585f3',
+ './jssource/src_files/include/javascript/yui3/build/collection/collection-min.js' => 'a42ba321627b043c58d75996416af1d1',
+ './jssource/src_files/include/javascript/yui3/build/collection/collection.js' => '19c11e1ef14f56a57e32fbd4cd14035c',
+ './jssource/src_files/include/javascript/yui3/build/compat/compat-min.js' => '8c2cd1bbe7e4641a318f534180683b9f',
+ './jssource/src_files/include/javascript/yui3/build/compat/compat.js' => '4dab80fb6d64ac22fa3b1ddc7d829970',
+ './jssource/src_files/include/javascript/yui3/build/console/console-filters-min.js' => '6f81e8637d5241e3859a3843a73de5f7',
+ './jssource/src_files/include/javascript/yui3/build/console/console-filters.js' => 'bbffa94dca8a3f0bd780537db226438e',
+ './jssource/src_files/include/javascript/yui3/build/console/console-min.js' => '909d1783e8842e0dcd45e6623066cc66',
+ './jssource/src_files/include/javascript/yui3/build/console/console.js' => '8ac45ef6432e7d80506570ecbe7aff59',
+ './jssource/src_files/include/javascript/yui3/build/cookie/cookie-min.js' => '138949f035bc27916e29082e0388d187',
+ './jssource/src_files/include/javascript/yui3/build/cookie/cookie.js' => '3344f4c1cab1d944cc0d480fd2d06b7c',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-array-min.js' => '69031268bd2e02eb1a580107d6e4fa3f',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-array.js' => '6f50a80e0a683c75a4eb8bd14771ef5f',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-base-min.js' => '1c98550b0a52d7523b8d8a4793a8b8b6',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-base.js' => '93a950bbb44e09ad53eca42a0b925872',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-json-min.js' => 'a779e5c234d4642ec8edf66ed15ccd34',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-json.js' => '14578f749fdffa3242912b0b60c58edd',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-min.js' => '9678fbae88ef1ab62804a6dfd1b7735c',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-text-min.js' => 'f2a605ce4c79fcfd4c17776a65ffb6e4',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-text.js' => '35c103827e2aa0c7c2449300c9153c4c',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-xml-min.js' => '8be1c2da27fee8c14f9a727e83365252',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema-xml.js' => 'd32406b650edfb570bdf9e7f9207bc57',
+ './jssource/src_files/include/javascript/yui3/build/dataschema/dataschema.js' => 'fb1cf323354ac9963cec4dc7b38c9051',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-arrayschema-min.js' => 'f1f52de48b844a3bb82b2599beb32a9e',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-arrayschema.js' => 'd1b1d57aeabf70cf99f55c7c5a1660a8',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-cache-min.js' => '2aaf531204f8be7cd34254f79979b522',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-cache.js' => '137a174c1d2a2aa30eead39bfed62303',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-function-min.js' => 'ca1c83fd7d2878cfc403571e4900b66f',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-function.js' => '0b3c1a9cf7fa787752b6e127aa7b54e0',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-get-min.js' => '0bd20dcfc0b4cda1b603f64d48a393ac',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-get.js' => 'b55289d7ffc274e4a8186b60fcf29df1',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-io-min.js' => '32d0bd2aa6343f731573ae3dc7f27216',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-io.js' => '1eb4521e16ed47a09f4b1b09f39aee5f',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-jsonschema-min.js' => '128f90bd4e596a1684555d1efef42206',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-jsonschema.js' => 'cf391fbe5cb2f7045b181dae657e80cc',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-local-min.js' => '92065f142e10742bac58ef4e7e2bff81',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-local.js' => 'dce1f44b2c2b6956749fe77e03d7fc95',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-min.js' => 'c7cbbcb655a90fbc60cb37963e30d1d8',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-polling-min.js' => '7190cb146692fd7dcfab60e9dd741964',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-polling.js' => '5b564a1d5b9c1d32a8da581083ad48ae',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-textschema-min.js' => '88f44a6a3e9a27abb14e15c30f2f87af',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-textschema.js' => '625a4210d8f4a98dcfe4925acfb7a476',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-xmlschema-min.js' => '79d203f0961fba519b55abb1c25643ad',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource-xmlschema.js' => '400580b0f55aeeb56b68901a3ef74db5',
+ './jssource/src_files/include/javascript/yui3/build/datasource/datasource.js' => '643d0b46d35a2c005c65f416adce84ad',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-format-min.js' => 'd3fe986624bef00a9a86b4ebe3edacd9',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-format.js' => '4ada5cec6d940400dc29c9314154fa39',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-min.js' => '1cb868ef524784e77410177dedd757d4',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-parse-min.js' => 'f63578c4a13a7d84f67a205e0e1f99cb',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-date-parse.js' => '0e5e71d81afa0ca4d2f4bd85a28464b0',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-date.js' => 'fa2fecc54e9316cbc6a4963cccd1d2fc',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-min.js' => '75f35499ef8780e116e938d20c2e9079',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-format-min.js' => 'e49e62c36cbdc8b8c72a69c01ac48a12',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-format.js' => 'c53b2d6afcb2b8c6f2f756cc5e9f7078',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-min.js' => 'dfe5cb43cf7af2029d7d505829fd84d4',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-parse-min.js' => '186fe53982cf5aba044c145d80c2867e',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-number-parse.js' => 'e08c5f42a825d5da46e0d9f81afe078b',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-number.js' => '02638e9474f696e9ce67be34df9916ea',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-format-min.js' => 'f4169b2bfb1999706dcf27a318e37724',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-format.js' => '8fb5d6f4700e05ed35f1f0adae94f59c',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-min.js' => '86b666d7dba4c6e507737619f40a1e84',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-parse-min.js' => '15ff7616eee27f39f16c442bafc797cf',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml-parse.js' => 'e381b39554519005af7735336711fd6c',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype-xml.js' => '9f973a51339581182cf415a43dc0bd8e',
+ './jssource/src_files/include/javascript/yui3/build/datatype/datatype.js' => 'd6b74d0063e70bd61f94ebc5e88a9cfe',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-constrain-min.js' => '16c59fa7174b49d467bdb9258e6abc45',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-constrain.js' => '55f2690d7ad3cd4887efc7603d1ed871',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-base-min.js' => '7415c15fa8289ca08efd42c7befc2b2d',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-base.js' => '6affa269ba6a632a0de33e2b0f165786',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-drop-min.js' => '7a396b76f4ad26c47ce7043f03cd09f1',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-drop.js' => '6da4459840d66f7a800b981531d398fa',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-ddm-min.js' => 'e26291c55920472473f007de55414040',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-ddm.js' => '14f5bb96096d9cae1aae54e12ce9bc9c',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-drag-min.js' => '3a69676605e4b1ca934bef31c0e2a1a0',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-drag.js' => 'c13d52831074aa270dfb2568bceb64f2',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-drop-min.js' => '1c6f5bff30addd2fdd52453887710d5e',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-drop-plugin-min.js' => '37ee9d8832740430d8a59c3c9580c36f',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-drop-plugin.js' => 'df088492b3aa8526f836f4fabd5e8886',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-drop.js' => 'c9cf6631655ffd33a0f4f799dfcec08d',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-min.js' => '4928b5e84cdb8cb9e4db74242536de93',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-plugin-min.js' => '8a6843fc23fb0236c7bc149da7cd4a7e',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-plugin.js' => '3e377fe4cdcfba84863246ec64eead6a',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-proxy-min.js' => '58718da0577fbaac45f29bc1dc5598fe',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-proxy.js' => '08d6db9329dc183e9ab3862eef222cff',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-scroll-min.js' => '8b090928f1a78df880fa07be309f06b4',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd-scroll.js' => '511f2cfccf52fb287f3d77b860f86a4e',
+ './jssource/src_files/include/javascript/yui3/build/dd/dd.js' => '98b8dc6b71ab1ecf70d178408c838339',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-base-min.js' => 'af6d5a8b6932e73a1898b46e9a49c34e',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-base.js' => 'ff2ddc03dfca759433dab25e52dcc756',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-min.js' => 'ac34ca5cb5df6256359b5e8c96bc3d35',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-screen-min.js' => 'd48e1e218269e223538aa6c55213449e',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-screen.js' => 'ad227284062ab1ff108be855dc9dd92d',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-style-min.js' => 'b2d4524328a6fe2c92447902e7245854',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom-style.js' => '46499a455dcab9bfe96b744e72a05a36',
+ './jssource/src_files/include/javascript/yui3/build/dom/dom.js' => '973e38e8aa8d341262f11170fd71c572',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-css2-min.js' => 'ecfafbd6551dafd6889d74270e09cc15',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-css2.js' => '15cb5d0f8af3670c6d9fa52dbc0394b3',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-css3-min.js' => '1636b87c8be9baa58b3e29fcf911f8f3',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-css3.js' => '8aa951fc273ef8cf3559d5ff23aec74d',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-min.js' => 'd985864d04368bf3a0a2ab926d7cc6e5',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-native-min.js' => 'f2c02fb0e7bc3aef48dbd38618a1296f',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector-native.js' => '2f48d39b9cfbcc94a152493c95d691e7',
+ './jssource/src_files/include/javascript/yui3/build/dom/selector.js' => '46e7510a714f115ae38df8acf5afd8e2',
+ './jssource/src_files/include/javascript/yui3/build/dump/dump-min.js' => '8931348bb06babc4b466c52053f20763',
+ './jssource/src_files/include/javascript/yui3/build/dump/dump.js' => '1ffbaba6c42a7d8051c419e5304c2248',
+ './jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-base-min.js' => '409f4cf4d5ea4881f88228715de9e1a4',
+ './jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-base.js' => '0d5d16aeba48c23e7c5986fab181761f',
+ './jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-complex-min.js' => '6d360c63f782bf22e97025ffc8bb4e50',
+ './jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-complex.js' => 'e14a79e33d4d78bb00c6d7bac0bc20df',
+ './jssource/src_files/include/javascript/yui3/build/event-custom/event-custom-min.js' => 'd86742304c0b2c5d551cc30a2f30def4',
+ './jssource/src_files/include/javascript/yui3/build/event-custom/event-custom.js' => '65f477457358d76b42bb7463357d42d4',
+ './jssource/src_files/include/javascript/yui3/build/event-simulate/event-simulate-min.js' => 'f1b5f16529537e2931e95e0d6dfa5e1e',
+ './jssource/src_files/include/javascript/yui3/build/event-simulate/event-simulate.js' => '3bafb16813ddf414f80fc898dfb0cfc1',
+ './jssource/src_files/include/javascript/yui3/build/event/event-base-min.js' => '52c133eedcd782428299dd98b96850b6',
+ './jssource/src_files/include/javascript/yui3/build/event/event-base.js' => '98952d7c2486e19f428bdd35922886ec',
+ './jssource/src_files/include/javascript/yui3/build/event/event-delegate-min.js' => 'e775d7a6ce602d63537a6492f7c9639b',
+ './jssource/src_files/include/javascript/yui3/build/event/event-delegate.js' => '633b634152c8e0017109ef8070aa321d',
+ './jssource/src_files/include/javascript/yui3/build/event/event-focus-min.js' => 'd421b02d12c98a5ece975dcec6bc5673',
+ './jssource/src_files/include/javascript/yui3/build/event/event-focus.js' => '1b2e6919bf0d0c7f73952898baf1db5f',
+ './jssource/src_files/include/javascript/yui3/build/event/event-key-min.js' => '14b3c30e812ba583952da0f54fa0a72a',
+ './jssource/src_files/include/javascript/yui3/build/event/event-key.js' => '5b11552a5699e40a7ea7a26ad6153a34',
+ './jssource/src_files/include/javascript/yui3/build/event/event-min.js' => 'bf7dd7b1b59bf79616197332a24e10b9',
+ './jssource/src_files/include/javascript/yui3/build/event/event-mouseenter-min.js' => '8c0a6e0e9d7990792faefbf1792fb26f',
+ './jssource/src_files/include/javascript/yui3/build/event/event-mouseenter.js' => 'a9efbd15212583e8c493f746e3d8b7fb',
+ './jssource/src_files/include/javascript/yui3/build/event/event-mousewheel-min.js' => 'a905b66143ea8ff6a40fce21415ca815',
+ './jssource/src_files/include/javascript/yui3/build/event/event-mousewheel.js' => '7ae089ca40cd2a2fc2896a99b9448e79',
+ './jssource/src_files/include/javascript/yui3/build/event/event-resize-min.js' => '35ac1a26f54703c42b3a5f2a941064a6',
+ './jssource/src_files/include/javascript/yui3/build/event/event-resize.js' => '8169feb99c34ee02acaf40539ca6e34c',
+ './jssource/src_files/include/javascript/yui3/build/event/event.js' => 'eee21c85b735076d77f7c1cdbdae6f9d',
+ './jssource/src_files/include/javascript/yui3/build/get/get-min.js' => 'f34507a2bb860f2e50526f9ccbd4bb7a',
+ './jssource/src_files/include/javascript/yui3/build/get/get.js' => 'e4816a57e845571bb96178b460a7f45f',
+ './jssource/src_files/include/javascript/yui3/build/history/history-min.js' => '15c4fc68c7b3a987e08a0bd904aef254',
+ './jssource/src_files/include/javascript/yui3/build/history/history.js' => '8e279fc9ba70f25d70dd9e44745fcf81',
+ './jssource/src_files/include/javascript/yui3/build/imageloader/imageloader-min.js' => '8b012dc064ae76119d25c564df0368ab',
+ './jssource/src_files/include/javascript/yui3/build/imageloader/imageloader.js' => '542f1e7f66cf56b09eb1e64dbfdeb2fe',
+ './jssource/src_files/include/javascript/yui3/build/io/io-base-min.js' => 'd38b67f618736d205f44482a661dfa2b',
+ './jssource/src_files/include/javascript/yui3/build/io/io-base.js' => '6df56770995472c20366072e46b3afe6',
+ './jssource/src_files/include/javascript/yui3/build/io/io-form-min.js' => 'ab2cdbf1e0939a0cb137aac241e44914',
+ './jssource/src_files/include/javascript/yui3/build/io/io-form.js' => 'ec9e4743ddb4c80070960e00c03d56bb',
+ './jssource/src_files/include/javascript/yui3/build/io/io-min.js' => '9ebc7d9ae14077fd9fe272cca55a7f04',
+ './jssource/src_files/include/javascript/yui3/build/io/io-queue-min.js' => '793809982910a9f006317dec0d77b0a9',
+ './jssource/src_files/include/javascript/yui3/build/io/io-queue.js' => '3f932ebb72f8c3988385a8474b6dd71a',
+ './jssource/src_files/include/javascript/yui3/build/io/io-upload-iframe-min.js' => 'd74e63c9dca71dd9122bc24e56e62147',
+ './jssource/src_files/include/javascript/yui3/build/io/io-upload-iframe.js' => 'fd4cdaf2809d13ddd336e83cef2de7b1',
+ './jssource/src_files/include/javascript/yui3/build/io/io-xdr-min.js' => 'cf66f503d2555d8aafaff5f22a932e4b',
+ './jssource/src_files/include/javascript/yui3/build/io/io-xdr.js' => 'f5e4471349f4015e9a7d93a7352950aa',
+ './jssource/src_files/include/javascript/yui3/build/io/io.js' => '60422e16edb10cc8f6eea0f50a658637',
+ './jssource/src_files/include/javascript/yui3/build/json/json-min.js' => 'c629bd6ed7f71360a35926dcc5ae45f3',
+ './jssource/src_files/include/javascript/yui3/build/json/json-parse-min.js' => 'f9742cbeb6728545f0ff1eb5dd044a32',
+ './jssource/src_files/include/javascript/yui3/build/json/json-parse.js' => '0968fe85a68300b8aae1268028f561f1',
+ './jssource/src_files/include/javascript/yui3/build/json/json-stringify-min.js' => 'a81e72a3b3da8187c23a5960e67ec482',
+ './jssource/src_files/include/javascript/yui3/build/json/json-stringify.js' => '8c292082b315d80fed6a77be57f64371',
+ './jssource/src_files/include/javascript/yui3/build/json/json.js' => 'ac0fd97c8584d1f0c10114bb4657a58c',
+ './jssource/src_files/include/javascript/yui3/build/loader/loader-min.js' => 'e2ecdba3f8f4db3029edbbea9cb1ef14',
+ './jssource/src_files/include/javascript/yui3/build/loader/loader.js' => '70918ebfcfb2489d0e6ce7f9c2efa8a4',
+ './jssource/src_files/include/javascript/yui3/build/node-focusmanager/node-focusmanager-min.js' => '5828f08b2bce3e1349333d5669ba7484',
+ './jssource/src_files/include/javascript/yui3/build/node-focusmanager/node-focusmanager.js' => '5e753c5afea81d073780dce8c63efa3c',
+ './jssource/src_files/include/javascript/yui3/build/node-menunav/node-menunav-min.js' => '5201169bdaf00dce96a2ecf52c3b9bf9',
+ './jssource/src_files/include/javascript/yui3/build/node-menunav/node-menunav.js' => 'f6bd7cdac5f5b3bb9c7fa3712ad180a7',
+ './jssource/src_files/include/javascript/yui3/build/node/node-aria-min.js' => '8c0d9db1e9928a89b162e19b44355257',
+ './jssource/src_files/include/javascript/yui3/build/node/node-aria.js' => 'f180186d04eb58df60bc72fac66a86cd',
+ './jssource/src_files/include/javascript/yui3/build/node/node-base-min.js' => '573bf8f8667da0182b4a16b585086d12',
+ './jssource/src_files/include/javascript/yui3/build/node/node-base.js' => '510f173b3b7800a5b49b2fc0a2c3cbdf',
+ './jssource/src_files/include/javascript/yui3/build/node/node-event-delegate-min.js' => '3a77c1605b375845f04fd06d9ad0d90e',
+ './jssource/src_files/include/javascript/yui3/build/node/node-event-delegate.js' => '6c4f82d611504925defcc97c9abeff52',
+ './jssource/src_files/include/javascript/yui3/build/node/node-event-simulate-min.js' => 'c303f12d80efb16c109031b9518117ab',
+ './jssource/src_files/include/javascript/yui3/build/node/node-event-simulate.js' => '4aaeff9a2f60add686bd4a377fc1cc69',
+ './jssource/src_files/include/javascript/yui3/build/node/node-min.js' => 'ab40f9701022b3c69a536398278873d8',
+ './jssource/src_files/include/javascript/yui3/build/node/node-pluginhost-min.js' => '783096e27985e7a9ba27fce6542bb2f4',
+ './jssource/src_files/include/javascript/yui3/build/node/node-pluginhost.js' => '70466040ac0f1d2e555b39159bac0ac0',
+ './jssource/src_files/include/javascript/yui3/build/node/node-screen-min.js' => 'f20aee7885b1d94e3365b8da1c5d13d1',
+ './jssource/src_files/include/javascript/yui3/build/node/node-screen.js' => '471e3f6ca4e99a5f40c7b4b170fbc42e',
+ './jssource/src_files/include/javascript/yui3/build/node/node-style-min.js' => 'fdcab2a7ec731d1a4696ea4a6a80041f',
+ './jssource/src_files/include/javascript/yui3/build/node/node-style.js' => '14ad213d86f086af91f3fc1c04b8958e',
+ './jssource/src_files/include/javascript/yui3/build/node/node.js' => '5e613289d3bff3db17fb7407e48110bb',
+ './jssource/src_files/include/javascript/yui3/build/oop/oop-min.js' => '1cd195757d9bdf889ba954efb0e9dc60',
+ './jssource/src_files/include/javascript/yui3/build/oop/oop.js' => 'db6972479283899df4a6a069dd02f331',
+ './jssource/src_files/include/javascript/yui3/build/overlay/overlay-min.js' => '338aa25cc08c1810f943caa1fdee0b78',
+ './jssource/src_files/include/javascript/yui3/build/overlay/overlay.js' => 'd7ff4cda4b1ccd4218717d7cd53972be',
+ './jssource/src_files/include/javascript/yui3/build/plugin/plugin-min.js' => '69f7fea872c4a77090b92ca3356300c6',
+ './jssource/src_files/include/javascript/yui3/build/plugin/plugin.js' => '7840fcc0b1e5d47f9e8251388ddf8b7c',
+ './jssource/src_files/include/javascript/yui3/build/pluginhost/pluginhost-min.js' => '35b7c91eb9020cae7792aed0eb9f2830',
+ './jssource/src_files/include/javascript/yui3/build/pluginhost/pluginhost.js' => '5ae0acc449941efdfc3737a533221077',
+ './jssource/src_files/include/javascript/yui3/build/profiler/profiler-min.js' => '2f479e3c711a7481fccd7acda1fa1291',
+ './jssource/src_files/include/javascript/yui3/build/profiler/profiler.js' => '4ef3fe8390933622310743dad9a2e08f',
+ './jssource/src_files/include/javascript/yui3/build/queue-promote/queue-promote-min.js' => '0461b7b91829eb19e16737b6459f63f2',
+ './jssource/src_files/include/javascript/yui3/build/queue-promote/queue-promote.js' => '89593256adf72d55aaaf1b035b43ef27',
+ './jssource/src_files/include/javascript/yui3/build/slider/slider-min.js' => 'cf1e617aaa120f8bf3104d523986b516',
+ './jssource/src_files/include/javascript/yui3/build/slider/slider.js' => '520f158df9280140d44a644612c5fcd6',
+ './jssource/src_files/include/javascript/yui3/build/stylesheet/stylesheet-min.js' => '9d6162ed02bd3a25321f4423faaad1ae',
+ './jssource/src_files/include/javascript/yui3/build/stylesheet/stylesheet.js' => '77929f4ace234fbfa1f5af5b73b1a5d3',
+ './jssource/src_files/include/javascript/yui3/build/substitute/substitute-min.js' => 'b4373237b784afac69d9b3cd5d5876f5',
+ './jssource/src_files/include/javascript/yui3/build/substitute/substitute.js' => '8d218c1788e5aa21cad2b17ce2f2c222',
+ './jssource/src_files/include/javascript/yui3/build/test/test-min.js' => 'a4a4307e711084d0ec4da53f415e3a29',
+ './jssource/src_files/include/javascript/yui3/build/test/test.js' => '0d4ba61680d004993d270cf7722435b2',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-min.js' => 'b47d518383d791d39fba9b113fa253de',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-position-ext-min.js' => '52ab08bb21e9455cafbc4d3b9ff80c64',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-position-ext.js' => '16dadc8a3116d32fc08d6adf1363c4e9',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-position-min.js' => '18248af08d2b1d68ddcc17efe70db0a4',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-position.js' => '4f26a65e718507a95947ff9dc5972001',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-stack-min.js' => '3ca2decac01d64839c3d37f0897baacd',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-stack.js' => 'c43e23543ef86e1e664dfa0963ee1559',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-stdmod-min.js' => 'ccd562ecdaea4be08befaaa7c0c2f907',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget-stdmod.js' => '888c93b81457f03144ea8f74bfba4c2b',
+ './jssource/src_files/include/javascript/yui3/build/widget/widget.js' => '20fc302af794947681dc47bebfb8ec36',
+ './jssource/src_files/include/javascript/yui3/build/yui-base/yui-base-min.js' => '4019801f562a2a976013c444c30b0875',
+ './jssource/src_files/include/javascript/yui3/build/yui-base/yui-base.js' => 'cb71cfade0802cf74b6dd1a6d8c4b5a7',
+ './jssource/src_files/include/javascript/yui3/build/yui/get-min.js' => 'f34507a2bb860f2e50526f9ccbd4bb7a',
+ './jssource/src_files/include/javascript/yui3/build/yui/get.js' => 'e4816a57e845571bb96178b460a7f45f',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-base-min.js' => 'd7bfae9ab4e40960f9c0c59b1ab9fc6f',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-base.js' => '4dda10770e6c51f085198b811bbdb9d5',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-later-min.js' => '752d639c7bcbdcb75804d739fab44d38',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-later.js' => '0c95fe70b5182558001aaa0c60404960',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-log-min.js' => '9ff98f2c7ba8d79c8abf702a36191e24',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-log.js' => '22c5382de3ed58bda76dccc819529f0e',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui-min.js' => '79d543e9fe1ef95df39f721d4a1d23a9',
+ './jssource/src_files/include/javascript/yui3/build/yui/yui.js' => '934ea2f120407922bc5631d51f90120c',
+ './jssource/src_files/include/javascript/calendar.js' => '9081f811752c095c74ba09a03e3ec6de',
+ './jssource/src_files/include/javascript/iscroll.js' => 'b6c232e3c54b2a1320b22c7ad920c842',
+ './jssource/src_files/include/jsolait/init.js' => '8523493b1d0ccfc3ed8110a093672ebf',
+ './jssource/src_files/include/jsolait/lib/codecs.js' => 'd3d41752845b924a0f69e1b3d0ad6c3e',
+ './jssource/src_files/include/jsolait/lib/crypto.js' => '2b012a4eccd9ba700d54bb843b4728d5',
+ './jssource/src_files/include/jsolait/lib/jsonrpc.js' => '86989d622fc00dd19a08e91e97080a19',
+ './jssource/src_files/include/jsolait/lib/jsonrpclite.js' => '0f2c76b00723aad1651180e9abb1333c',
+ './jssource/src_files/include/jsolait/lib/lang.js' => 'a229cd0758f3c58cb246ec0179ff870a',
+ './jssource/src_files/include/jsolait/lib/langlite.js' => '2823f3cf579b60fc8846d1a64fcdeee4',
+ './jssource/src_files/include/jsolait/lib/urllib.js' => '4c55cf9f1a01aa0979ef43ea7f268c51',
+ './jssource/src_files/include/jsolait/lib/xml.js' => 'e1559fd5cd5d259f2a8f7fd07a2d2b51',
+ './jssource/src_files/include/jsolait/lib/xmlrpc.js' => 'fb50af7f64c53c58d1f700c63c9823b9',
+ './jssource/src_files/include/jsolait/missingmixin.js' => 'b07c5d5a0215126b989a6756c96a59c9',
+ './jssource/src_files/include/ytree/TreeView/HTMLNode.js' => '80d3d7b998e77999da2cd4fb0168ab68',
+ './jssource/src_files/include/ytree/TreeView/MenuNode.js' => '78c155839f99bc3564183e1557d15d3f',
+ './jssource/src_files/include/ytree/TreeView/Node.js' => '5558862b65a50dcfb297660196998435',
+ './jssource/src_files/include/ytree/TreeView/RootNode.js' => '84e59f27cdc5626482e0aab754afaaee',
+ './jssource/src_files/include/ytree/TreeView/TaskNode.js' => 'eb7b39df715ad52c70168cf8aae0d826',
+ './jssource/src_files/include/ytree/TreeView/TextNode.js' => '24a9bca371d9892ccd28455bd06d8f79',
+ './jssource/src_files/include/ytree/TreeView/TreeView.js' => '3ddc27c3f35d55471a451f9f4dad0394',
+ './jssource/src_files/include/ytree/TreeView/anim/TVAnim.js' => '1b2f5f2dfb95977adf382b57d61e8ee5',
+ './jssource/src_files/include/ytree/TreeView/anim/TVFadeIn.js' => '036c5e47e6c096f468fa30288b9c18fb',
+ './jssource/src_files/include/ytree/TreeView/anim/TVFadeOut.js' => '7bda0243ee0f0ae64829c57e387145f3',
+ './jssource/src_files/include/ytree/treeutil.js' => 'b4010d3a23933b3f78e48089b47ceeee',
+ './jssource/src_files/install/dbConfig.js' => '0a69acd054311be6b0d62a4a8c56c002',
+ './jssource/src_files/install/installCommon.js' => 'a64e04c8c9e02fc918d90dfc7463985f',
+ './jssource/src_files/install/license.js' => '6144c34a4d7d444fa4249b177ad5142f',
+ './jssource/src_files/install/oc_convert.js' => '769f06f998f3f03d81aa235f4880103a',
+ './jssource/src_files/install/oc_install.js' => '74c31efa214e2d2fdaffabd5a96bdb20',
+ './jssource/src_files/install/register.js' => 'c376eca14316971fc8aed938a6eec80a',
+ './jssource/src_files/install/siteConfig.js' => 'df40d7f62ea42c29a8bef70997243033',
+ './jssource/src_files/modules/ACLRoles/ACLRoles.js' => '28e1b60370ee538a2b80fa7a69119f85',
+ './jssource/src_files/modules/Accounts/Account.js' => 'ea1ade4e9754d4c81f998cfb4e4ae5ee',
+ './jssource/src_files/modules/Administration/javascript/Administration.js' => 'd87ec1872365dee9ec6a7746eeb5be0d',
+ './jssource/src_files/modules/Administration/javascript/Async.js' => '736e48313d8f98a1d3004cf1f4a9f758',
+ './jssource/src_files/modules/Campaigns/DetailView.js' => '1b33f45850335fcedb98e2919f4a5b7e',
+ './jssource/src_files/modules/Campaigns/WebToLead.js' => '7eb7bb9602f605dda23b051a68ff01a6',
+ './jssource/src_files/modules/Campaigns/wizard.js' => '46e43f16676665bdc14ec31ecc2e2758',
+ './jssource/src_files/modules/Connectors/Connector.js' => 'cbd618a5273c129f5e506582a8c035d3',
+ './jssource/src_files/modules/Contacts/Contact.js' => '340c4f111e6bbfc76f2167defbebc169',
+ './jssource/src_files/modules/Currencies/EditView.js' => '1f414bf3517628dfb9dd445739b9074e',
+ './jssource/src_files/modules/Documents/documents.js' => '869b8d2d02d44e4f7804405426b35aaf',
+ './jssource/src_files/modules/EmailTemplates/EmailTemplate.js' => 'f9043c6f84a7b077f0fb44b725a5b0f6',
+ './jssource/src_files/modules/Home/about.js' => '21f5494869cd5700b0c552747ad8c0f7',
+ './jssource/src_files/modules/InboundEmail/InboundEmail.js' => 'd01fb6beb97fbff465106ede1b300ed1',
+ './jssource/src_files/modules/Leads/Lead.js' => 'd06ef9e18d4c85fa7aedf57cdb5fc9e7',
+ './jssource/src_files/modules/Meetings/jsclass_scheduler.js' => '007c932cc101de1394d949008ed79c68',
+ './jssource/src_files/modules/MergeRecords/Merge.js' => '753cc64c1b94ed8f161112d17a3e0b0e',
+ './jssource/src_files/modules/Project/Project.js' => '2a60fb114abad5d5ac42e102f83ef3d9',
+ './jssource/src_files/modules/ProjectTask/ProjectTask.js' => 'b87b7fcdca7f326d7bca5fcbc2ef8e8c',
+ './jssource/src_files/modules/Studio/JSTransaction.js' => '33c082aaee31dd249e66c6a929e66dea',
+ './jssource/src_files/modules/Studio/studio.js' => 'c9a08187fa2817c18571a0b0814263a4',
+ './jssource/src_files/modules/Studio/studiodd.js' => '042fd5bfbbf1b4075e7da9b384a64ed1',
+ './jssource/src_files/modules/Studio/studiotabgroups.js' => '0a407c2375736a58bdc9d46267776831',
+ './jssource/src_files/modules/Studio/ygDDListStudio.js' => '1e565e41bc3053bde86338180ed32fdf',
+ './jssource/src_files/modules/UpgradeWizard/upgradeWizard.js' => '22592c6a2b6f28d8271a057047de3b3b',
+ './jssource/src_files/modules/Users/DetailView.js' => 'c8891d42c83727227db91137fae65337',
+ './jssource/src_files/modules/Users/PasswordRequirementBox.js' => '66744f0b7d5350ced33adaae7b85c09a',
+ './jssource/src_files/modules/Users/User.js' => 'eef706110eb0afe0aa0cebc117f59af7',
+ './jssource/src_files/modules/Users/login.js' => '4072981132901aad89bf2c26279b4a4e',
+ './jssource/src_files/modules/EAPM/EAPMEdit.js' => 'c16277ba5f134d888974539e11bb6a5a',
+ './jssource/src_files/service/utils/SugarRest.js' => '050aa9a51d9de8b4a77b301d36223656',
+ './jssource/src_files/themes/Sugar5/js/style.js' => '0342dbdcb579b8db6e1ce37adbb8f9f3',
+ './jssource/src_files/themes/default/js/style.js' => 'bff5ec579bd904092b693f765ec9f95e',
+ './jssource/minify_utils.php' => '451d68994be2696da311409a880d57fc',
+ './jssource/minify.php' => 'b8960cda18806ed133dc05159c7f6bc9',
+ './jssource/jsmin.php' => '1a523af482b74cfb955570e7473c0bf1',
+ './jssource/JSGroupings.php' => '93b7a444871b2427c7e2991b64e79958',
+ './json.php' => '14eaa93f6fd401f83e7f4420186391b4',
+ './install/dbConfig.js' => '50e0834bb5e0cdc64348eabcfe56a9fc',
+ './install/installCommon.js' => '28c286b2ad390526f43df07a56546cee',
+ './install/license.js' => '78f1f4a2e54982ad1419f1ad93315dd9',
+ './install/oc_convert.js' => 'c6770fd8d6367f84efcabb279ae11db2',
+ './install/oc_install.js' => '8f235dd0d14b80df459b2cec2d98822a',
+ './install/register.js' => '8a0db266f6f9c0dab41335bad0a74b3e',
+ './install/siteConfig.js' => '54fde32e90061faa425cc547606c7190',
+ './install/welcome.php' => 'f22cf6a4f9b5c80560191b9a30af6561',
+ './install/systemOptions.php' => 'dda99195980f856f2eaaacb92b5bf729',
+ './install/siteConfig_b.php' => '0460d2110f0fa9cd31f649029564d865',
+ './install/siteConfig_a.php' => '069857546bf6f42053bc3d30ae18264e',
+ './install/seed_data/quotes_SeedData.php' => 'e7299ed86d47891705fd23fe617d96d6',
+ './install/seed_data/Advanced_Password_SeedData.php' => '6bc0432f3b1afcaf9870036f40c1b696',
+ './install/register.php' => '4b966e2b08bf929bb42c2c39ab22ddf7',
+ './install/ready.php' => 'd839502c0b117ba30e8ff39a866c6fe7',
+ './install/processing.gif' => 'd7c43fc19181ee59862601bfce100b41',
+ './install/licensePrint.php' => '729a22dff5007140b80a0f2b74004e39',
+ './install/license.php' => '1677efd52688a75b1e117ab893c98838',
+ './install/language/en_us.lang.php' => 'f470d7bb93e7819a4ce7f51b68d69fd5',
+ './install/performSetup.php' => 'f4da6a9200f7f9256b5d84e924d1f419',
+ './install/install_defaults.php' => 'd1f7954042d157bf247339d6287d3cfb',
+ './install/installType.php' => 'f2e5190e2b1c6f479e27105274ce699e',
+ './install/installSystemCheck.php' => '536855633fb59c458b580a44e5fa2ce0',
+ './install/installHelp.php' => 'b508e56bcf24baa43128cce37f256b65',
+ './install/installDisabled.php' => 'c8ddd0efea951af37d0c70422d23bdfd',
+ './install/install.css' => '3dbd8161ac8e4fb86eec530a1500bd21',
+ './install/download_patches.php' => '1546b155f73b31ab560a5455390ecb67',
+ './install/download_modules.php' => 'f368a12c71aecf9e08494fd3f8c4a218',
+ './install/install_utils.php' => '7f9779e4e5219b4b4f04e167c260f3f6',
+ './install/populateSeedData.php' => '6fc3d9148c6c7decab9851329652c63d',
+ './install/demoData.en_us.php' => '4e0ba9101da24a0074a58744a21d992b',
+ './install/dbConfig_a.php' => '72c6aa33afa0ed595f88a3d9102fdb25',
+ './install/data/disc_client.php' => 'b7f7853de0b429b9be5fdbc9532ecbe0',
+ './install/confirmSettings.php' => '7293087c8d9398db4a643bc46b1e39c1',
+ './install/checkDBSettings.php' => '769cfd353424087bcada73508e5efea8',
+ './install/UserDemoData.php' => 'ca3d776503efa97372447c010084f39c',
+ './install/UploadLangFileCheck.php' => '261dc5321de4bb91d785421bf1256e69',
+ './install/TeamDemoData.php' => '8c63181ad6d759ac25e980851b41b50f',
+ './index.php' => 'ec6eb0c76d968e336e1721d1f6e31d42',
+ './include/JSON.js' => '603ba7c5edab1ce11d7d1ab3fd98e808',
+ './include/externalAPI/ExternalAPIFactory.php' => '99d142a5f3eeef813c4164fe16ef8f66',
+ './include/externalAPI/Base/WebMeeting.php' => 'f98a2dd54e431d4063d19c4e17c24d93',
+ './include/externalAPI/Base/WebFeed.php' => '05211420bd0fe9e85a1415f9a855442b',
+ './include/externalAPI/Base/WebDocument.php' => '44a5ad44ad8c272f39635eabe98a35c9',
+ './include/externalAPI/Base/OAuthPluginBase.php' => '0f482afe47428fa58613ba0b98e68b39',
+ './include/externalAPI/Base/ExternalOAuthAPIPlugin.php' => '3df84091ecb79be92c4fbd8930fee13d',
+ './include/externalAPI/Base/ExternalAPIPlugin.php' => '1cab79f253d174e349726f786429a52b',
+ './include/externalAPI/Base/ExternalAPIBase.php' => '5f3bc85035eae7832b79d57ae4d0ad84',
+ './include/SugarOauth.php' => '1a0d9ab6285929101d4b16ebf667a1b2',
+ './include/SugarDateTime.php' => '90a27d03de3ccb118a2d43e5200893d9',
+ './include/ytree/treeutil.js' => '3ed885ac4154b25eb80fb2c272e63bca',
+ './include/ytree/TreeView/HTMLNode.js' => '84858f719e9b3740d1c58991b0f50d44',
+ './include/ytree/TreeView/MenuNode.js' => '8d001c1014dc6755f150cd83c1dfe07b',
+ './include/ytree/TreeView/Node.js' => '3932d3c94081e6b06eca764d715d8336',
+ './include/ytree/TreeView/RootNode.js' => 'd69d0bab9738e0772368d8a4cd65d031',
+ './include/ytree/TreeView/TaskNode.js' => '705d97683a5d0f9ed47ec82a5b3f94e6',
+ './include/ytree/TreeView/TextNode.js' => '736fa145ec95723013aaf44d3f17fdbb',
+ './include/ytree/TreeView/TreeView.js' => '938b1c6bf4d2fedd1811eadaa7036801',
+ './include/ytree/TreeView/license.txt' => 'a49b2f02abb652b7d30356b10661c18d',
+ './include/ytree/TreeView/img/qtop.png' => '6c5cfe5abcdd98f795456d6c4b07dcef',
+ './include/ytree/TreeView/img/qmiddle.png' => '37835a6f515fd99bf5f8db07e53c9152',
+ './include/ytree/TreeView/img/qbottom.png' => 'c20068ca30513e1889d77a08b4bc3f85',
+ './include/ytree/TreeView/img/navHover2.png' => '474350463d139c3b695f82458621019d',
+ './include/ytree/TreeView/img/logo.gif' => 'b6c525fba741bb9d7409ffd81617e4c0',
+ './include/ytree/TreeView/img/header.gif' => '6e3b4dadd01281fa538f99d8fefc9971',
+ './include/ytree/TreeView/img/greybg.png' => '8044723473c3284f16b941f0b30a4b50',
+ './include/ytree/TreeView/img/folders/vline.gif' => 'b1e532ebb090f9a8b0ff615ad2fd4c5f',
+ './include/ytree/TreeView/img/folders/tph.gif' => '60164cbb3e19f4c7ed2bba9586138c13',
+ './include/ytree/TreeView/img/folders/tp.gif' => '5e116271e871a0d77bd078a5fa155643',
+ './include/ytree/TreeView/img/folders/tn.gif' => 'c95cb41671230a97395284737f8150b8',
+ './include/ytree/TreeView/img/folders/tmh.gif' => '45a194853e0dd0d646bbf21aa58b7b4c',
+ './include/ytree/TreeView/img/folders/tm.gif' => '6c18f25ac052f5b239d2f361a626b944',
+ './include/ytree/TreeView/img/folders/plus.gif' => 'e4f6417645e9b0526b73a4c7471cc668',
+ './include/ytree/TreeView/img/folders/minus.gif' => '9b2c20dc4fed5a951d10b067a402ecd2',
+ './include/ytree/TreeView/img/folders/lph.gif' => 'f2d2976bcde012539f24c0460c4da6b7',
+ './include/ytree/TreeView/img/folders/lp.gif' => 'df6c5a8c9cd674c83d1b2212be6f35c1',
+ './include/ytree/TreeView/img/folders/loading.gif' => '746da00bdbc68a4002a01bba50762057',
+ './include/ytree/TreeView/img/folders/ln.gif' => '2f8a02d3be989aaeb70c83180051aad1',
+ './include/ytree/TreeView/img/folders/lmh.gif' => '97d52e3168253f298a09be30fa4a839e',
+ './include/ytree/TreeView/img/folders/lm.gif' => 'ea5c0b17107fac67fedfbe88f1f48c5e',
+ './include/ytree/TreeView/img/default/vline.gif' => 'b1e532ebb090f9a8b0ff615ad2fd4c5f',
+ './include/ytree/TreeView/img/default/tph.gif' => '6ca162eb3adeb0f1a3b5e764d9cc6de3',
+ './include/ytree/TreeView/img/default/tp.gif' => '10b5c85f091ee8578bd20e10098085e4',
+ './include/ytree/TreeView/img/default/tn.gif' => 'c95cb41671230a97395284737f8150b8',
+ './include/ytree/TreeView/img/default/tmh.gif' => 'bf244a8869eadaebe0ffbdea9b1a18b6',
+ './include/ytree/TreeView/img/default/tm.gif' => '61a3d3de076fe6ac2c13fe41a7cdf12e',
+ './include/ytree/TreeView/img/default/lph.gif' => '3dfb6f00e3f2d3db38ea9e116506586c',
+ './include/ytree/TreeView/img/default/lp.gif' => 'c3b1a88a19bf2613cdc2457d72af2391',
+ './include/ytree/TreeView/img/default/loading.gif' => '8f1310bf9e7aa892d2dc09c4058c7bd3',
+ './include/ytree/TreeView/img/default/ln.gif' => '2f8a02d3be989aaeb70c83180051aad1',
+ './include/ytree/TreeView/img/default/lmh.gif' => '778f9acfb5c8a455c84b82b0893a6e9e',
+ './include/ytree/TreeView/img/default/lm.gif' => '8bfefc209352d78c1fe73f966c3e1a98',
+ './include/ytree/TreeView/img/check/vline.gif' => 'b1e532ebb090f9a8b0ff615ad2fd4c5f',
+ './include/ytree/TreeView/img/check/tph.gif' => '6ca162eb3adeb0f1a3b5e764d9cc6de3',
+ './include/ytree/TreeView/img/check/tp.gif' => '10b5c85f091ee8578bd20e10098085e4',
+ './include/ytree/TreeView/img/check/tn.gif' => 'c95cb41671230a97395284737f8150b8',
+ './include/ytree/TreeView/img/check/tmh.gif' => 'bf244a8869eadaebe0ffbdea9b1a18b6',
+ './include/ytree/TreeView/img/check/tm.gif' => '61a3d3de076fe6ac2c13fe41a7cdf12e',
+ './include/ytree/TreeView/img/check/lph.gif' => '3dfb6f00e3f2d3db38ea9e116506586c',
+ './include/ytree/TreeView/img/check/lp.gif' => 'c3b1a88a19bf2613cdc2457d72af2391',
+ './include/ytree/TreeView/img/check/loading.gif' => '8f1310bf9e7aa892d2dc09c4058c7bd3',
+ './include/ytree/TreeView/img/check/ln.gif' => '2f8a02d3be989aaeb70c83180051aad1',
+ './include/ytree/TreeView/img/check/lmh.gif' => '778f9acfb5c8a455c84b82b0893a6e9e',
+ './include/ytree/TreeView/img/check/lm.gif' => '8bfefc209352d78c1fe73f966c3e1a98',
+ './include/ytree/TreeView/img/check/check2.gif' => '691389bb26f429e79666599992a384b3',
+ './include/ytree/TreeView/img/check/check1.gif' => '3544088604d6d6e519a3a392db89c38d',
+ './include/ytree/TreeView/img/check/check0.gif' => 'd3e7d474e008b8cb585eb05c5baafe5a',
+ './include/ytree/TreeView/img/check/Thumbs.db' => '3cf8fd69dbfff71a14b3ad14dadb05b2',
+ './include/ytree/TreeView/img/bullet.gif' => '856d0243cbbf9bd9466c760530b28b9d',
+ './include/ytree/TreeView/css/forecasts/tree.css' => '59797a1f43dc5602932f826d687d398f',
+ './include/ytree/TreeView/css/folders/tree.css' => '59797a1f43dc5602932f826d687d398f',
+ './include/ytree/TreeView/css/default/tree.css' => '20814fc9a87f0aa930984569bd77fd2c',
+ './include/ytree/TreeView/css/check/tree.css' => '724cc963f0904fe2ed1f443cef791197',
+ './include/ytree/TreeView/anim/TVAnim.js' => 'cf0ce06993b1e732fb7626c429b5dd9d',
+ './include/ytree/TreeView/anim/TVFadeIn.js' => 'a49bd8604c75d29778602f346001a761',
+ './include/ytree/TreeView/anim/TVFadeOut.js' => 'd1fc4b1340b7430688b0866493d11685',
+ './include/ytree/Tree.php' => 'dba7bc832c460882de6606b42fec5110',
+ './include/ytree/Node.php' => '3fbb0e6b0a874dcec7e00120f6a67238',
+ './include/ytree/ExtNode.php' => 'e79a18d84454f59a3d6041e3bc923e36',
+ './include/vCard.php' => 'f6b2d22c63948aaedc60e32b21cb33ef',
+ './include/utils/php_zip_utils.php' => 'e73ff6906b73e6e7f342ade77c532902',
+ './include/utils/sugar_file_utils.php' => '172fe11f930d93669caca3a1b933c8c5',
+ './include/utils/security_utils.php' => '1fd66ac45eb2d7a812efeff2cab267fc',
+ './include/utils/progress_bar_utils.php' => '72633b667109464bafa8fc027c9938d4',
+ './include/utils/zip_utils.php' => '31f3c36e8262b2c459aac59324a5e122',
+ './include/utils/logic_utils.php' => 'a59013e866e3bed66ea19d404dad3a5d',
+ './include/utils/layout_utils.php' => 'fbfbcf40a528c3f3d668aa3e534f9ce2',
+ './include/utils/file_utils.php' => '32a767ca3b41d57f6bd03bb8b6c896d0',
+ './include/utils/external_cache.php' => '466fe3b797c84f8dae0747999ab6b8dc',
+ './include/utils/mvc_utils.php' => 'cc4dbe47244ec12a530eed1c2df15605',
+ './include/utils/encryption_utils.php' => '18ee99143ae59f50d72b3c022fea5a39',
+ './include/utils/db_utils.php' => '4b5f58235f45f5ba81951abb6443dcd1',
+ './include/utils/autoloader.php' => 'c17b72066f14f04cf397612ca6406d35',
+ './include/utils/array_utils.php' => 'f0e351c9612a903fefdac36e9894097c',
+ './include/utils/activity_utils.php' => 'fc0b073a8b715799ec088c1452378686',
+ './include/utils/LogicHook.php' => '6dbc41ebec77d4359d1df5f411ccd2ff',
+ './include/utils.php' => 'a545314158d73488c9317566402e269c',
+ './include/upload_file.php' => 'fef35543cc9ff150f8ad13eb38ac0fb3',
+ './include/timezone/timezones.php' => 'c1b535767fd4bb7fdb04d03a91ceed6c',
+ './include/templates/TemplateGroupChooser.php' => '1971bdb38d86951c192a3f97e38a2ead',
+ './include/templates/TemplateDragDropChooser.php' => 'dd202c795367f01e884d5e2e95e48ec3',
+ './include/templates/Template.php' => 'aa5a008f2461eef7ae668afb0e95a6fa',
+ './include/tcpdf/unicode_data.php' => 'd20008bba6110e94611ac0939a92913b',
+ './include/tcpdf/tcpdf.php' => '2d63d36838205a8d52725d0c888bbab5',
+ './include/tcpdf/htmlcolors.php' => '0015bab537767d694b0304d91a87c5f1',
+ './include/tcpdf/fonts/utils/makefont.php' => '07068b0cd9415eaa2c4165f0bc980e7d',
+ './include/tcpdf/fonts/utils/enc/koi8-u.map' => '9046b7222af56cb6bbc349cac9dbabdf',
+ './include/tcpdf/fonts/utils/enc/koi8-r.map' => '04f520a75d940d47dec77f1cc0539fbb',
+ './include/tcpdf/fonts/utils/enc/iso-8859-9.map' => '8647a52d390b37e26ed05e5ed6793b76',
+ './include/tcpdf/fonts/utils/enc/iso-8859-7.map' => 'd0712d80739797b3495f67490d328d08',
+ './include/tcpdf/fonts/utils/enc/iso-8859-5.map' => '82a2003dbd3b5e359ea6b19898d4bc89',
+ './include/tcpdf/fonts/utils/enc/iso-8859-4.map' => '0355d40c58aa1db273ced4e7697b15b0',
+ './include/tcpdf/fonts/utils/enc/iso-8859-2.map' => '47507c221cb986421905861794102889',
+ './include/tcpdf/fonts/utils/enc/iso-8859-16.map' => 'b56b0749d1ac137491e3714039009960',
+ './include/tcpdf/fonts/utils/enc/iso-8859-15.map' => '3d09f07dd446c6a2fc13a609c084e854',
+ './include/tcpdf/fonts/utils/enc/iso-8859-11.map' => '83ecaf01ee009dc60c74e4fdaff0aa26',
+ './include/tcpdf/fonts/utils/enc/iso-8859-1.map' => '53bffea6677269f073516bb10d28de02',
+ './include/tcpdf/fonts/utils/enc/cp874.map' => '4fbafebd9ea29f4e10889749ec414113',
+ './include/tcpdf/fonts/utils/enc/cp1258.map' => '86a4dee852783cc5b85ac83a82729d47',
+ './include/tcpdf/fonts/utils/enc/cp1257.map' => 'fe87c493f46ddfd8b57212cbc52e25ac',
+ './include/tcpdf/fonts/utils/enc/cp1255.map' => 'c469cfdac7010e50b7fbcabaaf1393b1',
+ './include/tcpdf/fonts/utils/enc/cp1254.map' => '46e48666d54b3bc0d7eba59e1fc768f3',
+ './include/tcpdf/fonts/utils/enc/cp1253.map' => '907301f283e7457d037fee0adb5ce187',
+ './include/tcpdf/fonts/utils/enc/cp1252.map' => '8d7358daa8b750747694e822111898f9',
+ './include/tcpdf/fonts/utils/enc/cp1251.map' => 'ee2f10b8198819a33d4aa566a7df4ec6',
+ './include/tcpdf/fonts/utils/enc/cp1250.map' => '8a021bf2c9796273f4b2c3824efefc1d',
+ './include/tcpdf/fonts/uni2cid_ak12.php' => '48e09bff813f4b234c6b7e9c467512d2',
+ './include/tcpdf/fonts/uni2cid_aj16.php' => 'f3ccaedbf079a409290fbfcdbaabb8bb',
+ './include/tcpdf/fonts/uni2cid_ag15.php' => '1305b98f6f8418b9f87d241e39e22cbe',
+ './include/tcpdf/fonts/uni2cid_ac15.php' => '6504890ef8fbceb731846f0bdc687c9f',
+ './include/tcpdf/config/tcpdf_config_alt.php' => 'c76e0654a76ace127b7bbac643a56adf',
+ './include/tcpdf/config/tcpdf_config.php' => '8a16a8d652025639c269b86e8131c942',
+ './include/tcpdf/config/lang/ita.php' => '6799df637c7ddbb4d3bec7585ca54467',
+ './include/tcpdf/config/lang/eng.php' => '8e9d665646ab2bb94fd7479a05a834d9',
+ './include/tcpdf/barcodes.php' => 'ae6a844d3c0d140c53e0f8fa29256714',
+ './include/tcpdf/README.TXT' => 'f64835b5e9149a89515a9eb589d13a38',
+ './include/tcpdf/LICENSE.TXT' => '7fbc338309ac38fefcd64b04bb903e34',
+ './include/tcpdf/CHANGELOG.TXT' => 'b41664d05748e067b3d52ba1eba1e9c3',
+ './include/tcpdf/2dbarcodes.php' => 'ffd7b4d2b008aeffecb7967041777c44',
+ './include/tabs.php' => '040d7f98904ecbf8228d2cc907ca9be2',
+ './include/tabConfig.php' => '7cc5eece0701fae3dfeade19d4469039',
+ './include/resource/ResourceManager.php' => '362f6d3f49acde341c5c2cec87dc4bfd',
+ './include/resource/Observers/WebResourceObserver.php' => 'ce9c1f7d7429a4bcab42ea6a5136aee4',
+ './include/resource/Observers/SoapResourceObserver.php' => 'a89ef8aa12efcee5ff1e8eb6eef61432',
+ './include/resource/Observers/ResourceObserver.php' => 'b6b3994aaf19825c9caabd867dc11313',
+ './include/reCaptcha/recaptchalib.php' => '198a9ad0abe0be3729926245915d6dc0',
+ './include/reCaptcha/README' => 'd6cc7bf9298e02f88ee8872859a324f8',
+ './include/reCaptcha/LICENSE' => '8c863d134de86e9f4623b04127051732',
+ './include/phpmailer/license.txt' => '278f2557e3b277b94e9a8430f6a6d0a9',
+ './include/phpmailer/language/phpmailer.lang-tr.php' => '7ddc04019a3ab315429a01d1eac1ac10',
+ './include/phpmailer/language/phpmailer.lang-se.php' => '3c06baba1b6ab4d8acf0602cd7e3700a',
+ './include/phpmailer/language/phpmailer.lang-ru.php' => '1ba9cde2e2ad42a3f367bc3ffa070342',
+ './include/phpmailer/language/phpmailer.lang-ro.php' => 'cba42902cc751ea7e80720e5ba6b9d1a',
+ './include/phpmailer/language/phpmailer.lang-pl.php' => '72d18cb4146127e89db0a402fb18e10d',
+ './include/phpmailer/language/phpmailer.lang-no.php' => '60a01ff00af72c21a9afa8b906cb160a',
+ './include/phpmailer/language/phpmailer.lang-nl.php' => '69c2fb42974c0e5046c83182238608b3',
+ './include/phpmailer/language/phpmailer.lang-ja.php' => '0a79142a326c7f23f4ebcac251b9a1e2',
+ './include/phpmailer/language/phpmailer.lang-it.php' => '6d9025ba4f6b9dbe9bbf0044f77f407c',
+ './include/phpmailer/language/phpmailer.lang-hu.php' => '49bdceec325435adae3b5f9c4d3f86de',
+ './include/phpmailer/language/phpmailer.lang-fr.php' => 'c693b4a9214c28fe10c65072833e5bd7',
+ './include/phpmailer/language/phpmailer.lang-fo.php' => '19c5f009920dff72a02675dad3c6c749',
+ './include/phpmailer/language/phpmailer.lang-fi.php' => '1d0b14ace9b7c075be51756462fdcbd7',
+ './include/phpmailer/language/phpmailer.lang-et.php' => '50e92cd6a80d425bf79b0347b27c7364',
+ './include/phpmailer/language/phpmailer.lang-es.php' => '84174963798d08a7ccdc4ca9c969e3d6',
+ './include/phpmailer/language/phpmailer.lang-en.php' => '50e6e86986c7f547b7e1e4406eb6b54b',
+ './include/phpmailer/language/phpmailer.lang-dk.php' => 'e3bebecccdbd1b7b07f32989d44420f1',
+ './include/phpmailer/language/phpmailer.lang-de.php' => 'b825169df27b56b0592992f13d6eeecb',
+ './include/phpmailer/language/phpmailer.lang-cz.php' => '71777a5d541217d10f85bdd3ee09f3c9',
+ './include/phpmailer/language/phpmailer.lang-ca.php' => '228a8e6e6eb5fee58942f5d0740314ce',
+ './include/phpmailer/language/phpmailer.lang-br.php' => 'd294ef50bd7d57e70e866a7618528048',
+ './include/phpmailer/language/phpmailer.lang-ar.php' => '007791fbed48cbc28248a543e023ddbf',
+ './include/phpmailer/class.smtp.php' => '64255208cd6f263a69d58918dcb7138d',
+ './include/phpmailer/class.phpmailer.php' => 'a78d163362a44ff475e9141c3c75ed99',
+ './include/phpmailer/README' => '9522b5930919ec251b6f4edda0584480',
+ './include/pclzip/readme.txt' => '2265cad9ccb84cfcd4093ce26b22dc97',
+ './include/pclzip/pclzip.lib.php' => 'f42cfbdfccc2dcd85df39638ae2d141c',
+ './include/pclzip/gnu-lgpl.txt' => '7fbc338309ac38fefcd64b04bb903e34',
+ './include/nusoap/nusoapmime.php' => '03ad5f19e5f8ca40b6ecc8bb5ff7d06d',
+ './include/nusoap/nusoap.php' => '08f16a90957ec98acd49a1a5a43458dc',
+ './include/nusoap/license.txt' => '25823f4a2e463ab2c6b5873f07e428e1',
+ './include/nusoap/class.xmlschema.php' => '619375dc901a69c6ed625cc2e38beae9',
+ './include/nusoap/class.wsdlcache.php' => 'f8f80fa3fa56b0d0c3169cff60bfc3c2',
+ './include/nusoap/class.wsdl.php' => 'cd7f1a43ca08891ac1ce04d4d1282c49',
+ './include/nusoap/class.soapclient.php' => 'b013aebcb51815543091c4914cb16157',
+ './include/nusoap/class.soap_val.php' => '084a898ecf261c201427fd41d4ee40e0',
+ './include/nusoap/class.soap_transport_http.php' => 'fc8d8de37eeea8b79c9963bd8ef1357b',
+ './include/nusoap/class.soap_server.php' => '4fb2dcda6452dfa5b147d5032b325be3',
+ './include/nusoap/class.soap_parser.php' => '9498d0e4b5b3bf69032a72ca147c2f7a',
+ './include/nusoap/class.soap_fault.php' => 'bf058747b0ecefe183194300dbd73dff',
+ './include/nusoap/class.nusoap_base.php' => 'cf8310e722c8fc7e310dc5ba413b1ea6',
+ './include/nusoap/changelog' => 'd75ed67ec93c02e5bce94eee8205b425',
+ './include/modules.php' => '78c531f6122d2ba38aa8c211d9ceb2db',
+ './include/language/jsLanguage.php' => 'c44b0ccdccdfbd7eb0e1eb36f6628c56',
+ './include/language/en_us.notify_template.html' => 'dc07fa34ed74873ba996cc637f8889a8',
+ './include/language/en_us.lang.php' => '3ffcc22b71675543a578164f674f2290',
+ './include/json_config.php' => '8c301d204675cf3efe0e2d72d40abe43',
+ './include/jsolait/init.js' => '15b8d113066ad400aa80d9dfc35b544b',
+ './include/jsolait/missingmixin.js' => 'e87a7ee61bd9e134791325d98ca72d9b',
+ './include/jsolait/lib/codecs.js' => 'c3e9eb73b3187f1b69e33bde1a635712',
+ './include/jsolait/lib/crypto.js' => '3f96a9c701df13c7e3439dc66ac9cc83',
+ './include/jsolait/lib/jsonrpc.js' => '1dc4f35a1cc650dceae36463fc421751',
+ './include/jsolait/lib/jsonrpclite.js' => '087168595f8d7d4633b0d5ebc5efa0ad',
+ './include/jsolait/lib/lang.js' => '4680e079a4114db6ef54d0ced899547f',
+ './include/jsolait/lib/langlite.js' => 'd76525f7eeffc76252d0be3cb72081bb',
+ './include/jsolait/lib/urllib.js' => '7dfb28b9ac9435bee4a1d1aa8721050b',
+ './include/jsolait/lib/xml.js' => '778da59ff6d89d7c6cde9814db71f63e',
+ './include/jsolait/lib/xmlrpc.js' => '561bc3aca65261c577ab56b9908d6b78',
+ './include/jsolait/copying.txt' => '7fbc338309ac38fefcd64b04bb903e34',
+ './include/jsolait/LICENSE' => '7fbc338309ac38fefcd64b04bb903e34',
+ './include/javascript/sugar_grp_quickcomp.js' => '3b337ebfdd4305d5d33c23b120effb5c',
+ './include/javascript/sugar_grp_emails.js' => '4c4ab7968fe0d9a61e35f8625b4d8365',
+ './include/javascript/sugar_grp_overlib.js' => '697dc29858751a3a9848ded2d5cc9638',
+ './include/javascript/sugar_grp_yui2.js' => '810b0d52b0d73ca309673fa8c88f7275',
+ './include/javascript/sugar_grp_yui_widgets.css' => '9fead3f803643c74f997b323e0a7b4e7',
+ './include/javascript/sugar_grp_yui_widgets.js' => '284e935d82048407ad58bb58b17e9f51',
+ './include/javascript/sugar_grp1_yui.js' => '49bb537e8497adc31c6eef821140542e',
+ './include/javascript/sugar_grp1.js' => 'a13d69863100d17adb938b1287dbf2cb',
+ './include/javascript/cookie.js' => 'de61d7b1eb4ba59186984d89f628eae2',
+ './include/javascript/dashlets.js' => '8ce96c35d117268f854ee736ce3f8726',
+ './include/javascript/include.js' => '111549b33d8ca4011ca99a23105050fe',
+ './include/javascript/jsclass_async.js' => '4c176f9adec386d72d222e4b52da0229',
+ './include/javascript/jsclass_base.js' => '757af42039add740fb838fac2d8baa4a',
+ './include/javascript/menu.js' => '3abcb7c05eff710b8fa52d18d7a14834',
+ './include/javascript/overlibmws.js' => 'f4bac256b9f8dc64ba4b22a8e1259ea2',
+ './include/javascript/overlibmws_iframe.js' => 'e3c045ac5f7b73aeb761395339d82f30',
+ './include/javascript/popup_helper.js' => 'b71cea0d43e03dd24bbef622e1b94e73',
+ './include/javascript/popup_parent_helper.js' => 'a6c24762a5082cd5c3714f5d6c817db5',
+ './include/javascript/quickCompose.js' => '8702e1904189f22c31f88b05e22398e7',
+ './include/javascript/quicksearch.js' => '31ff4f0a3ab8b060848420e09d9b7973',
+ './include/javascript/report_additionals.js' => 'bfb26a986bc020109f20b703fa6a6a9d',
+ './include/javascript/sugar_3.js' => '85fa75ab053d349298e1bd07e2498127',
+ './include/javascript/sugar_connection_event_listener.js' => '119ff2a497fd3c53d9f9a9b3d2226357',
+ './include/javascript/swfobject.js' => 'be72d27dc0b8bf006dcb764e41153465',
+ './include/javascript/calendar.js' => 'd6c576e0d7ddcb1dd04cf788e8215846',
+ './include/javascript/iscroll.js' => '0b9c55c0f6a677ef7ca628f156527456',
+ './include/javascript/yui3/index.html' => '9ff89ada5571d6d03eccc45dad57bb16',
+ './include/javascript/yui3/build/yui/get-min.js' => '1ef08bacb464ead1fbdb74d45addca6f',
+ './include/javascript/yui3/build/yui/get.js' => '1b0ea131a29adf2a1957ad11be4547ff',
+ './include/javascript/yui3/build/yui/yui-base-min.js' => 'de6b8b73e1c8e76f133d11558e7c4bc1',
+ './include/javascript/yui3/build/yui/yui-base.js' => '29bd3f7d9d24e14f1466ca6cf3af0621',
+ './include/javascript/yui3/build/yui/yui-later-min.js' => 'de7018bad67d935f79056f53c4b9bae8',
+ './include/javascript/yui3/build/yui/yui-later.js' => '07f60f940e65cba323f7d1ea7770d6c4',
+ './include/javascript/yui3/build/yui/yui-log-min.js' => 'dcf94ddce82e2f7cfab2fd161cd1aa00',
+ './include/javascript/yui3/build/yui/yui-log.js' => '7c3b34cc3d8859dd9e02de454ba709bd',
+ './include/javascript/yui3/build/yui/yui-min.js' => '0ca4f321bfeed095cb08925a08b114cf',
+ './include/javascript/yui3/build/yui/yui.js' => '634b41d7fe986424d3e7763f1b18e9b2',
+ './include/javascript/yui3/build/yui-base/yui-base-min.js' => 'a20b8b96c0821cce4cc20ab3b99878dd',
+ './include/javascript/yui3/build/yui-base/yui-base.js' => '3a83e55089053158f8ec7423e2eeff57',
+ './include/javascript/yui3/build/widget/widget-min.js' => '24928861ac270e600b2ea3277612c5f1',
+ './include/javascript/yui3/build/widget/widget-position-ext-min.js' => '416976f75c79b425008d728aa253db16',
+ './include/javascript/yui3/build/widget/widget-position-ext.js' => 'afb3f01c231512ef5a280dda464dd5e1',
+ './include/javascript/yui3/build/widget/widget-position-min.js' => '3391301b7af5dea8c5163d0ddc63b480',
+ './include/javascript/yui3/build/widget/widget-position.js' => 'dfcee3d06222c8fc165b3627fed4502d',
+ './include/javascript/yui3/build/widget/widget-stack-min.js' => '4a4ab3267d670687cd8e815fb078d72c',
+ './include/javascript/yui3/build/widget/widget-stack.js' => 'cd97ea674bbe04b6a407d41df4f9c227',
+ './include/javascript/yui3/build/widget/widget-stdmod-min.js' => 'a846de3ea9c28347e820e1d89e2a6e8d',
+ './include/javascript/yui3/build/widget/widget-stdmod.js' => '7c224c854eee925dfcafe3721b4097e8',
+ './include/javascript/yui3/build/widget/widget.js' => '8679113a40a66836f11ce5599a12466a',
+ './include/javascript/yui3/build/widget/assets/widget-stack-core.css' => 'a919053fece78808dea8cf75726a2538',
+ './include/javascript/yui3/build/widget/assets/widget-core.css' => 'b5179c8ccb369156c4f06f95a0b8e990',
+ './include/javascript/yui3/build/widget/assets/skins/sam/widget.css' => 'decf1eca11ec8631869f28489f971cdb',
+ './include/javascript/yui3/build/widget/assets/skins/sam/widget-stack.css' => '49c59b028955c4d2636b68b2611fffc9',
+ './include/javascript/yui3/build/widget/assets/skins/sam/widget-stack-skin.css' => '59812846f1a49258858027fdff6fbaf3',
+ './include/javascript/yui3/build/widget/assets/skins/sam/widget-skin.css' => '59812846f1a49258858027fdff6fbaf3',
+ './include/javascript/yui3/build/test/test-min.js' => '033ba1b211a9e4d70660aa05826991de',
+ './include/javascript/yui3/build/test/test.js' => 'f50abfdd993e09d5da39e7ce7d50a18c',
+ './include/javascript/yui3/build/test/assets/test-console.css' => 'b0ea686a876f14fce6954adf5d36529f',
+ './include/javascript/yui3/build/substitute/substitute-min.js' => 'fc6b84ff1528df7994ed6356bf01f86e',
+ './include/javascript/yui3/build/substitute/substitute.js' => 'ab69725d254c9f349e344ac960172dab',
+ './include/javascript/yui3/build/stylesheet/stylesheet-min.js' => '2a4cdbf63bc1ca5dda092977b190a1ae',
+ './include/javascript/yui3/build/stylesheet/stylesheet.js' => 'f0d67c55d1fd7da85968ed7c2b9262ba',
+ './include/javascript/yui3/build/slider/slider-min.js' => 'e303db37ce46472d8f55e34d54a04137',
+ './include/javascript/yui3/build/slider/slider.js' => '540f11a0718a9a074b87f3430a509ae9',
+ './include/javascript/yui3/build/slider/assets/slider-core.css' => '9885637b85e819c60399de5f884077a0',
+ './include/javascript/yui3/build/slider/assets/skins/sam/thumb-classic-y.png' => 'e6e4114cf7d61a20a5dbd4c76a5be209',
+ './include/javascript/yui3/build/slider/assets/skins/sam/thumb-classic-x.png' => 'deb8a33ec9ce90048552b7e5a1037e7d',
+ './include/javascript/yui3/build/slider/assets/skins/sam/slider.css' => '326cae4687cb2c94162dee17c396bc93',
+ './include/javascript/yui3/build/slider/assets/skins/sam/slider-skin.css' => '9c8fb03e5edee0a7bd72977c65cfcecd',
+ './include/javascript/yui3/build/slider/assets/skins/sam/rail-classic-y.png' => '3a6d3464ade27ee27bda07164ea29522',
+ './include/javascript/yui3/build/slider/assets/skins/sam/rail-classic-x.png' => '0e63959f97250c7508a51156d6b14485',
+ './include/javascript/yui3/build/queue-promote/queue-promote-min.js' => '5325cd2a3927bc2604d215bda814086b',
+ './include/javascript/yui3/build/queue-promote/queue-promote.js' => 'c638f4003c43efd4e7a0514efb800a29',
+ './include/javascript/yui3/build/profiler/profiler-min.js' => 'f2edfec26e251a0c0e8ab2a60d8ae1d1',
+ './include/javascript/yui3/build/profiler/profiler.js' => '76c49beb7cbb35b363926fb62caf369c',
+ './include/javascript/yui3/build/pluginhost/pluginhost-min.js' => '1b6d52125e55f93b4d838d6f10bd07fb',
+ './include/javascript/yui3/build/pluginhost/pluginhost.js' => '8f9921dd73f6d2b3aca74cd0bcc378a3',
+ './include/javascript/yui3/build/plugin/plugin-min.js' => '9a6f05085e5789cc81b7bdf7f4416a86',
+ './include/javascript/yui3/build/plugin/plugin.js' => 'e874af2b2ce922f57d54decbc7e4a1d1',
+ './include/javascript/yui3/build/overlay/overlay-min.js' => 'b4436b95349403bef12b7a487abda44d',
+ './include/javascript/yui3/build/overlay/overlay.js' => '0ffa172f3345c7272130a8641a865879',
+ './include/javascript/yui3/build/overlay/assets/skins/sam/overlay.css' => '219eebcee501b42ad383b829b2769f04',
+ './include/javascript/yui3/build/overlay/assets/skins/sam/overlay-skin.css' => '59812846f1a49258858027fdff6fbaf3',
+ './include/javascript/yui3/build/overlay/assets/overlay-core.css' => 'ff18ef1ceac2fc47dc0a920ca0c6d5bd',
+ './include/javascript/yui3/build/oop/oop-min.js' => '94e8be1ddfeb4e286058df79e159b989',
+ './include/javascript/yui3/build/oop/oop.js' => '89ce994a0c43467881bf18a64b5001c0',
+ './include/javascript/yui3/build/node/node-aria-min.js' => '07baaf24f1a0b26bb8937d79f2012d83',
+ './include/javascript/yui3/build/node/node-aria.js' => 'a14fb15d9ce6b7bde2a0df7c70d5a2b5',
+ './include/javascript/yui3/build/node/node-base-min.js' => '16c579707a142ca35e59a415be9909d1',
+ './include/javascript/yui3/build/node/node-base.js' => '975e3f3e54f6c690d5995929dd283b24',
+ './include/javascript/yui3/build/node/node-event-delegate-min.js' => 'a2a8d53ca7b2393dc6d05da83ecfaf64',
+ './include/javascript/yui3/build/node/node-event-delegate.js' => '13125b0d67d12074bc6a9269c116c021',
+ './include/javascript/yui3/build/node/node-event-simulate-min.js' => '1de193e0c6ea9165fe0138c2d1efb1eb',
+ './include/javascript/yui3/build/node/node-event-simulate.js' => '8e03b149d0194d62b216a3f223b1cf22',
+ './include/javascript/yui3/build/node/node-min.js' => 'aa20c92139c922aa82c04e3f64405ee9',
+ './include/javascript/yui3/build/node/node-pluginhost-min.js' => '618bbd8e8143f23e519aade581751a93',
+ './include/javascript/yui3/build/node/node-pluginhost.js' => 'e367d2d1cb5a0b61213eacd6f2a2c7b6',
+ './include/javascript/yui3/build/node/node-screen-min.js' => '5e5e2b782c37dd0d55dfeb48d9d103f7',
+ './include/javascript/yui3/build/node/node-screen.js' => 'bb21fc6905894c310cc6e0f06b416ada',
+ './include/javascript/yui3/build/node/node-style-min.js' => 'c152d2219859cb6b990d528dd6b2dd7d',
+ './include/javascript/yui3/build/node/node-style.js' => 'af32e340c2380c0bbb5d8bc1ea651913',
+ './include/javascript/yui3/build/node/node.js' => 'f3a1b3164d28dbce4a782bd411d37ffe',
+ './include/javascript/yui3/build/node-menunav/node-menunav-min.js' => '47cb82e5f624fce3a7ba0ad0271f881e',
+ './include/javascript/yui3/build/node-menunav/node-menunav.js' => '18138e58f4fe46fef9dfa837aef72951',
+ './include/javascript/yui3/build/node-menunav/assets/skins/sam/vertical-menu-submenu-indicator.png' => '87184ef3556eee00e54a1f851c12207f',
+ './include/javascript/yui3/build/node-menunav/assets/skins/sam/node-menunav.css' => '341ba353588269be14ed6d93c46ca237',
+ './include/javascript/yui3/build/node-menunav/assets/skins/sam/node-menunav-skin.css' => 'a66ff1364052f54d7572d85dfe8661c7',
+ './include/javascript/yui3/build/node-menunav/assets/skins/sam/horizontal-menu-submenu-toggle.png' => 'e1b5111045cdbae5f59e6df43a2bcafd',
+ './include/javascript/yui3/build/node-menunav/assets/skins/sam/horizontal-menu-submenu-indicator.png' => '62b769d3a600489aea50fb253739d7f5',
+ './include/javascript/yui3/build/node-menunav/assets/node-menunav-core.css' => '9b56a6d04e68a3e5f1687245a6084a7e',
+ './include/javascript/yui3/build/node-focusmanager/node-focusmanager-min.js' => '1ca23d0d868386205fdb5acacdc4cddb',
+ './include/javascript/yui3/build/node-focusmanager/node-focusmanager.js' => '00faeecf0efad5efdf4b56ea6d31a28b',
+ './include/javascript/yui3/build/loader/loader-min.js' => 'f943f3e274fddf2e937a7bab9bc70323',
+ './include/javascript/yui3/build/loader/loader.js' => 'd82357d912f5af368f970c11eb0c1618',
+ './include/javascript/yui3/build/json/json-min.js' => 'bd246199d39cab10193ccabf17452fcc',
+ './include/javascript/yui3/build/json/json-parse-min.js' => '443cd2c26a853b2263b712c1b0ed91a2',
+ './include/javascript/yui3/build/json/json-parse.js' => '6b19d09358150539ab07206e67806693',
+ './include/javascript/yui3/build/json/json-stringify-min.js' => '1891fce482a008b15809fbd87e27e64f',
+ './include/javascript/yui3/build/json/json-stringify.js' => 'bc92bf8e7f328098af98dc56a5c66628',
+ './include/javascript/yui3/build/json/json.js' => 'e717d955bf0c1984683ea676806b418c',
+ './include/javascript/yui3/build/io/io-base-min.js' => 'ad093d327db9acd44e96c7bec01834c2',
+ './include/javascript/yui3/build/io/io-base.js' => '3c2749e169c78fd48f454bcb1296eac9',
+ './include/javascript/yui3/build/io/io-form-min.js' => 'd4c1b128c4b17011dfa59b7090a065a1',
+ './include/javascript/yui3/build/io/io-form.js' => 'f8ef8a53c0bb9eb7911ec2c26f17f331',
+ './include/javascript/yui3/build/io/io-min.js' => 'cb6737d563147a205a22c71e869e52f4',
+ './include/javascript/yui3/build/io/io-queue-min.js' => 'c004a8cfff9e76fa239812993e7e526b',
+ './include/javascript/yui3/build/io/io-queue.js' => 'c3833ccde8ad3aca5a4a862d131c10d9',
+ './include/javascript/yui3/build/io/io-upload-iframe-min.js' => 'efe6317a865d54dc3897825311ac5a56',
+ './include/javascript/yui3/build/io/io-upload-iframe.js' => '2f289cab687bd8637766064f1aea23b1',
+ './include/javascript/yui3/build/io/io-xdr-min.js' => '1dcd16c0c601c972c41579c7051a2a13',
+ './include/javascript/yui3/build/io/io-xdr.js' => '25dda989d81d33b916cb5a5f2bcf284d',
+ './include/javascript/yui3/build/io/io.js' => '1f71b1743c41fa870c0626b8bfd82341',
+ './include/javascript/yui3/build/io/io.swf' => '7f22020ec768608f2620681547e5cfbc',
+ './include/javascript/yui3/build/imageloader/imageloader-min.js' => '0dd73afb8af9fa4c103a5de38bbec440',
+ './include/javascript/yui3/build/imageloader/imageloader.js' => 'eb1dccf51b62a4c59b3da3a5b2ffee14',
+ './include/javascript/yui3/build/history/history-min.js' => '22140bf6f377d6b725937e900e68dab4',
+ './include/javascript/yui3/build/history/history.js' => '5a8a024b8e896200e698ae241fe4c707',
+ './include/javascript/yui3/build/get/get-min.js' => '1ef08bacb464ead1fbdb74d45addca6f',
+ './include/javascript/yui3/build/get/get.js' => '1b0ea131a29adf2a1957ad11be4547ff',
+ './include/javascript/yui3/build/event/event-base-min.js' => 'bd248be116bba85823265a8206cbe36d',
+ './include/javascript/yui3/build/event/event-base.js' => '92ccc471cdee58198eab607943360562',
+ './include/javascript/yui3/build/event/event-delegate-min.js' => '428983af53d0b8b858fb46c13f516e1c',
+ './include/javascript/yui3/build/event/event-delegate.js' => 'eb1d77f335a5b34fe73a0c94b414ada6',
+ './include/javascript/yui3/build/event/event-focus-min.js' => 'ec401fcab4159c03540d063bef4d9b22',
+ './include/javascript/yui3/build/event/event-focus.js' => 'ff7884f68c5470538f166cbe52d5e55d',
+ './include/javascript/yui3/build/event/event-key-min.js' => '821d19630010257815fb0b44b3aadfe9',
+ './include/javascript/yui3/build/event/event-key.js' => 'b3416de8b050f1abe6bb3cea6e523ad3',
+ './include/javascript/yui3/build/event/event-min.js' => 'a315bf56377bccb7ac2b43331a4b1cd8',
+ './include/javascript/yui3/build/event/event-mouseenter-min.js' => '85690f5f025129474a8e06aa70625b89',
+ './include/javascript/yui3/build/event/event-mouseenter.js' => 'c2e50e17beaaa3e5b0d4eb182fd294f8',
+ './include/javascript/yui3/build/event/event-mousewheel-min.js' => '2121a34c9a737efbf048f8616a8e1369',
+ './include/javascript/yui3/build/event/event-mousewheel.js' => '2e25fb70f46d98b7e96782f8251fad2d',
+ './include/javascript/yui3/build/event/event-resize-min.js' => '3bd4f239792c2098d5b8f66dbc1a7ad1',
+ './include/javascript/yui3/build/event/event-resize.js' => '48e0b8e089fc4fc81f7ea5da8b16dc0e',
+ './include/javascript/yui3/build/event/event.js' => '04a6c39b6b5e65fcf9668a8d86b7cbd7',
+ './include/javascript/yui3/build/event-simulate/event-simulate-min.js' => '7818508cf6a0e25499c24688b2b20406',
+ './include/javascript/yui3/build/event-simulate/event-simulate.js' => '6f662a708dc2340ca13036fda5bab4f3',
+ './include/javascript/yui3/build/event-custom/event-custom-base-min.js' => '4b625cecad442abbb569a0cdd0887493',
+ './include/javascript/yui3/build/event-custom/event-custom-base.js' => '1a5dd6bf38d5c749fead00d2e553bddd',
+ './include/javascript/yui3/build/event-custom/event-custom-complex-min.js' => '1e6c6cf8ea2edee2a161a718dccc2837',
+ './include/javascript/yui3/build/event-custom/event-custom-complex.js' => '180cac471b923c24a13f78844f019d83',
+ './include/javascript/yui3/build/event-custom/event-custom-min.js' => 'dea28503b25756864b17e10eda54d61c',
+ './include/javascript/yui3/build/event-custom/event-custom.js' => 'c668094f09a9b0bc5578791e47fd2893',
+ './include/javascript/yui3/build/dump/dump-min.js' => '068e9eea50bfb83a9c12afe83cf499b7',
+ './include/javascript/yui3/build/dump/dump.js' => '91be1ba2820235cf17e38bcb605f8b78',
+ './include/javascript/yui3/build/dom/dom-base-min.js' => '9c3ad02ffbb1f3db1be7da64f8623c9e',
+ './include/javascript/yui3/build/dom/dom-base.js' => 'd76d66b67ec8e36fe28592b4c6c5a30f',
+ './include/javascript/yui3/build/dom/dom-min.js' => '37e86bf4f93713df95b9b938567334d7',
+ './include/javascript/yui3/build/dom/dom-screen-min.js' => '08251d3308d9b44f1dde4acf1e15d633',
+ './include/javascript/yui3/build/dom/dom-screen.js' => 'd0bc1069b22426d73d10462d7776cd89',
+ './include/javascript/yui3/build/dom/dom-style-min.js' => 'e4d4f74b8c5732a916dcfba24273c591',
+ './include/javascript/yui3/build/dom/dom-style.js' => '1dbebcf7708ba19422ba4f5620a692a9',
+ './include/javascript/yui3/build/dom/dom.js' => '70c65fddd32a406f977fdb42a7e9ff68',
+ './include/javascript/yui3/build/dom/selector-css2-min.js' => '86238f9e2e3f3f90b263232fd974d4b3',
+ './include/javascript/yui3/build/dom/selector-css2.js' => 'c21d5d8d7a4e62e845ce6a447fedbb12',
+ './include/javascript/yui3/build/dom/selector-css3-min.js' => '1503711971a495b7d46978d189cf7007',
+ './include/javascript/yui3/build/dom/selector-css3.js' => '8b54097671f146aded273102d54cb4b5',
+ './include/javascript/yui3/build/dom/selector-min.js' => 'b5de0d7b3c29ece2f52cd9ef6ba88301',
+ './include/javascript/yui3/build/dom/selector-native-min.js' => 'd2197f895ad4fc7b5145f75c84944fc7',
+ './include/javascript/yui3/build/dom/selector-native.js' => '75083100c6ba1c87cc3c06ffa226f062',
+ './include/javascript/yui3/build/dom/selector.js' => '18548cdecaf34f0de097c010263f580c',
+ './include/javascript/yui3/build/dd/dd-constrain-min.js' => '6290d829f810688e2739af1c6ce6272d',
+ './include/javascript/yui3/build/dd/dd-constrain.js' => '038557ace27eec892e0d9daf918b4fb9',
+ './include/javascript/yui3/build/dd/dd-ddm-base-min.js' => '079b40427f308dc212255df488856794',
+ './include/javascript/yui3/build/dd/dd-ddm-base.js' => '65c29a76aa5ef5e81707a7c3c7b9f809',
+ './include/javascript/yui3/build/dd/dd-ddm-drop-min.js' => 'bba8ae8124f7ec4e68ed6a8e55161700',
+ './include/javascript/yui3/build/dd/dd-ddm-drop.js' => 'd4a35881e54a4b7f28a5ba85fa7895c2',
+ './include/javascript/yui3/build/dd/dd-ddm-min.js' => '3ddfd9710761a3064531718cebf95187',
+ './include/javascript/yui3/build/dd/dd-ddm.js' => '5083a97504632d87cd5e740730ac532a',
+ './include/javascript/yui3/build/dd/dd-drag-min.js' => '1bdc422b1923a0bc4d0c99a8851b6d1c',
+ './include/javascript/yui3/build/dd/dd-drag.js' => '70341cc3db548498ba8f7c047abc1616',
+ './include/javascript/yui3/build/dd/dd-drop-min.js' => '691d9acd4f668984dbae5d0fb856cbcd',
+ './include/javascript/yui3/build/dd/dd-drop-plugin-min.js' => '1b0846bca964a4e99693647acce1beaa',
+ './include/javascript/yui3/build/dd/dd-drop-plugin.js' => 'a8207858c656cd4ebb0a2f5412fb826a',
+ './include/javascript/yui3/build/dd/dd-drop.js' => '8e0e0340d4be9da07a30b9e6666066f4',
+ './include/javascript/yui3/build/dd/dd-min.js' => '8c2fd5421915946f56b6132c5bfe4f9f',
+ './include/javascript/yui3/build/dd/dd-plugin-min.js' => '73a8bf0154c958a356c1c12e3c48060f',
+ './include/javascript/yui3/build/dd/dd-plugin.js' => '2d4a2f2dc320427c83cf36990e201316',
+ './include/javascript/yui3/build/dd/dd-proxy-min.js' => 'ee714c93f2f6f64f64bc60cb5bdf6018',
+ './include/javascript/yui3/build/dd/dd-proxy.js' => '9d077cc1499ab15ffee62053d9307745',
+ './include/javascript/yui3/build/dd/dd-scroll-min.js' => '177a1ca26fa69cc996e05996af597271',
+ './include/javascript/yui3/build/dd/dd-scroll.js' => '17a73b129856a743aa67394ae9f9ff57',
+ './include/javascript/yui3/build/dd/dd.js' => '094be9ccf4245a1fcf6d6f1509aa2fb3',
+ './include/javascript/yui3/build/datatype/datatype-date-format-min.js' => 'c4a90c61683379637587b76b7a3eda5b',
+ './include/javascript/yui3/build/datatype/datatype-date-format.js' => '059876d6b1d1ba2258baf9573199c815',
+ './include/javascript/yui3/build/datatype/datatype-date-min.js' => '67ef0b57f36f1c082dde681b5dc4cac9',
+ './include/javascript/yui3/build/datatype/datatype-date-parse-min.js' => '83d946fd571f24dab5eef8e275e5a88a',
+ './include/javascript/yui3/build/datatype/datatype-date-parse.js' => '01774df34d3d1c1e0e5fdbe89d279eef',
+ './include/javascript/yui3/build/datatype/datatype-date.js' => '8aa84c5fd30a42fc87fbfdf5c7e8b18c',
+ './include/javascript/yui3/build/datatype/datatype-min.js' => '5ad6a4a794cc685364ed914001ea4963',
+ './include/javascript/yui3/build/datatype/datatype-number-format-min.js' => 'e7dc0ee322c84b81280456a23970661e',
+ './include/javascript/yui3/build/datatype/datatype-number-format.js' => '98a41dcf87ed49b4542153e4f9948ecf',
+ './include/javascript/yui3/build/datatype/datatype-number-min.js' => '5b8d7927725ed27e1a9941f2a2dc3476',
+ './include/javascript/yui3/build/datatype/datatype-number-parse-min.js' => 'ea00cc89968546a56296e36a13a83fca',
+ './include/javascript/yui3/build/datatype/datatype-number-parse.js' => 'e11fd0bfdd7f84d167fa81df7ad06e02',
+ './include/javascript/yui3/build/datatype/datatype-number.js' => '5267cfb4bbdcf58ca3a1cc1e976c23d0',
+ './include/javascript/yui3/build/datatype/datatype-xml-format-min.js' => 'c5ed66f244249172c501fd4365ca723c',
+ './include/javascript/yui3/build/datatype/datatype-xml-format.js' => 'c3630d07c01dcf68a0506a49645273f7',
+ './include/javascript/yui3/build/datatype/datatype-xml-min.js' => '372e21766c256f78afd4e93402084176',
+ './include/javascript/yui3/build/datatype/datatype-xml-parse-min.js' => '78ddb4361d34fa01f71ea6b22cf5fc67',
+ './include/javascript/yui3/build/datatype/datatype-xml-parse.js' => '41b61808a06550c0d6b4015ae0757cba',
+ './include/javascript/yui3/build/datatype/datatype-xml.js' => '4eb36e4855f607d4d1223116a60c6d96',
+ './include/javascript/yui3/build/datatype/datatype.js' => 'bbb56fb027edbd2bd83d4c7bb0cdb492',
+ './include/javascript/yui3/build/datasource/datasource-arrayschema-min.js' => '54a3f31550dfc779bdf7ff3badfb0b42',
+ './include/javascript/yui3/build/datasource/datasource-arrayschema.js' => '0d50e9272104d7c7c95ee777558aa943',
+ './include/javascript/yui3/build/datasource/datasource-cache-min.js' => 'd8084fda943fab9ce469dda2c4e2457d',
+ './include/javascript/yui3/build/datasource/datasource-cache.js' => 'c93d1b23e37c2305c48db36537075a67',
+ './include/javascript/yui3/build/datasource/datasource-function-min.js' => '093a0fa4464a0c80b79252ae24d5c5b6',
+ './include/javascript/yui3/build/datasource/datasource-function.js' => 'd7cdd6bfa8a846a3dbaf01af8a77efd3',
+ './include/javascript/yui3/build/datasource/datasource-get-min.js' => 'e89e61c3ab703c0820917c6cdc99ff03',
+ './include/javascript/yui3/build/datasource/datasource-get.js' => '47560101c731893a1bbf083f1084083a',
+ './include/javascript/yui3/build/datasource/datasource-io-min.js' => 'f6232b38432e577ea1a030a479b5467e',
+ './include/javascript/yui3/build/datasource/datasource-io.js' => '73d1888f5c2264b1808347e113aeb01a',
+ './include/javascript/yui3/build/datasource/datasource-jsonschema-min.js' => '6c0a0b15fc15bb76b7295997b18b9c99',
+ './include/javascript/yui3/build/datasource/datasource-jsonschema.js' => '3afaf4b857ae45b972adcdd7186a4a44',
+ './include/javascript/yui3/build/datasource/datasource-local-min.js' => '66895699cf49802a7f1a0420160a1632',
+ './include/javascript/yui3/build/datasource/datasource-local.js' => '2adc1e3db8e2629e55d2c14cf929cc6f',
+ './include/javascript/yui3/build/datasource/datasource-min.js' => '904efd35e9081b5f6df7e7dcf823b57d',
+ './include/javascript/yui3/build/datasource/datasource-polling-min.js' => '74d4d6dc75a9fc21377a27b55b4db1e4',
+ './include/javascript/yui3/build/datasource/datasource-polling.js' => '974f135f59c95b9c432f85d2dbe402a3',
+ './include/javascript/yui3/build/datasource/datasource-textschema-min.js' => 'aacfb74656f75d1ec557b8369e84b825',
+ './include/javascript/yui3/build/datasource/datasource-textschema.js' => '9d06a4ea4ea528cb81d14018dcada0d7',
+ './include/javascript/yui3/build/datasource/datasource-xmlschema-min.js' => 'f6c390a5e74debc110ce87ef24b9ed8a',
+ './include/javascript/yui3/build/datasource/datasource-xmlschema.js' => 'f486482e659d075719ad32d65019d06c',
+ './include/javascript/yui3/build/datasource/datasource.js' => 'ec2844604a261f1d9ae7a239817a6f03',
+ './include/javascript/yui3/build/dataschema/dataschema-array-min.js' => '1da125ea08ae73cb62231e1b510c4ea5',
+ './include/javascript/yui3/build/dataschema/dataschema-array.js' => '832de48fde2a6dfd8a1646a674751a7b',
+ './include/javascript/yui3/build/dataschema/dataschema-base-min.js' => '41aa325522c432a9ae37d25aae6f0831',
+ './include/javascript/yui3/build/dataschema/dataschema-base.js' => '4d81eca661f31765fb7cb150227a584e',
+ './include/javascript/yui3/build/dataschema/dataschema-json-min.js' => '4b463cd540353e1444926ee4e4c9a6e5',
+ './include/javascript/yui3/build/dataschema/dataschema-json.js' => 'ab616e53d0b4e9676a573eec0a38e5c2',
+ './include/javascript/yui3/build/dataschema/dataschema-min.js' => '0753babed0c9001e18d5b099e1cd1633',
+ './include/javascript/yui3/build/dataschema/dataschema-text-min.js' => '5c8f1fc336008532beabfcd0f479a864',
+ './include/javascript/yui3/build/dataschema/dataschema-text.js' => 'c990b48e76d4406b717442fc6c696b42',
+ './include/javascript/yui3/build/dataschema/dataschema-xml-min.js' => '8b717693f65c950faaaf848a30fc98f2',
+ './include/javascript/yui3/build/dataschema/dataschema-xml.js' => '990766bdcf296cd54ae928cbeb62e207',
+ './include/javascript/yui3/build/dataschema/dataschema.js' => '596041b46c646351a5a490d4124ee2dc',
+ './include/javascript/yui3/build/cssreset/reset.css' => '4620c834f141d4527d38f470c855b964',
+ './include/javascript/yui3/build/cssreset/reset-min.css' => '0fc84044bc23bb989184e82f3989dc65',
+ './include/javascript/yui3/build/cssreset/reset-context.css' => 'aac508dbeb6503ca26b2b4434bba4ce1',
+ './include/javascript/yui3/build/cssreset/reset-context-min.css' => '9b934f6839f956fcafff6bfb4466f848',
+ './include/javascript/yui3/build/cssgrids/grids.css' => '5fac4246059e2bd304fe401603491a36',
+ './include/javascript/yui3/build/cssgrids/grids-min.css' => 'd3915ec4650723a7deefcc135709d431',
+ './include/javascript/yui3/build/cssgrids/grids-context.css' => 'f22f5c7c935d3e399cf8159a1fe0dc36',
+ './include/javascript/yui3/build/cssgrids/grids-context-min.css' => '4350943c5368220f078c7921781bb704',
+ './include/javascript/yui3/build/cssfonts/fonts.css' => '8a50b73116a8af42861533a78632a72d',
+ './include/javascript/yui3/build/cssfonts/fonts-min.css' => '67f666465e2ddaea2843e62ebca3cc9e',
+ './include/javascript/yui3/build/cssfonts/fonts-context.css' => 'b2027737dec2b597295f0b3d5b3aac17',
+ './include/javascript/yui3/build/cssfonts/fonts-context-min.css' => '25aeaa650efa70be99939f484aca165d',
+ './include/javascript/yui3/build/cssbase/base.css' => '49460517794eb5d71e4965caac8e3ac0',
+ './include/javascript/yui3/build/cssbase/base-min.css' => 'c93f66a2750f6402a620ae0ba9784928',
+ './include/javascript/yui3/build/cssbase/base-context.css' => '592d9bc8b4188e02313de63db250780a',
+ './include/javascript/yui3/build/cssbase/base-context-min.css' => '771b3d5f2384525a3c8b887d7ddd40ce',
+ './include/javascript/yui3/build/cookie/cookie-min.js' => 'be1afb25070e3a5eddc0b20e44fe2097',
+ './include/javascript/yui3/build/cookie/cookie.js' => '7656833d613e0137f4ebb8a43587d440',
+ './include/javascript/yui3/build/console/console-filters-min.js' => 'ad8e6eaa1c01016556ac5cba11092467',
+ './include/javascript/yui3/build/console/console-filters.js' => '65ee22b67d6c4272e144dbdc067dac8e',
+ './include/javascript/yui3/build/console/console-min.js' => 'cd61cb88ce9857df6e48d1a4f1b3ecb8',
+ './include/javascript/yui3/build/console/console.js' => '2be4b0cf026e8beee786a1f19c0a5a75',
+ './include/javascript/yui3/build/console/assets/warn_error.png' => 'e01a08081fe9a53ae4a2c7a5b60a1a48',
+ './include/javascript/yui3/build/console/assets/skins/sam/warn_error.png' => 'e01a08081fe9a53ae4a2c7a5b60a1a48',
+ './include/javascript/yui3/build/console/assets/skins/sam/console.css' => '4bf25a1e6d77ae224a609ebfd6d7a016',
+ './include/javascript/yui3/build/console/assets/skins/sam/console-skin.css' => '5bf304893499dcd980e53b6a003b0f47',
+ './include/javascript/yui3/build/console/assets/skins/sam/console-filters.css' => '9f9fa29cde9bce61394823a8a643c7f7',
+ './include/javascript/yui3/build/console/assets/skins/sam/console-filters-skin.css' => '89a1200557889da682fa346bdb484f4e',
+ './include/javascript/yui3/build/console/assets/skins/sam/bg.png' => 'f6e5fc4c034f96c68f446745a2881982',
+ './include/javascript/yui3/build/console/assets/console-filters-core.css' => '59812846f1a49258858027fdff6fbaf3',
+ './include/javascript/yui3/build/console/assets/console-core.css' => '59812846f1a49258858027fdff6fbaf3',
+ './include/javascript/yui3/build/compat/compat-min.js' => '3a7288f0d4b97257340f7dce096dd790',
+ './include/javascript/yui3/build/compat/compat.js' => '0361cb333f0c10fc16aa6330883d8cb6',
+ './include/javascript/yui3/build/collection/collection-min.js' => '27507198b7648cb044051b5dadd32790',
+ './include/javascript/yui3/build/collection/collection.js' => '3f0f937772af5258120d9bcaf1d8fab0',
+ './include/javascript/yui3/build/classnamemanager/classnamemanager-min.js' => '3e4b3d6d44863d14d50308c5b3604aa5',
+ './include/javascript/yui3/build/classnamemanager/classnamemanager.js' => '6460e339c1c7d3b03af1064e65def703',
+ './include/javascript/yui3/build/cache/cache-min.js' => 'b964ef4fc9869e1e536073226037ba7b',
+ './include/javascript/yui3/build/cache/cache.js' => '1e45c8d426e20b6ff7dcca6e9e5448bb',
+ './include/javascript/yui3/build/base/base-base-min.js' => '0b99f4c71261bec9d2118f55444deb8f',
+ './include/javascript/yui3/build/base/base-base.js' => 'a1d66a494770906742d50510eef34af2',
+ './include/javascript/yui3/build/base/base-build-min.js' => 'be15f4401563fc297401a7df32cde00f',
+ './include/javascript/yui3/build/base/base-build.js' => 'cf23c606697a7bb9dac1adfbc0e35e7c',
+ './include/javascript/yui3/build/base/base-min.js' => '470bdcf6dd32055f9589b59209482c39',
+ './include/javascript/yui3/build/base/base-pluginhost-min.js' => '109d2f7c66169ba3d95fdc7fded3823b',
+ './include/javascript/yui3/build/base/base-pluginhost.js' => '39a9d89846690bdb56044b4f92bc3971',
+ './include/javascript/yui3/build/base/base.js' => '2ebc14e446712d22b646fe6921227c99',
+ './include/javascript/yui3/build/attribute/attribute-base-min.js' => '1f598cd27c3d1eadc991f18c83627894',
+ './include/javascript/yui3/build/attribute/attribute-base.js' => '61c540b1f48a5d21982b1d9a58b40f90',
+ './include/javascript/yui3/build/attribute/attribute-complex-min.js' => 'e74ae70bc5491c792d83e195ee440a99',
+ './include/javascript/yui3/build/attribute/attribute-complex.js' => '741e91761924be8142dfd7d7e42422e9',
+ './include/javascript/yui3/build/attribute/attribute-min.js' => 'fc92d332455940e09fca12659987ebb1',
+ './include/javascript/yui3/build/attribute/attribute.js' => '2f2c9f75435f80ed9124db3aadc98f1a',
+ './include/javascript/yui3/build/async-queue/async-queue-min.js' => '38c208830472dd9fa0e0080be1d30304',
+ './include/javascript/yui3/build/async-queue/async-queue.js' => 'c036daac1a6511659ccf63eae26ab85d',
+ './include/javascript/yui3/build/assets/skins/sam/widget.css' => 'decf1eca11ec8631869f28489f971cdb',
+ './include/javascript/yui3/build/assets/skins/sam/widget-stack.css' => '49c59b028955c4d2636b68b2611fffc9',
+ './include/javascript/yui3/build/assets/skins/sam/warn_error.png' => 'e01a08081fe9a53ae4a2c7a5b60a1a48',
+ './include/javascript/yui3/build/assets/skins/sam/vertical-menu-submenu-indicator.png' => '87184ef3556eee00e54a1f851c12207f',
+ './include/javascript/yui3/build/assets/skins/sam/thumb-classic-y.png' => 'e6e4114cf7d61a20a5dbd4c76a5be209',
+ './include/javascript/yui3/build/assets/skins/sam/thumb-classic-x.png' => 'deb8a33ec9ce90048552b7e5a1037e7d',
+ './include/javascript/yui3/build/assets/skins/sam/sprite.png' => '4ea9c76ddccae0835ba727ee902809f3',
+ './include/javascript/yui3/build/assets/skins/sam/slider.css' => '326cae4687cb2c94162dee17c396bc93',
+ './include/javascript/yui3/build/assets/skins/sam/skin.css' => '8d5469df09b7b6a9bad72751ed4e4b0f',
+ './include/javascript/yui3/build/assets/skins/sam/rail-classic-y.png' => '3a6d3464ade27ee27bda07164ea29522',
+ './include/javascript/yui3/build/assets/skins/sam/rail-classic-x.png' => '0e63959f97250c7508a51156d6b14485',
+ './include/javascript/yui3/build/assets/skins/sam/overlay.css' => '219eebcee501b42ad383b829b2769f04',
+ './include/javascript/yui3/build/assets/skins/sam/node-menunav.css' => '6de96ec7ff0f35f61bc93064a020c5ff',
+ './include/javascript/yui3/build/assets/skins/sam/horizontal-menu-submenu-toggle.png' => 'e1b5111045cdbae5f59e6df43a2bcafd',
+ './include/javascript/yui3/build/assets/skins/sam/horizontal-menu-submenu-indicator.png' => '62b769d3a600489aea50fb253739d7f5',
+ './include/javascript/yui3/build/assets/skins/sam/console.css' => '4bf25a1e6d77ae224a609ebfd6d7a016',
+ './include/javascript/yui3/build/assets/skins/sam/console-filters.css' => '9f9fa29cde9bce61394823a8a643c7f7',
+ './include/javascript/yui3/build/assets/skins/sam/bg.png' => 'f6e5fc4c034f96c68f446745a2881982',
+ './include/javascript/yui3/build/anim/anim-base-min.js' => '91662c77dfa4ad009efee3489a246d01',
+ './include/javascript/yui3/build/anim/anim-base.js' => 'cac937b2ca252c6266279899a5de0bc0',
+ './include/javascript/yui3/build/anim/anim-color-min.js' => 'a41b18d7cd6bff118bd78941fa198e61',
+ './include/javascript/yui3/build/anim/anim-color.js' => 'f7185fad505c2b57342a399d8bac4cd7',
+ './include/javascript/yui3/build/anim/anim-curve-min.js' => '3a384e737322f61804e34c54393b4809',
+ './include/javascript/yui3/build/anim/anim-curve.js' => 'de090c4d26560e406a8b5c56c4bb6543',
+ './include/javascript/yui3/build/anim/anim-easing-min.js' => '7900d73784f5affdfa8862f1720820dd',
+ './include/javascript/yui3/build/anim/anim-easing.js' => '9982c65fb7258854b26a10c8e97e4cb6',
+ './include/javascript/yui3/build/anim/anim-min.js' => '76ce9b1c0457bdd6da70a09ab4c41419',
+ './include/javascript/yui3/build/anim/anim-node-plugin-min.js' => '0cb4158426369fc59a33ea477e29b28e',
+ './include/javascript/yui3/build/anim/anim-node-plugin.js' => '211a2225128f134bdebe7fde816351f1',
+ './include/javascript/yui3/build/anim/anim-scroll-min.js' => '41ef20a94de29f1cad55965d3d795f71',
+ './include/javascript/yui3/build/anim/anim-scroll.js' => 'b3dddd491c08d1e2cfae861f825f6508',
+ './include/javascript/yui3/build/anim/anim-xy-min.js' => '2643b18f3ee1bcc09bc8a12ceec10606',
+ './include/javascript/yui3/build/anim/anim-xy.js' => '38dea1e654a4e335118deaa246bbfe58',
+ './include/javascript/yui3/build/anim/anim.js' => 'fd0530bc935a92dd7ec1d8d9729b6574',
+ './include/javascript/yui3/assets/dpSyntaxHighlighter.js' => '0bfd5d587be32798fe8bd154a1841741',
+ './include/javascript/yui3/assets/syntax.js' => '8c29456f20e51920755725052aedb62e',
+ './include/javascript/yui3/assets/yuiDistribution.css' => 'd41d8cd98f00b204e9800998ecf8427e',
+ './include/javascript/yui3/assets/yui.gif' => '8ba75836301307e25bf940af92414d20',
+ './include/javascript/yui3/assets/yui.css' => '17630f5861c6e063db0f7f193f96aff4',
+ './include/javascript/yui3/assets/yui-candy.jpg' => '0623c401d53acb36baa31f8c0c38f3da',
+ './include/javascript/yui3/assets/title_h_bg.gif' => '3683c5c7fa614fb5bc5f18176a22bf8c',
+ './include/javascript/yui3/assets/logo.gif' => '96f44b0eb09ee44f75c5f78f0593741a',
+ './include/javascript/yui3/assets/gradient-promo.png' => 'fbdd8e0af587f4863bf5666c41a3f969',
+ './include/javascript/yui3/assets/gradient-mod.png' => 'b8c21c70eb39b9ba11d295bfed0ddf28',
+ './include/javascript/yui3/assets/gradient-ex-box.png' => 'ea2931d4cd5ee440539d43e97a740b9d',
+ './include/javascript/yui3/assets/example-hd-bg.gif' => '5c5c0e34d0e6b3013063e0cb36978034',
+ './include/javascript/yui3/assets/dpSyntaxHighlighter.css' => '09fd49eb6c58f17aecdb994aecf1e9e1',
+ './include/javascript/yui3/assets/download-arrow.png' => '82d9b5b77f9222008b6c361e34353f6e',
+ './include/javascript/yui3/assets/cheatsheet-thumbnail.png' => '0e818b16c5932f24ba5e34ec44672e83',
+ './include/javascript/yui3/assets/cheatsheet-shadow.jpg' => '9c9a0ebb39022282f6475dcb2f5d897a',
+ './include/javascript/yui3/assets/bullet4x4.png' => 'ee724d824e5f1deb1b2eeba335b9b911',
+ './include/javascript/yui3/assets/bullet-box6x6.gif' => 'a6379354fa59c989cb7ae65e2a7aa360',
+ './include/javascript/yui3/assets/bg_hd.gif' => '0a295c3fab0790f5c65a806c56dc2836',
+ './include/javascript/yui3/README' => 'b3cd942e83fcdbdc12917233609b4edf',
+ './include/javascript/yui/ygDDList.js' => '863df2609cd089430316027e7238561f',
+ './include/javascript/yui/index.html' => 'e42f1c8fdae8ca33f4816e5305997dbe',
+ './include/javascript/yui/ext/yui-ext.js' => '942c45c9f9f78724af53b364a3b9d361',
+ './include/javascript/yui/build/yuitest/yuitest_core.js' => 'd666571a5c06fd516f5d7fb637955253',
+ './include/javascript/yui/build/yuitest/yuitest_core-min.js' => 'c2fb5eef18d517e9f02e91de6c1340dc',
+ './include/javascript/yui/build/yuitest/yuitest.js' => '72d90cd6eb9c201aaabca4f30f5f1bae',
+ './include/javascript/yui/build/yuitest/yuitest-min.js' => '4cf56a06375f215cbb77bc4bf2013e93',
+ './include/javascript/yui/build/yuitest/assets/yuitest-core.css' => '793339721d8f8dea54c60348fe4a853e',
+ './include/javascript/yui/build/yuitest/assets/testlogger.css' => 'bbcd5b021e71b0c9d7f5c0c751294e78',
+ './include/javascript/yui/build/yuitest/assets/skins/sam/yuitest.css' => '793339721d8f8dea54c60348fe4a853e',
+ './include/javascript/yui/build/yuitest/assets/skins/sam/yuitest-skin.css' => '793339721d8f8dea54c60348fe4a853e',
+ './include/javascript/yui/build/yuiloader/yuiloader.js' => '5ecccf3367864d9d150a33432eae7d60',
+ './include/javascript/yui/build/yuiloader/yuiloader-min.js' => '11ea66c5bc6689358864d4c6207a03ba',
+ './include/javascript/yui/build/yuiloader-dom-event/yuiloader-dom-event.js' => '4c647048cabe1cb781c8f322b0981ba7',
+ './include/javascript/yui/build/yahoo/yahoo.js' => '486529fd3525b9bcbaaca728b5fe1172',
+ './include/javascript/yui/build/yahoo/yahoo-min.js' => '77aaedc174f0cbc57a706c09b2342a90',
+ './include/javascript/yui/build/yahoo-dom-event/yahoo-dom-event.js' => '3ae37167c141a29c1c11f254de0d7abf',
+ './include/javascript/yui/build/utilities/utilities.js' => '54daab1bb64dbe576b51e12ad9a63658',
+ './include/javascript/yui/build/uploader/uploader.js' => '16e1ad4f188237681ad726573ddaf52d',
+ './include/javascript/yui/build/uploader/uploader-min.js' => '8f09d6ce891046f386a5e86309d08614',
+ './include/javascript/yui/build/uploader/assets/uploader.swf' => '52f36a13ac4ee2743531de3e29c0b55c',
+ './include/javascript/yui/build/treeview/treeview.js' => '2678dd6d0fba93e223c33738a8ab2e45',
+ './include/javascript/yui/build/treeview/treeview-min.js' => '0b3fe246a06eac9a57f1a0dbade36245',
+ './include/javascript/yui/build/treeview/assets/treeview-core.css' => '9f1c2687bab335e4a0f822734461bf66',
+ './include/javascript/yui/build/treeview/assets/skins/sam/treeview.css' => 'cf472192f2e3c5e89098f9d83732c746',
+ './include/javascript/yui/build/treeview/assets/skins/sam/treeview-sprite.gif' => '115a1070e1398629700a11d4f5d546bb',
+ './include/javascript/yui/build/treeview/assets/skins/sam/treeview-skin.css' => '89d70f2c42ecca5633a2df7bce2698f4',
+ './include/javascript/yui/build/treeview/assets/skins/sam/treeview-loading.gif' => '8f1310bf9e7aa892d2dc09c4058c7bd3',
+ './include/javascript/yui/build/treeview/assets/skins/sam/loading.gif' => '8f1310bf9e7aa892d2dc09c4058c7bd3',
+ './include/javascript/yui/build/treeview/assets/skins/sam/check2.gif' => '3544088604d6d6e519a3a392db89c38d',
+ './include/javascript/yui/build/treeview/assets/skins/sam/check1.gif' => '691389bb26f429e79666599992a384b3',
+ './include/javascript/yui/build/treeview/assets/skins/sam/check0.gif' => 'd3e7d474e008b8cb585eb05c5baafe5a',
+ './include/javascript/yui/build/tabview/tabview.js' => 'c83792b51d4bd8ec2fc8994da1e8a118',
+ './include/javascript/yui/build/tabview/tabview-min.js' => '43be75d958658b98fc5cffc3e65716a2',
+ './include/javascript/yui/build/tabview/assets/tabview.css' => 'b94fe6019b5dec4aa7aa1f6b959f5b31',
+ './include/javascript/yui/build/tabview/assets/tabview-core.css' => '44c5638a67a0ca601474358c472022c1',
+ './include/javascript/yui/build/tabview/assets/skins/sam/tabview.css' => '3f056254db4fa5cf31fd90b2e5565fd8',
+ './include/javascript/yui/build/tabview/assets/skins/sam/tabview-skin.css' => '238f3ee3362c44a0c0394030346c6340',
+ './include/javascript/yui/build/tabview/assets/skin-sam.css' => 'f6fac582b70ad0d67e8956b1ec2623f3',
+ './include/javascript/yui/build/tabview/assets/loading.gif' => 'c8ad9845c9414424cb5854238af212b0',
+ './include/javascript/yui/build/tabview/assets/border_tabs.css' => 'dce2811d325e5a856321732e0440afcd',
+ './include/javascript/yui/build/swfstore/swfstore.swf' => 'f619420748b08a2d453c049ef190e2f3',
+ './include/javascript/yui/build/swfstore/swfstore.js' => 'ac89b5a9745250c94cbcc68b618f85ce',
+ './include/javascript/yui/build/swfstore/swfstore-min.js' => 'ca4adbcee388561e209433449009b1da',
+ './include/javascript/yui/build/swfstore/swfstore-debug.js' => 'd66fda76f6a7d9a1c90e30db0659b0f3',
+ './include/javascript/yui/build/swfstore/swf.js' => 'be78c3c95997313d704c49b97e788b35',
+ './include/javascript/yui/build/swfdetect/swfdetect.js' => 'ebeaad88ce7a268f1772f0b4e7418831',
+ './include/javascript/yui/build/swfdetect/swfdetect-min.js' => '0af595e80b22026d746c9cdfbb0ffaef',
+ './include/javascript/yui/build/swfdetect/swfdetect-debug.js' => 'ebeaad88ce7a268f1772f0b4e7418831',
+ './include/javascript/yui/build/swf/swf.js' => 'bd21dfaf72392b5d80cd3c73e4f896b4',
+ './include/javascript/yui/build/swf/swf-min.js' => '13ba9a2beb92c3d7cc2c08e2ca2507a0',
+ './include/javascript/yui/build/swf/swf-debug.js' => '70ca534287813be497d683055270289d',
+ './include/javascript/yui/build/stylesheet/stylesheet.js' => 'a32f1772028a92d37c44c155b2f538fe',
+ './include/javascript/yui/build/stylesheet/stylesheet-min.js' => 'ea1f7d01349ca0b84c34d9140424231d',
+ './include/javascript/yui/build/stylesheet/stylesheet-debug.js' => 'd8eb31878d3759f1005b9227ff390669',
+ './include/javascript/yui/build/storage/storage.js' => 'e80f2b4ed0ac24f1c9af0f034f2362a6',
+ './include/javascript/yui/build/storage/storage-min.js' => '75d3116953b72bfcaf5941d3e1e7a103',
+ './include/javascript/yui/build/storage/storage-debug.js' => 'a5af17949aa0532435f13a70b27201da',
+ './include/javascript/yui/build/slider/slider.js' => 'c924262c640f884f7d6a1f3deec8a93a',
+ './include/javascript/yui/build/slider/slider-min.js' => '27e7e4aeacd791f08c90568f4e79b43e',
+ './include/javascript/yui/build/slider/assets/thumb-w.gif' => 'f1af28a0a7a0b4b76e973e7988d20dea',
+ './include/javascript/yui/build/slider/assets/thumb-s.gif' => '60824e3c3c961ca92fd80dc1d55e4243',
+ './include/javascript/yui/build/slider/assets/thumb-n.gif' => '449f6baf5f9377f95653d5c076efb659',
+ './include/javascript/yui/build/slider/assets/thumb-fader.gif' => '0267805612e4e9fed7ccaa3da9fc0f2a',
+ './include/javascript/yui/build/slider/assets/thumb-e.gif' => '3d879ac8ed946408795c33c20e32577f',
+ './include/javascript/yui/build/slider/assets/thumb-bar.gif' => 'e0575ef16dce100560ba893ff4723916',
+ './include/javascript/yui/build/slider/assets/slider-skin.css' => '6c05532041c0ba689947ebf10c4ec0b0',
+ './include/javascript/yui/build/slider/assets/slider-core.css' => '929d2b3257800724e51bbfa109081d30',
+ './include/javascript/yui/build/slider/assets/skins/sam/slider.css' => '71f7bccc93416362d854d66c50383d3d',
+ './include/javascript/yui/build/slider/assets/skins/sam/slider-skin.css' => 'ce979fdbee3ed431bc82e068c540ef92',
+ './include/javascript/yui/build/slider/assets/skins/sam/bg-v.gif' => '220b443b77004914d4293a655299e2ce',
+ './include/javascript/yui/build/slider/assets/skins/sam/bg-h.gif' => '4d4b3a56c225f8f21f7d839ba2b03823',
+ './include/javascript/yui/build/slider/assets/right-thumb.png' => 'fe58c629da3f86f895948ec31b0dbfbc',
+ './include/javascript/yui/build/slider/assets/left-thumb.png' => 'b632385b388c15469ddc0bfdc1a3171f',
+ './include/javascript/yui/build/slider/assets/bg-v.gif' => '220b443b77004914d4293a655299e2ce',
+ './include/javascript/yui/build/slider/assets/bg-v-e.gif' => '73d2cdb479eb4707285df7c2dbb28062',
+ './include/javascript/yui/build/slider/assets/bg-h.gif' => '4d4b3a56c225f8f21f7d839ba2b03823',
+ './include/javascript/yui/build/slider/assets/bg-fader.gif' => '0c9eb4a1518994aa9786ff6f81a74cec',
+ './include/javascript/yui/build/selector/selector.js' => '8571aa5258087bb561f328fc31ecc843',
+ './include/javascript/yui/build/selector/selector-min.js' => '49bd722cb23d1c2db6fd7bb2e0183b4c',
+ './include/javascript/yui/build/resize/resize.js' => '610bdd65b4fe6370cdd1c802e467311e',
+ './include/javascript/yui/build/resize/resize-min.js' => 'c45230b8375ab231ffbb9a284d378a21',
+ './include/javascript/yui/build/resize/assets/skins/sam/resize.css' => '9c978b19e16ad208645904c9323d5a31',
+ './include/javascript/yui/build/resize/assets/skins/sam/resize-skin.css' => '46eb43f9766fd1dc7ae2d9d61d4d6401',
+ './include/javascript/yui/build/resize/assets/skins/sam/layout_sprite.png' => '0f5a66998a0b88cabfe0489a6a11e28a',
+ './include/javascript/yui/build/resize/assets/resize-core.css' => 'af00fd53873d777cb499ae008f9e0d20',
+ './include/javascript/yui/build/reset/reset.css' => '87c995762e9c3571fab20d3d66d65cd5',
+ './include/javascript/yui/build/reset/reset-min.css' => '7064a8abc350d6dba25c20d076f7dd27',
+ './include/javascript/yui/build/reset-fonts/reset-fonts.css' => '318520f77ef065ae80c2b86959d4e18f',
+ './include/javascript/yui/build/reset-fonts-grids/reset-fonts-grids.css' => '2162df6e1ab29d6d2e5cc3748dac9bcc',
+ './include/javascript/yui/build/progressbar/progressbar.js' => 'b655118de0fd819c39726a71e32a2558',
+ './include/javascript/yui/build/progressbar/progressbar-min.js' => '08a63d34f5fbae4661fd4c5a7ca1dea1',
+ './include/javascript/yui/build/progressbar/progressbar-debug.js' => '47f02484fcc5b33634045afa77a1fb22',
+ './include/javascript/yui/build/progressbar/assets/skins/sam/progressbar.css' => 'f39fc4327836dbf61b7e433f6246e0ab',
+ './include/javascript/yui/build/progressbar/assets/skins/sam/progressbar-skin.css' => '5f51c6363ad92b2d5128989b8c8deea0',
+ './include/javascript/yui/build/progressbar/assets/skins/sam/bar-v.png' => '54cd63ec61c91525f081428bc784021c',
+ './include/javascript/yui/build/progressbar/assets/skins/sam/bar-h.png' => 'a4182c879e01c66bfaf9c188202c326b',
+ './include/javascript/yui/build/progressbar/assets/skins/sam/back-v.png' => 'f0179d9bbb6e6f7796caed9d1b0b9795',
+ './include/javascript/yui/build/progressbar/assets/skins/sam/back-h.png' => '972e692bc2c40a33fa30f3333c5e5821',
+ './include/javascript/yui/build/progressbar/assets/progressbar-core.css' => '2c9f30552602be5e6daf29344a99de86',
+ './include/javascript/yui/build/profilerviewer/profilerviewer.js' => 'f0a5893b36d97f98888ade53e1ddd4c9',
+ './include/javascript/yui/build/profilerviewer/profilerviewer-min.js' => 'da0e88a3081b58466c732a17678ebfb0',
+ './include/javascript/yui/build/profilerviewer/assets/skins/sam/wait.gif' => 'b0cd5a5dc070c705ebf8814a909802c3',
+ './include/javascript/yui/build/profilerviewer/assets/skins/sam/profilerviewer.css' => 'e07d72c12fc6c0028b89d88da7ec53d2',
+ './include/javascript/yui/build/profilerviewer/assets/skins/sam/profilerviewer-skin.css' => '2bc47f550e74e5d9b9ef651cbcc22a7b',
+ './include/javascript/yui/build/profilerviewer/assets/skins/sam/header_background.png' => '412285f6b44f1d7757fc005680c2ecf5',
+ './include/javascript/yui/build/profilerviewer/assets/skins/sam/desc.gif' => '4708d3f08d550225360a43cd8ca2fab4',
+ './include/javascript/yui/build/profilerviewer/assets/skins/sam/asc.gif' => '7053becd07a62f576bb8767a5d9875f0',
+ './include/javascript/yui/build/profilerviewer/assets/profilerviewer-core.css' => '9f1c2687bab335e4a0f822734461bf66',
+ './include/javascript/yui/build/profiler/profiler.js' => 'dd7475150e312ac555719de0878b53f3',
+ './include/javascript/yui/build/profiler/profiler-min.js' => 'ee66b42f20934e38d037b2071a915e14',
+ './include/javascript/yui/build/paginator/paginator.js' => '68bffc0ceb2284e0dd8c9cd3d4df51ee',
+ './include/javascript/yui/build/paginator/paginator-min.js' => '36567e4352247721e1290389ba0dd63e',
+ './include/javascript/yui/build/paginator/assets/skins/sam/paginator.css' => '2bb7f5bf775e4770dd2b6f9e36611b92',
+ './include/javascript/yui/build/paginator/assets/skins/sam/paginator-skin.css' => '7c8c3b867d33822a9611d625cc74145c',
+ './include/javascript/yui/build/paginator/assets/paginator-core.css' => '9f1c2687bab335e4a0f822734461bf66',
+ './include/javascript/yui/build/menu/menu.js' => 'a752c70e244872c18a5af5c85027f7f9',
+ './include/javascript/yui/build/menu/menu-min.js' => 'b5f52e06eb6ab1b34810aa301608b830',
+ './include/javascript/yui/build/menu/assets/skins/sam/menuitem_submenuindicator_disabled.png' => '42a8a785ecb430826ebd4748fc77ebc0',
+ './include/javascript/yui/build/menu/assets/skins/sam/menuitem_submenuindicator.png' => '10f0de223bc3688a8986c23f71f081f1',
+ './include/javascript/yui/build/menu/assets/skins/sam/menuitem_checkbox_disabled.png' => '6d9c1ef2cc0823c45226e43f9ef0e3dd',
+ './include/javascript/yui/build/menu/assets/skins/sam/menuitem_checkbox.png' => '01d544275d0ee95fae025242d1eab1d5',
+ './include/javascript/yui/build/menu/assets/skins/sam/menubaritem_submenuindicator_disabled.png' => 'd8c20340be4484d2153ecd1a8b21f57f',
+ './include/javascript/yui/build/menu/assets/skins/sam/menubaritem_submenuindicator.png' => '1424f886ef59424f1aa19fa94771fb3f',
+ './include/javascript/yui/build/menu/assets/skins/sam/menu.css' => '6ed5f2e057f115daa8bb71bfd0c643ce',
+ './include/javascript/yui/build/menu/assets/skins/sam/menu-skin.css' => '21ae432798614782779386aa734ff2f3',
+ './include/javascript/yui/build/menu/assets/menuitem_submenuindicator_selected.png' => '13fbc56317c32fb2373241d25e46ad87',
+ './include/javascript/yui/build/menu/assets/menuitem_submenuindicator_disabled.png' => '52394cd1c23abd1dab175b16b286497b',
+ './include/javascript/yui/build/menu/assets/menuitem_submenuindicator.png' => '4a40c951dbf145003d19187e8b9944d0',
+ './include/javascript/yui/build/menu/assets/menuitem_checkbox_selected.png' => '8f8cbed03723933c7dcaf670cd0090a7',
+ './include/javascript/yui/build/menu/assets/menuitem_checkbox_disabled.png' => 'f49b45a246054c901510263300f4d273',
+ './include/javascript/yui/build/menu/assets/menuitem_checkbox.png' => '04046d854aa5030f00e639b036b10e0f',
+ './include/javascript/yui/build/menu/assets/menubaritem_submenuindicator_selected.png' => '5afb62ba90af5ca8b0fb6a149206b09d',
+ './include/javascript/yui/build/menu/assets/menubaritem_submenuindicator_disabled.png' => '4e06a53613fe60385001f776a5f5b5f4',
+ './include/javascript/yui/build/menu/assets/menubaritem_submenuindicator.png' => '6a52342f4112f75ec3a670bca249be1f',
+ './include/javascript/yui/build/menu/assets/menu_up_arrow_disabled.png' => '139ba64f9b14bd36c9c35a6cb0f71848',
+ './include/javascript/yui/build/menu/assets/menu_up_arrow.png' => 'dc52888b3dcb56f0860d78175bf4dd4f',
+ './include/javascript/yui/build/menu/assets/menu_down_arrow_disabled.png' => '22ac9a93738dffb391180047c187a182',
+ './include/javascript/yui/build/menu/assets/menu_down_arrow.png' => 'c61639e305e930102297f479ef1f84c7',
+ './include/javascript/yui/build/menu/assets/menu.css' => '64a6367a10897df76ffc68f817be4b2f',
+ './include/javascript/yui/build/menu/assets/menu-core.css' => 'a42bb56e4386a4d0c696d8b8622a2b43',
+ './include/javascript/yui/build/logger/logger.js' => '19e92542b867cda010214412d85f4102',
+ './include/javascript/yui/build/logger/logger-min.js' => '6179587106331f50b94963768b59a9af',
+ './include/javascript/yui/build/logger/assets/skins/sam/logger.css' => '34c9d2d0dc2dfecd76703d3ac210088a',
+ './include/javascript/yui/build/logger/assets/skins/sam/logger-skin.css' => '0f5a4c1fbca60b78976a41591cabd31e',
+ './include/javascript/yui/build/logger/assets/logger.css' => '94a94bbe5199376f2df542be57a2820c',
+ './include/javascript/yui/build/logger/assets/logger-core.css' => '02f2ac7e6bf5753422fbddab521c7d19',
+ './include/javascript/yui/build/layout/layout.js' => 'fe1bd86243ec2910f0cf2b9a3866132a',
+ './include/javascript/yui/build/layout/layout-min.js' => '788b7a42e45df3c4c385e559bd4e6d99',
+ './include/javascript/yui/build/layout/assets/skins/sam/layout_sprite.png' => '0f5a66998a0b88cabfe0489a6a11e28a',
+ './include/javascript/yui/build/layout/assets/skins/sam/layout.css' => '795b3d611aa7b6a06687f6b400b7e5fe',
+ './include/javascript/yui/build/layout/assets/skins/sam/layout-skin.css' => 'a329332ae9d0f5f7b57298e95e7b3aaf',
+ './include/javascript/yui/build/layout/assets/layout-core.css' => '20d7cb32c0585bbdf2ecc47927a91335',
+ './include/javascript/yui/build/json/json.js' => 'a31d483a89e83e72cbb3c42d2f5fdd4e',
+ './include/javascript/yui/build/json/json-min.js' => '595bc1f3b948cbcb9a7d5b934dbdb107',
+ './include/javascript/yui/build/imageloader/imageloader.js' => 'e6eecb6483d125156c77c4cee74412a1',
+ './include/javascript/yui/build/imageloader/imageloader-min.js' => '41f7ad72e42fb68f20e951d305c12347',
+ './include/javascript/yui/build/imagecropper/imagecropper.js' => '82022d024606947e9d12976b657e4783',
+ './include/javascript/yui/build/imagecropper/imagecropper-min.js' => '8a39f3974407001667353cecfcf3b660',
+ './include/javascript/yui/build/imagecropper/assets/skins/sam/imagecropper.css' => '14b933dace6b55ff4bd29dfa532049e9',
+ './include/javascript/yui/build/imagecropper/assets/skins/sam/imagecropper-skin.css' => '9b492c16276e1d6e41057538cfa2276a',
+ './include/javascript/yui/build/imagecropper/assets/imagecropper-core.css' => 'f7fc7105b9b60f4f66954eb22fe1461e',
+ './include/javascript/yui/build/history/history.js' => '594d929e9baf0354bdf6c9207ee5d88e',
+ './include/javascript/yui/build/history/history-min.js' => '6dc74b45c3844bec37992f8b56c911b3',
+ './include/javascript/yui/build/history/assets/blank.html' => '09773fd08c1f040b898ee77b06a2bf59',
+ './include/javascript/yui/build/grids/grids.css' => '878da0a5fa669f9f9f1b59409358340b',
+ './include/javascript/yui/build/grids/grids-min.css' => '8939896c332468eceefba2a9fda6e037',
+ './include/javascript/yui/build/get/get.js' => 'd653c2732adee0eedf7cd78a1ee2e5c5',
+ './include/javascript/yui/build/get/get-min.js' => '1c0629c2127a03dfd7e3ba0429efbe78',
+ './include/javascript/yui/build/fonts/fonts.css' => '7b0bb1861e071b874d5716b73936a6e7',
+ './include/javascript/yui/build/fonts/fonts-min.css' => 'd05af6e8046cc0253b910915db60d914',
+ './include/javascript/yui/build/event/event.js' => '81f1e87eef011560419df89386589fe8',
+ './include/javascript/yui/build/event/event-min.js' => 'f88a53dea300de8b15a062b0bfd18d7c',
+ './include/javascript/yui/build/event-simulate/event-simulate.js' => 'efb152b50f9c402d144262307a8f1b4d',
+ './include/javascript/yui/build/event-simulate/event-simulate-min.js' => '20714ece167eec20224e4b7113d83d19',
+ './include/javascript/yui/build/event-simulate/event-simulate-debug.js' => 'efb152b50f9c402d144262307a8f1b4d',
+ './include/javascript/yui/build/event-mouseenter/event-mouseenter.js' => 'e6fd23465f95c297f0ec01779f33903d',
+ './include/javascript/yui/build/event-mouseenter/event-mouseenter-min.js' => 'a6785052ee0782fec75d1ceeec60b837',
+ './include/javascript/yui/build/event-mouseenter/event-mouseenter-debug.js' => 'e6fd23465f95c297f0ec01779f33903d',
+ './include/javascript/yui/build/event-delegate/event-delegate.js' => 'eef0bf026f2a9646e0696f7cc8f1d442',
+ './include/javascript/yui/build/event-delegate/event-delegate-min.js' => '9ee8bb35a45bc8b7aee4508a1c89fdac',
+ './include/javascript/yui/build/event-delegate/event-delegate-debug.js' => '2fa529a1c98f5fa12e69cdd317bc525e',
+ './include/javascript/yui/build/element/element.js' => '0516e4cd68b5f4206ecaa2c7389ca32a',
+ './include/javascript/yui/build/element/element-min.js' => '7bbdd2ed1c177b4ce569a2e6ebf3cbec',
+ './include/javascript/yui/build/element-delegate/element-delegate.js' => '3c91b3c19d07c72ceb96ab21c0b07694',
+ './include/javascript/yui/build/element-delegate/element-delegate-min.js' => '9a4bc305125538fcb01f1fc7ee9b3007',
+ './include/javascript/yui/build/element-delegate/element-delegate-debug.js' => '2e65e0cbbb2aff875c31da05623195ea',
+ './include/javascript/yui/build/editor/simpleeditor.js' => '17876a6c67ac89b184a7f10b72e23e17',
+ './include/javascript/yui/build/editor/simpleeditor-min.js' => '7af8a4b28a5e3b011b3c00c5623e5130',
+ './include/javascript/yui/build/editor/editor.js' => 'd44b945458f40c48424ed286c4bee3be',
+ './include/javascript/yui/build/editor/editor-min.js' => '8e882e7b303dfc66d558751ace1e20fe',
+ './include/javascript/yui/build/editor/assets/skins/sam/simpleeditor.css' => 'b3ed43c0ca0bbd76103ecf20bb7ec7c4',
+ './include/javascript/yui/build/editor/assets/skins/sam/simpleeditor-skin.css' => '1db14802c579aa8624bc1d5e223a8630',
+ './include/javascript/yui/build/editor/assets/skins/sam/editor.css' => 'b3ed43c0ca0bbd76103ecf20bb7ec7c4',
+ './include/javascript/yui/build/editor/assets/skins/sam/editor-sprite.gif' => 'b72bb0d8d92b3a946cb6be25d2c885fa',
+ './include/javascript/yui/build/editor/assets/skins/sam/editor-sprite-active.gif' => 'e7a74b72201d29021d6d04d85f86f0c9',
+ './include/javascript/yui/build/editor/assets/skins/sam/editor-skin.css' => '1db14802c579aa8624bc1d5e223a8630',
+ './include/javascript/yui/build/editor/assets/skins/sam/editor-knob.gif' => '43c236afae83c3032ca8da61d3a021b6',
+ './include/javascript/yui/build/editor/assets/skins/sam/blankimage.png' => '91c1defa5830c414bd5d43fb63d30101',
+ './include/javascript/yui/build/editor/assets/simpleeditor-core.css' => 'a2db28ddf0c13e2af9d03208aca9a3e2',
+ './include/javascript/yui/build/editor/assets/editor-core.css' => 'a2db28ddf0c13e2af9d03208aca9a3e2',
+ './include/javascript/yui/build/dragdrop/dragdrop.js' => 'f9773ee345b034e09b8fefda2eb7bac5',
+ './include/javascript/yui/build/dragdrop/dragdrop-min.js' => '0ae226bcb211ae563e67ff3cd97c4548',
+ './include/javascript/yui/build/dom/dom.js' => '69d95eb94e21d1a11da374bd1026b14c',
+ './include/javascript/yui/build/dom/dom-min.js' => 'aa706bc9d70ae282bae9f9ea9a1f60d0',
+ './include/javascript/yui/build/datemath/datemath.js' => 'd4ca29daf116014dba21a7d44e2c7814',
+ './include/javascript/yui/build/datemath/datemath-min.js' => 'e432af5fe30c1ddd7aa0fe84f02a995d',
+ './include/javascript/yui/build/datemath/datemath-debug.js' => 'd4ca29daf116014dba21a7d44e2c7814',
+ './include/javascript/yui/build/datatable/datatable.js' => '26bcff411750ea512e59a3d9400c3b86',
+ './include/javascript/yui/build/datatable/datatable-min.js' => '4fc2bf26c727937a77e0183bffcdac4a',
+ './include/javascript/yui/build/datatable/assets/skins/sam/dt-arrow-up.png' => '27498450164be1b258cae9dfdd534b69',
+ './include/javascript/yui/build/datatable/assets/skins/sam/dt-arrow-dn.png' => 'ee0dd66007d4f34b5e6660b4abbb5a65',
+ './include/javascript/yui/build/datatable/assets/skins/sam/datatable.css' => 'e04ce2e139377129b079205ceba06aaf',
+ './include/javascript/yui/build/datatable/assets/skins/sam/datatable-skin.css' => '559062062b6bc27a055ba2a18f8b1b7f',
+ './include/javascript/yui/build/datatable/assets/datatable.css' => '51d6b383f8719cfc553db8bfc474f03e',
+ './include/javascript/yui/build/datatable/assets/datatable-core.css' => 'e752ddeddca76df907de990f85416eda',
+ './include/javascript/yui/build/datasource/datasource.js' => '354713e9ed0a1d2760cd15ea48675837',
+ './include/javascript/yui/build/datasource/datasource-min.js' => '3f8c54286dc2c062186d92333bb0533f',
+ './include/javascript/yui/build/cookie/cookie.js' => '8c27ac9e9c9e6d113ac2d743875d8c25',
+ './include/javascript/yui/build/cookie/cookie-min.js' => 'd1fc139547c85105a0e55f04878deffd',
+ './include/javascript/yui/build/container/container_core-min.js' => 'ddde4174c11b3c7a41bb650190bcf951',
+ './include/javascript/yui/build/container/container.js' => '46d95c9cb3d54a3edb859c7542fac680',
+ './include/javascript/yui/build/container/container-min.js' => 'cac1924c31ce2ac5ec14a0a95583696f',
+ './include/javascript/yui/build/container/assets/warn16_1.gif' => 'ba0ca370e1f04a406b8188d3ab892b7b',
+ './include/javascript/yui/build/container/assets/tip16_1.gif' => '0b540d1e06e818d180ca0534be963159',
+ './include/javascript/yui/build/container/assets/skins/sam/container.css' => '8cdcbf8555a601d011c96a9053c40c88',
+ './include/javascript/yui/build/container/assets/skins/sam/container-skin.css' => '116e9cc3499f508b04f79c1794802fc2',
+ './include/javascript/yui/build/container/assets/info16_1.gif' => '38d37e309cca60bfac2ad2881f7fe58e',
+ './include/javascript/yui/build/container/assets/hlp16_1.gif' => 'b593fbd4d06a98522efa285e1709aa36',
+ './include/javascript/yui/build/container/assets/container.css' => '30d926224d525d460a79e393b2eac872',
+ './include/javascript/yui/build/container/assets/container-core.css' => '0b777a30b4f40eafe30a76399f151afa',
+ './include/javascript/yui/build/container/assets/close12_1.gif' => '770d9c592b4300457ae025448c4c6816',
+ './include/javascript/yui/build/container/assets/blck16_1.gif' => 'b9aeaed783a1c845f699daf2c6ee563a',
+ './include/javascript/yui/build/container/assets/alrt16_1.gif' => '7764b275c2e10a40bff0061f94e9b8e9',
+ './include/javascript/yui/build/connection/connection_core.js' => '4be1743c83638c7cc479799f4fb7ddb1',
+ './include/javascript/yui/build/connection/connection_core-min.js' => '4b494585224308f921d115f17e21b426',
+ './include/javascript/yui/build/connection/connection_core-debug.js' => '2b5180cc72b9050d21a658a8bf38833c',
+ './include/javascript/yui/build/connection/connection.swf' => 'b4f652fc6f38593551ab5298b1077901',
+ './include/javascript/yui/build/connection/connection.js' => '1f5039e1aad61c3db45dc48097188b96',
+ './include/javascript/yui/build/connection/connection-min.js' => '6ae7d4c034ce5f44c66fc116a3504511',
+ './include/javascript/yui/build/colorpicker/colorpicker.js' => 'b32bc4124e866857485f3d9b074b93b2',
+ './include/javascript/yui/build/colorpicker/colorpicker-min.js' => '36de5bb3a2e4a172bc26d7125bfce5f0',
+ './include/javascript/yui/build/colorpicker/assets/skins/sam/picker_mask.png' => 'a4d3b14fbcc5b8f112d3635f981d6a1c',
+ './include/javascript/yui/build/colorpicker/assets/skins/sam/hue_bg.png' => '73ae3465d3dcbd95ebb4165760fac8e8',
+ './include/javascript/yui/build/colorpicker/assets/skins/sam/colorpicker.css' => '21eaa2969dd55fe80afc1928fd37e7b5',
+ './include/javascript/yui/build/colorpicker/assets/skins/sam/colorpicker-skin.css' => '18cc2d8bac896cc6e95a222ee217c4eb',
+ './include/javascript/yui/build/colorpicker/assets/picker_thumb.png' => '96aa37e578d0428346e4c7170ac9a230',
+ './include/javascript/yui/build/colorpicker/assets/picker_mask.png' => 'a4d3b14fbcc5b8f112d3635f981d6a1c',
+ './include/javascript/yui/build/colorpicker/assets/hue_thumb.png' => 'b1a887427b558af46f17262784da3583',
+ './include/javascript/yui/build/colorpicker/assets/colorpicker-core.css' => '9f1c2687bab335e4a0f822734461bf66',
+ './include/javascript/yui/build/charts/charts.js' => '09127fabb0fcfc57ce3d15ff2d569533',
+ './include/javascript/yui/build/charts/charts-min.js' => '392da34fb5198a77e25a3442e4b42a03',
+ './include/javascript/yui/build/charts/assets/charts.swf' => '59c6e2c9ae7de87f11dd3db3336de8b6',
+ './include/javascript/yui/build/carousel/carousel.js' => '604b54e0dd9cde8344e2828d51cb331f',
+ './include/javascript/yui/build/carousel/carousel-min.js' => 'da0d2e1b6b141c02c83328b61ccd23df',
+ './include/javascript/yui/build/carousel/assets/skins/sam/carousel.css' => '0d1ed494db742ffbfd471f41eaee1840',
+ './include/javascript/yui/build/carousel/assets/skins/sam/carousel-skin.css' => '06ad5ed644ae41fd61603890a29cf3a1',
+ './include/javascript/yui/build/carousel/assets/skins/sam/ajax-loader.gif' => '734023ef4fd81fb5638c9d5c3d6a8fdf',
+ './include/javascript/yui/build/carousel/assets/carousel-core.css' => '32accad6ca1819bf19da7c546b8aae88',
+ './include/javascript/yui/build/carousel/assets/ajax-loader.gif' => '734023ef4fd81fb5638c9d5c3d6a8fdf',
+ './include/javascript/yui/build/calendar/calendar.js' => '3fa723bf49850ee19651ccac34d0ac2e',
+ './include/javascript/yui/build/calendar/calendar-min.js' => '852c2c3bc8c283b712d99c6c24e510ed',
+ './include/javascript/yui/build/calendar/assets/skins/sam/calendar.css' => 'ad3ccb220f106da477a25f9a637f5053',
+ './include/javascript/yui/build/calendar/assets/skins/sam/calendar-skin.css' => '215ba5a2c5a1dbd219db05a58f13b60c',
+ './include/javascript/yui/build/calendar/assets/calx.gif' => 'acc1427b926515c1ec846e04e3b635cd',
+ './include/javascript/yui/build/calendar/assets/calrt.gif' => 'ba0b2098813b15aa3cc655e881c92d0a',
+ './include/javascript/yui/build/calendar/assets/callt.gif' => '0718c393fbd4095b219803cb6b7bcbf8',
+ './include/javascript/yui/build/calendar/assets/calgrad.png' => 'd028abaadeebb310606448cfc7ba2bfe',
+ './include/javascript/yui/build/calendar/assets/calendar.css' => 'cdee21e708db89a3f21611de213b4d9f',
+ './include/javascript/yui/build/calendar/assets/calendar-core.css' => 'be61597ae2a5d6745f4295f4e281a211',
+ './include/javascript/yui/build/button/button.js' => '5513a50284659e706665a98f9b23835e',
+ './include/javascript/yui/build/button/button-min.js' => '3442458b76b17709d00135e8e9c8ddc1',
+ './include/javascript/yui/build/button/assets/skins/sam/split-button-arrow.png' => 'ced974d5c685e5dfa0a37b824a6b5d48',
+ './include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-hover.png' => '36e66540d2feba76b8991e18b76fe93b',
+ './include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-focus.png' => '36e66540d2feba76b8991e18b76fe93b',
+ './include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-disabled.png' => 'db73dce6da2f5c5f02399c93488ce69e',
+ './include/javascript/yui/build/button/assets/skins/sam/split-button-arrow-active.png' => '890272b241c1d8a0db3ce5680b71fab0',
+ './include/javascript/yui/build/button/assets/skins/sam/menu-button-arrow.png' => '6305efb37fa05af65c79b58b9d4c1b03',
+ './include/javascript/yui/build/button/assets/skins/sam/menu-button-arrow-disabled.png' => '4df7235ca027f2546b2a216e59f81fb0',
+ './include/javascript/yui/build/button/assets/skins/sam/button.css' => '8dd40560e2b5695c02d91e59f2e787c9',
+ './include/javascript/yui/build/button/assets/skins/sam/button-skin.css' => 'a3c353c70c804be0a38d441251be4c8a',
+ './include/javascript/yui/build/button/assets/button-core.css' => 'ef05faed4ff9d4dd92815da7a8485718',
+ './include/javascript/yui/build/base/base.css' => 'f8e14c2b50188a4bd7553863579cd965',
+ './include/javascript/yui/build/base/base-min.css' => '2ba459363a0b19b112ad16be03da005f',
+ './include/javascript/yui/build/autocomplete/autocomplete.js' => '82e7b838b2a4ac953d218d4369fdcc2e',
+ './include/javascript/yui/build/autocomplete/autocomplete-min.js' => 'd87853c9b79ab88bff32909fa686e76c',
+ './include/javascript/yui/build/autocomplete/assets/skins/sam/autocomplete.css' => 'df782e1c9722d460b294cf30d536143c',
+ './include/javascript/yui/build/autocomplete/assets/skins/sam/autocomplete-skin.css' => 'd11e8caba6ebc10943fa7d5b0c592406',
+ './include/javascript/yui/build/autocomplete/assets/autocomplete-core.css' => '02f2ac7e6bf5753422fbddab521c7d19',
+ './include/javascript/yui/build/assets/skins/sam/yuitest.css' => '793339721d8f8dea54c60348fe4a853e',
+ './include/javascript/yui/build/assets/skins/sam/wait.gif' => 'b0cd5a5dc070c705ebf8814a909802c3',
+ './include/javascript/yui/build/assets/skins/sam/treeview.css' => 'cf472192f2e3c5e89098f9d83732c746',
+ './include/javascript/yui/build/assets/skins/sam/treeview-sprite.gif' => '115a1070e1398629700a11d4f5d546bb',
+ './include/javascript/yui/build/assets/skins/sam/treeview-loading.gif' => '8f1310bf9e7aa892d2dc09c4058c7bd3',
+ './include/javascript/yui/build/assets/skins/sam/tabview.css' => 'a87041d15dbd06a27f7d8b94100bafae',
+ './include/javascript/yui/build/assets/skins/sam/sprite.psd' => '1c35d9ed1d8f86b406b376c66e41ef01',
+ './include/javascript/yui/build/assets/skins/sam/sprite.png' => '96b257a32a932f7739d7dab52b38ee8f',
+ './include/javascript/yui/build/assets/skins/sam/split-button-arrow.png' => 'ced974d5c685e5dfa0a37b824a6b5d48',
+ './include/javascript/yui/build/assets/skins/sam/split-button-arrow-hover.png' => '36e66540d2feba76b8991e18b76fe93b',
+ './include/javascript/yui/build/assets/skins/sam/split-button-arrow-focus.png' => '36e66540d2feba76b8991e18b76fe93b',
+ './include/javascript/yui/build/assets/skins/sam/split-button-arrow-disabled.png' => 'db73dce6da2f5c5f02399c93488ce69e',
+ './include/javascript/yui/build/assets/skins/sam/split-button-arrow-active.png' => '890272b241c1d8a0db3ce5680b71fab0',
+ './include/javascript/yui/build/assets/skins/sam/slider.css' => '71f7bccc93416362d854d66c50383d3d',
+ './include/javascript/yui/build/assets/skins/sam/skin.css' => '3767651bc262bb1f86042a3f47213e95',
+ './include/javascript/yui/build/assets/skins/sam/simpleeditor.css' => '1ccd68dda0b071fa28dc70b2f154cb4c',
+ './include/javascript/yui/build/assets/skins/sam/resize.css' => '9c978b19e16ad208645904c9323d5a31',
+ './include/javascript/yui/build/assets/skins/sam/progressbar.css' => 'f39fc4327836dbf61b7e433f6246e0ab',
+ './include/javascript/yui/build/assets/skins/sam/profilerviewer.css' => 'e07d72c12fc6c0028b89d88da7ec53d2',
+ './include/javascript/yui/build/assets/skins/sam/picker_mask.png' => 'a4d3b14fbcc5b8f112d3635f981d6a1c',
+ './include/javascript/yui/build/assets/skins/sam/paginator.css' => '2bb7f5bf775e4770dd2b6f9e36611b92',
+ './include/javascript/yui/build/assets/skins/sam/menuitem_submenuindicator_disabled.png' => '42a8a785ecb430826ebd4748fc77ebc0',
+ './include/javascript/yui/build/assets/skins/sam/menuitem_submenuindicator.png' => '10f0de223bc3688a8986c23f71f081f1',
+ './include/javascript/yui/build/assets/skins/sam/menuitem_checkbox_disabled.png' => '6d9c1ef2cc0823c45226e43f9ef0e3dd',
+ './include/javascript/yui/build/assets/skins/sam/menuitem_checkbox.png' => '01d544275d0ee95fae025242d1eab1d5',
+ './include/javascript/yui/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png' => 'd8c20340be4484d2153ecd1a8b21f57f',
+ './include/javascript/yui/build/assets/skins/sam/menubaritem_submenuindicator.png' => '1424f886ef59424f1aa19fa94771fb3f',
+ './include/javascript/yui/build/assets/skins/sam/menu.css' => '6f10107d3d986fdad286d5f6d5e5002f',
+ './include/javascript/yui/build/assets/skins/sam/menu-button-arrow.png' => '6305efb37fa05af65c79b58b9d4c1b03',
+ './include/javascript/yui/build/assets/skins/sam/menu-button-arrow-disabled.png' => '4df7235ca027f2546b2a216e59f81fb0',
+ './include/javascript/yui/build/assets/skins/sam/logger.css' => '34c9d2d0dc2dfecd76703d3ac210088a',
+ './include/javascript/yui/build/assets/skins/sam/loading.gif' => '8f1310bf9e7aa892d2dc09c4058c7bd3',
+ './include/javascript/yui/build/assets/skins/sam/layout_sprite.png' => '0f5a66998a0b88cabfe0489a6a11e28a',
+ './include/javascript/yui/build/assets/skins/sam/layout.css' => '65d50fedbdcb941e774d8ed0bfdce3c7',
+ './include/javascript/yui/build/assets/skins/sam/imagecropper.css' => '14b933dace6b55ff4bd29dfa532049e9',
+ './include/javascript/yui/build/assets/skins/sam/hue_bg.png' => '73ae3465d3dcbd95ebb4165760fac8e8',
+ './include/javascript/yui/build/assets/skins/sam/header_background.png' => '412285f6b44f1d7757fc005680c2ecf5',
+ './include/javascript/yui/build/assets/skins/sam/editor.css' => '1ccd68dda0b071fa28dc70b2f154cb4c',
+ './include/javascript/yui/build/assets/skins/sam/editor-sprite.gif' => 'b72bb0d8d92b3a946cb6be25d2c885fa',
+ './include/javascript/yui/build/assets/skins/sam/editor-sprite-active.gif' => 'e7a74b72201d29021d6d04d85f86f0c9',
+ './include/javascript/yui/build/assets/skins/sam/editor-knob.gif' => '43c236afae83c3032ca8da61d3a021b6',
+ './include/javascript/yui/build/assets/skins/sam/dt-arrow-up.png' => '27498450164be1b258cae9dfdd534b69',
+ './include/javascript/yui/build/assets/skins/sam/dt-arrow-dn.png' => 'ee0dd66007d4f34b5e6660b4abbb5a65',
+ './include/javascript/yui/build/assets/skins/sam/desc.gif' => '4708d3f08d550225360a43cd8ca2fab4',
+ './include/javascript/yui/build/assets/skins/sam/datatable.css' => 'd2398264754747241f8eebdcd18d69d2',
+ './include/javascript/yui/build/assets/skins/sam/container.css' => 'e436622acdb4bc6986de749c426f1c04',
+ './include/javascript/yui/build/assets/skins/sam/colorpicker.css' => '21eaa2969dd55fe80afc1928fd37e7b5',
+ './include/javascript/yui/build/assets/skins/sam/check2.gif' => '3544088604d6d6e519a3a392db89c38d',
+ './include/javascript/yui/build/assets/skins/sam/check1.gif' => '691389bb26f429e79666599992a384b3',
+ './include/javascript/yui/build/assets/skins/sam/check0.gif' => 'd3e7d474e008b8cb585eb05c5baafe5a',
+ './include/javascript/yui/build/assets/skins/sam/carousel.css' => '71339651dc17bd504e1865b38de5acff',
+ './include/javascript/yui/build/assets/skins/sam/calendar.css' => '98bc5824a4a03d18bba4b8f145092b79',
+ './include/javascript/yui/build/assets/skins/sam/button.css' => '44e8590c6db616e71956614da45a13a3',
+ './include/javascript/yui/build/assets/skins/sam/blankimage.png' => '91c1defa5830c414bd5d43fb63d30101',
+ './include/javascript/yui/build/assets/skins/sam/bg-v.gif' => '220b443b77004914d4293a655299e2ce',
+ './include/javascript/yui/build/assets/skins/sam/bg-h.gif' => '4d4b3a56c225f8f21f7d839ba2b03823',
+ './include/javascript/yui/build/assets/skins/sam/bar-v.png' => '54cd63ec61c91525f081428bc784021c',
+ './include/javascript/yui/build/assets/skins/sam/bar-h.png' => 'a4182c879e01c66bfaf9c188202c326b',
+ './include/javascript/yui/build/assets/skins/sam/back-v.png' => 'f0179d9bbb6e6f7796caed9d1b0b9795',
+ './include/javascript/yui/build/assets/skins/sam/back-h.png' => '972e692bc2c40a33fa30f3333c5e5821',
+ './include/javascript/yui/build/assets/skins/sam/autocomplete.css' => 'df782e1c9722d460b294cf30d536143c',
+ './include/javascript/yui/build/assets/skins/sam/asc.gif' => '7053becd07a62f576bb8767a5d9875f0',
+ './include/javascript/yui/build/assets/skins/sam/ajax-loader.gif' => '734023ef4fd81fb5638c9d5c3d6a8fdf',
+ './include/javascript/yui/build/animation/animation.js' => '1dd52b9ff5b763668113153d3c26c3df',
+ './include/javascript/yui/build/animation/animation-min.js' => '87ab37459d9aed17838e38af78fee22d',
+ './include/javascript/yui/README' => '4dc7cd50545b8e539199a9d582f711ed',
+ './include/javascript/yui/LICENSE.txt' => '8836083506dadbf2735da1d444429ede',
+ './include/javascript/tiny_mce/utils/validate.js' => 'fe7d3b49f9c3587e40a9e29cd1ad9550',
+ './include/javascript/tiny_mce/utils/mctabs.js' => '0d310e7ec0cc85e584ef4bc456735b35',
+ './include/javascript/tiny_mce/utils/form_utils.js' => '7f898490f1e26b91192ebde3791b7e28',
+ './include/javascript/tiny_mce/utils/editable_selects.js' => 'a67bc4b79368958a0b8e8bd6e9c0d751',
+ './include/javascript/tiny_mce/tiny_mce_src.js' => '484235a72704170be94e2a5ba59e2285',
+ './include/javascript/tiny_mce/tiny_mce_popup.js' => 'c51f86c7aad0344e8c6b15e5edb67106',
+ './include/javascript/tiny_mce/tiny_mce.js' => '2ed1dddf27f0dc995e2c369c4b6fcc77',
+ './include/javascript/tiny_mce/themes/simple/skins/o2k7/ui.css' => '6649913256b2a0e48a1337d1c73d31d1',
+ './include/javascript/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png' => '405ca3d63b48667ef485553192507f59',
+ './include/javascript/tiny_mce/themes/simple/skins/o2k7/content.css' => 'db914acf7c5b603d641bca3ef9141a7e',
+ './include/javascript/tiny_mce/themes/simple/skins/default/ui.css' => '8f5fb8a371d03eb652b1d14e4b879c24',
+ './include/javascript/tiny_mce/themes/simple/skins/default/content.css' => '3b5ee10accbe8f436bd551b7bb7067b0',
+ './include/javascript/tiny_mce/themes/simple/langs/en.js' => '38c39321c50f9c8e58b757618399043a',
+ './include/javascript/tiny_mce/themes/simple/img/icons.gif' => '749151955998f915596270f8c452af6e',
+ './include/javascript/tiny_mce/themes/simple/editor_template_src.js' => 'f4b951c7a3b88dcb16718661362baf73',
+ './include/javascript/tiny_mce/themes/simple/editor_template.js' => '45f4d2bf0007e3f8fef1e8bdccff214c',
+ './include/javascript/tiny_mce/themes/advanced/source_editor.htm' => 'ad4599870c78219ce16abd5dc75159dc',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css' => '623a420867f1da38168b5ab0eac1afcc',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/ui_black.css' => 'dd03578fd4e33798de6d86c4564e4c66',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/ui.css' => 'b9db394d414b1d2f0d8930522e676c5d',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png' => '5690ef573f4dc74ec3eb4d101806976e',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png' => 'a5ad448e9c25120cb7e05fffe4a6234f',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png' => '8c9b1f0ee9deb6374983650edbd6ddfc',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/dialog.css' => '32d8369bcd5f49067b6c0905b2bb6971',
+ './include/javascript/tiny_mce/themes/advanced/skins/o2k7/content.css' => '4a0a94603795b7bfc41ff76ea8889db7',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/ui.css' => '95f5bbc6ea992fcb641f0275025dc438',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/img/tabs.gif' => '93f97588a35da1f45fdcb975d4380913',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/img/progress.gif' => '50c5e3e79b276c92df6cc52caeb464f0',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/img/menu_check.gif' => 'c7d003885737f94768eecae49dcbca63',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif' => 'e21752451a9d80e276fef7b602bdbdba',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/img/items.gif' => '5cb42865ce70a58d420786854fed4ae1',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/img/buttons.png' => '1e0acdc2135897e6a95bb40cfde2fbc6',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/dialog.css' => '2c50db59d058317010775677fee63ac3',
+ './include/javascript/tiny_mce/themes/advanced/skins/default/content.css' => '2f921f2c07fa24953530b23bf2000e0a',
+ './include/javascript/tiny_mce/themes/advanced/link.htm' => '2951c33235fe77a9b2d20b50ade5bdfd',
+ './include/javascript/tiny_mce/themes/advanced/langs/en_dlg.js' => '9a83ef13d214953214b354ca5b657867',
+ './include/javascript/tiny_mce/themes/advanced/langs/en.js' => '6cfaa5303f0e96e2fbe1ff210ba1f65b',
+ './include/javascript/tiny_mce/themes/advanced/js/source_editor.js' => '4b3abeb1908bef7872238e184a5a40d9',
+ './include/javascript/tiny_mce/themes/advanced/js/link.js' => 'e4eaaa5fcee50264e9b24370cc802b76',
+ './include/javascript/tiny_mce/themes/advanced/js/image.js' => 'fd66296c6168ac8b5bd72cf2b027c3d4',
+ './include/javascript/tiny_mce/themes/advanced/js/color_picker.js' => '2ce934aa3086cba10c51c6d055177f8f',
+ './include/javascript/tiny_mce/themes/advanced/js/charmap.js' => '27f30d99721bd0ff665a443c49a22702',
+ './include/javascript/tiny_mce/themes/advanced/js/anchor.js' => '8988b8d83a5d753ddcb3600b976780fd',
+ './include/javascript/tiny_mce/themes/advanced/js/about.js' => 'cd4f25e57d9c7c3c5eaed2b4234c8787',
+ './include/javascript/tiny_mce/themes/advanced/img/icons.gif' => 'e893a1f9e0c9c6240ba28756cf838f5f',
+ './include/javascript/tiny_mce/themes/advanced/img/colorpicker.jpg' => '02ae48639aa5729e6a40fb64455c32a2',
+ './include/javascript/tiny_mce/themes/advanced/image.htm' => '8008302022a40226c46f87fceac11f62',
+ './include/javascript/tiny_mce/themes/advanced/editor_template_src.js' => 'c6ca13b7383944ab9dca14b27f2a8240',
+ './include/javascript/tiny_mce/themes/advanced/editor_template.js' => 'ed03663b2f2feeca90dc23e6add11eef',
+ './include/javascript/tiny_mce/themes/advanced/color_picker.htm' => '01474b7f41da7d851c5a7f27aa2f2ff0',
+ './include/javascript/tiny_mce/themes/advanced/charmap.htm' => 'b3f3e37cff43d90e2fec656b52f1b67a',
+ './include/javascript/tiny_mce/themes/advanced/anchor.htm' => 'fece56d073731444af6747bf65fbb257',
+ './include/javascript/tiny_mce/themes/advanced/about.htm' => '2102cad8b48c2e05fa8ec2fd6be6c7e9',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js' => 'e845f30954520a5113ca623b017fb723',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/ins.js' => 'ced8412e867557ead95fb2146e73dab1',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/element_common.js' => 'f8e0a80427f8bac56c369cd8b43e12dd',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/del.js' => 'e2c424ec61e25750fabd5bb0c8de74d7',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/cite.js' => 'b493826c114ded7a7c950d42bedc6192',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/attributes.js' => '9a57a3801c04bb20eb79b47a6ac9a9d2',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/acronym.js' => 'aee35e665ca5cbe78baef305ba9dfd0a',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/js/abbr.js' => '76f004b5aea36c9471e7612f4560a286',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/ins.htm' => '513ab8c5155b01f641be6a7e5dbf06a3',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js' => '9cdc869de54673668f57743e32012133',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/editor_plugin.js' => '6c2389c55cc2d835a14d181554fe23fb',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/del.htm' => '90ca26878395f58b40a728c3f3613c8d',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/css/popup.css' => '80b339ec8c041f8adc5aecb03c7d6f99',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/css/attributes.css' => '289bd1e4958e04caf7fac5e4613732fd',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/cite.htm' => '8e546c512946df4e064cd93ae89154d9',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/attributes.htm' => '66f06ee6805756a2ede60121a9aac0b1',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/acronym.htm' => '90610e1e803e4a2c70283fe54ead82d7',
+ './include/javascript/tiny_mce/plugins/xhtmlxtras/abbr.htm' => '6902034abc4b6cef1bc1b0ef66407403',
+ './include/javascript/tiny_mce/plugins/visualchars/editor_plugin_src.js' => 'b6e6e4adbc2a55c1cdfdeae004aa4da1',
+ './include/javascript/tiny_mce/plugins/visualchars/editor_plugin.js' => '8fec0ef8561966c627ef5997a4b76ce6',
+ './include/javascript/tiny_mce/plugins/template/template.htm' => 'd69375f0253c27fbe1f600eb8b3f3890',
+ './include/javascript/tiny_mce/plugins/template/langs/en_dlg.js' => 'e672f0d31c3cf67114d1ad72bd1d1147',
+ './include/javascript/tiny_mce/plugins/template/js/template.js' => 'e65e4c8007b1528670790af8c48e07dc',
+ './include/javascript/tiny_mce/plugins/template/editor_plugin_src.js' => '9abd7e5d1f38a52bf1f15bb1baf43f6f',
+ './include/javascript/tiny_mce/plugins/template/editor_plugin.js' => '345d085ce78d9bb1e14ab6fe4f151e44',
+ './include/javascript/tiny_mce/plugins/template/css/template.css' => '6cc98d131d493071f2b14dac07f2cdbd',
+ './include/javascript/tiny_mce/plugins/template/blank.htm' => '9089127d1ef7411473edea629d4be1ce',
+ './include/javascript/tiny_mce/plugins/table/table.htm' => 'c655392d87b67af8331c7d2a8cdda4b5',
+ './include/javascript/tiny_mce/plugins/table/row.htm' => '3a44d6da2354b63f96ce6fc1ebb9ce25',
+ './include/javascript/tiny_mce/plugins/table/merge_cells.htm' => '031d824351b82c36fba89fadabb38951',
+ './include/javascript/tiny_mce/plugins/table/langs/en_dlg.js' => '15e65841dce0729b82812f84753fb529',
+ './include/javascript/tiny_mce/plugins/table/js/table.js' => '449a03ea6b9b5a738c294665fdd3a85e',
+ './include/javascript/tiny_mce/plugins/table/js/row.js' => '727574d09d5158bcccada83601bd4e46',
+ './include/javascript/tiny_mce/plugins/table/js/merge_cells.js' => 'a1c44cc854082e3d4f4824ff06cee170',
+ './include/javascript/tiny_mce/plugins/table/js/cell.js' => 'bad736ef8478a61a6e1b5316b4bd561e',
+ './include/javascript/tiny_mce/plugins/table/editor_plugin_src.js' => '72247df7a8c8b4ce6ad4797c0d5e3d30',
+ './include/javascript/tiny_mce/plugins/table/editor_plugin.js' => 'aa25f98e7fc772c84c3a5e822417c781',
+ './include/javascript/tiny_mce/plugins/table/css/table.css' => '541baebf7d11536dd4d31d6383e2d22d',
+ './include/javascript/tiny_mce/plugins/table/css/row.css' => 'fcb6c71f2226f482a0ac9e48494ca87b',
+ './include/javascript/tiny_mce/plugins/table/css/cell.css' => '4662497b8afb4b1c32eae399d37073e8',
+ './include/javascript/tiny_mce/plugins/table/cell.htm' => '31736b89077edd83afd52ffab4a8a83a',
+ './include/javascript/tiny_mce/plugins/style/props.htm' => 'd4e3d92f757881513ad4200472b1e87c',
+ './include/javascript/tiny_mce/plugins/style/langs/en_dlg.js' => '62b2b463ed9cf072aa8e7d09428287aa',
+ './include/javascript/tiny_mce/plugins/style/js/props.js' => '98186487c1acc6febb4fb0cb76bb9bfa',
+ './include/javascript/tiny_mce/plugins/style/editor_plugin_src.js' => '6a030e35ef8b6409ceb92c38556152db',
+ './include/javascript/tiny_mce/plugins/style/editor_plugin.js' => 'a33cf070cce70e0aaa4dd395366d9911',
+ './include/javascript/tiny_mce/plugins/style/css/props.css' => 'd1a2f4faed2da4947a309f32d912968a',
+ './include/javascript/tiny_mce/plugins/spellchecker/img/wline.gif' => 'c136c9f8e00718a98947a21d8adbcc56',
+ './include/javascript/tiny_mce/plugins/spellchecker/editor_plugin_src.js' => '849d4a2113fdecc2685fb896d65dcdca',
+ './include/javascript/tiny_mce/plugins/spellchecker/editor_plugin.js' => 'aed898ab6ffa523d8967696445630198',
+ './include/javascript/tiny_mce/plugins/spellchecker/css/content.css' => 'd236d4333281b4eae7a1e2b514b691f4',
+ './include/javascript/tiny_mce/plugins/searchreplace/searchreplace.htm' => 'ae3fd1271c4d96722acbe34a10e43dc2',
+ './include/javascript/tiny_mce/plugins/searchreplace/langs/en_dlg.js' => '8d4507bdc22c3d39fa0b1537172c8af3',
+ './include/javascript/tiny_mce/plugins/searchreplace/js/searchreplace.js' => '6fbb74616637579241653a12e3a9219f',
+ './include/javascript/tiny_mce/plugins/searchreplace/editor_plugin_src.js' => '5275f11680d34249afb562eb123c3957',
+ './include/javascript/tiny_mce/plugins/searchreplace/editor_plugin.js' => '3154c3cb319e9dd9c5994ae7125ad4f2',
+ './include/javascript/tiny_mce/plugins/searchreplace/css/searchreplace.css' => 'd4f8026713b4f1394d9977196a9de1bd',
+ './include/javascript/tiny_mce/plugins/save/editor_plugin_src.js' => 'd6f8bb16c56f49e1dfb5b711b10fc7df',
+ './include/javascript/tiny_mce/plugins/save/editor_plugin.js' => 'b9cc817b9e834924aca4af95b3d0c1bf',
+ './include/javascript/tiny_mce/plugins/safari/editor_plugin_src.js' => 'd203cbb96fd7eee16254a2997efd67c9',
+ './include/javascript/tiny_mce/plugins/safari/editor_plugin.js' => '9d7a37a26a6773ae236ed7a75f4617da',
+ './include/javascript/tiny_mce/plugins/safari/blank.htm' => 'c9a4909a579f24cd23fc0ae847e06241',
+ './include/javascript/tiny_mce/plugins/print/editor_plugin_src.js' => '2891244215e0e9229d0286308408f50b',
+ './include/javascript/tiny_mce/plugins/print/editor_plugin.js' => '6557fd2bd935aefa392ba71679edbebe',
+ './include/javascript/tiny_mce/plugins/preview/preview.html' => '1ee9766ccdeb6a63dc55ff3b6b53186a',
+ './include/javascript/tiny_mce/plugins/preview/jscripts/embed.js' => '5df3783492b848adde42124a1e9cf383',
+ './include/javascript/tiny_mce/plugins/preview/example.html' => 'f6ae5a579ef4ef3b8648329395e6d0de',
+ './include/javascript/tiny_mce/plugins/preview/editor_plugin_src.js' => '825fe1643314038a2c3a2c0518a2898d',
+ './include/javascript/tiny_mce/plugins/preview/editor_plugin.js' => '7bcbf12854d82cd45f7b4a9ec17f7391',
+ './include/javascript/tiny_mce/plugins/paste/pasteword.htm' => 'ce42817c01ddd922c3f1c5c9701c0036',
+ './include/javascript/tiny_mce/plugins/paste/pastetext.htm' => 'a83b2f9eb0861b1bd5db22e57da4280d',
+ './include/javascript/tiny_mce/plugins/paste/langs/en_dlg.js' => 'e5cf25d2ec374f911c7d009a19fa5474',
+ './include/javascript/tiny_mce/plugins/paste/js/pasteword.js' => '7f69babced989fb799e0f7a617441c71',
+ './include/javascript/tiny_mce/plugins/paste/js/pastetext.js' => '05482c276313c900e2a2b55508712b13',
+ './include/javascript/tiny_mce/plugins/paste/editor_plugin_src.js' => '7744bd032e98df4fe576a68418241008',
+ './include/javascript/tiny_mce/plugins/paste/editor_plugin.js' => '5b145b1c56b55c90b4aea900fce25880',
+ './include/javascript/tiny_mce/plugins/paste/css/pasteword.css' => '2042313f6628ef2b742c74aba0fd9b60',
+ './include/javascript/tiny_mce/plugins/paste/css/blank.css' => 'c15c875a4c54efa8554bca63aee6ecb9',
+ './include/javascript/tiny_mce/plugins/paste/blank.htm' => '88783f6e539184616896268bca04c25e',
+ './include/javascript/tiny_mce/plugins/pagebreak/img/trans.gif' => '12bf9e19374920de3146a64775f46a5e',
+ './include/javascript/tiny_mce/plugins/pagebreak/img/pagebreak.gif' => '48872075f721bf57a517e3275d61c0ba',
+ './include/javascript/tiny_mce/plugins/pagebreak/editor_plugin_src.js' => '8df9dc2e60f32b9429b592d3545f9bf5',
+ './include/javascript/tiny_mce/plugins/pagebreak/editor_plugin.js' => 'a1c5a59a36f772bc526411a9c8e74c63',
+ './include/javascript/tiny_mce/plugins/pagebreak/css/content.css' => 'd9664762a610f2b5f7b10b5781f3299a',
+ './include/javascript/tiny_mce/plugins/noneditable/editor_plugin_src.js' => '62077ede3d5f9a404297ef3f73e0a4a5',
+ './include/javascript/tiny_mce/plugins/noneditable/editor_plugin.js' => 'f305bdb3dbef3b880e69c48dfa4e40f4',
+ './include/javascript/tiny_mce/plugins/nonbreaking/editor_plugin_src.js' => 'c15a04691f8463cb0232e23f317a6b82',
+ './include/javascript/tiny_mce/plugins/nonbreaking/editor_plugin.js' => '9374e65064dfda87e93cd0163f236e5e',
+ './include/javascript/tiny_mce/plugins/media/media.htm' => '1f101c10c8c369f4466e95724148d454',
+ './include/javascript/tiny_mce/plugins/media/langs/en_dlg.js' => '26a49066e61ae69b5f837505afdea871',
+ './include/javascript/tiny_mce/plugins/media/js/media.js' => '1e782a443c073b57897597a0720e2a82',
+ './include/javascript/tiny_mce/plugins/media/js/embed.js' => '5df3783492b848adde42124a1e9cf383',
+ './include/javascript/tiny_mce/plugins/media/img/windowsmedia.gif' => 'c327cd167b3a7bc263d908b0d0154ead',
+ './include/javascript/tiny_mce/plugins/media/img/trans.gif' => '12bf9e19374920de3146a64775f46a5e',
+ './include/javascript/tiny_mce/plugins/media/img/shockwave.gif' => 'baa643b587565755157618032dc93e3c',
+ './include/javascript/tiny_mce/plugins/media/img/realmedia.gif' => 'b9734ee16d790e67bea01046feba28b7',
+ './include/javascript/tiny_mce/plugins/media/img/quicktime.gif' => '9a6a9fdead205b125c07ea37e71ed4f1',
+ './include/javascript/tiny_mce/plugins/media/img/flv_player.swf' => 'fe011e9725b2722b59bb8ef4991bf6bb',
+ './include/javascript/tiny_mce/plugins/media/img/flash.gif' => '6c69b02015d09280332ff8b07e4ea2f3',
+ './include/javascript/tiny_mce/plugins/media/editor_plugin_src.js' => 'ce9e21974624ae9aab32d2e3778bb443',
+ './include/javascript/tiny_mce/plugins/media/editor_plugin.js' => '9beecec5d5cbdc86bee17eadc0f5a545',
+ './include/javascript/tiny_mce/plugins/media/css/media.css' => '51795abbefc981b9f77083afd672a495',
+ './include/javascript/tiny_mce/plugins/media/css/content.css' => 'ebcad73e7f6785a308328129aa90d5cb',
+ './include/javascript/tiny_mce/plugins/layer/editor_plugin_src.js' => '5bf57b578756d293cf9be7845264158c',
+ './include/javascript/tiny_mce/plugins/layer/editor_plugin.js' => '67ea96e3d63b98215b64435bb9ea06d9',
+ './include/javascript/tiny_mce/plugins/insertdatetime/editor_plugin_src.js' => 'cee2d9a9ed09e51627350510b4f59b92',
+ './include/javascript/tiny_mce/plugins/insertdatetime/editor_plugin.js' => '0fba6e5bec7725b88b910721f1ba17a7',
+ './include/javascript/tiny_mce/plugins/inlinepopups/template.htm' => 'c01f15cd357d8dba4610c3eae6321930',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css' => '5e33280ecbcbc97d23f44ba1d23b578a',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif' => '193884a332e91059643448ed4bde2e04',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif' => '0365e75dd4a9ad61dc98dcb641207c21',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif' => '2e89a17a473f0e488f3e789ce998f064',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif' => '44f1d55b14fbc66b98f3899d90611c3c',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif' => '1743ac9f7f2267a6edafefc536a2265d',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif' => '9e911a2c3cb4720d44844ef2d1832a51',
+ './include/javascript/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif' => '56646a5e811547c8bc3d1b9790496b89',
+ './include/javascript/tiny_mce/plugins/inlinepopups/editor_plugin_src.js' => '8b90c63f48655787e47151ec44be119a',
+ './include/javascript/tiny_mce/plugins/inlinepopups/editor_plugin.js' => 'a7b58f0ddb0e55f591c00f06e21ada67',
+ './include/javascript/tiny_mce/plugins/iespell/editor_plugin_src.js' => 'bd46ad6daae27f6c9e7e7921386e1945',
+ './include/javascript/tiny_mce/plugins/iespell/editor_plugin.js' => 'e4e460c920b31b94153caacbf170851d',
+ './include/javascript/tiny_mce/plugins/fullscreen/fullscreen.htm' => '109958d17d54b93b827796c1a3bf0629',
+ './include/javascript/tiny_mce/plugins/fullscreen/editor_plugin_src.js' => 'e14f7ae502989882514d6c95fcb3c733',
+ './include/javascript/tiny_mce/plugins/fullscreen/editor_plugin.js' => 'd1ef8dc9ab08b7a58c5d96a56145ab4e',
+ './include/javascript/tiny_mce/plugins/fullpage/langs/en_dlg.js' => '785c97d3367c6d1e38ef0992b1353bdf',
+ './include/javascript/tiny_mce/plugins/fullpage/js/fullpage.js' => 'e8068fa9708f9457d4d1ee62ae7b13dc',
+ './include/javascript/tiny_mce/plugins/fullpage/fullpage.htm' => 'a035917ad7ab45825b1aa44ceebc084c',
+ './include/javascript/tiny_mce/plugins/fullpage/editor_plugin_src.js' => '3da0187e0e166ffd1cee9d09c3449fbb',
+ './include/javascript/tiny_mce/plugins/fullpage/editor_plugin.js' => '91acc45c66aaf73e58318072ff1bc7cd',
+ './include/javascript/tiny_mce/plugins/fullpage/css/fullpage.css' => '5aacff00f15c644c2edda317d39d480e',
+ './include/javascript/tiny_mce/plugins/example/langs/en_dlg.js' => '1edfe310d7cc45357de7093b47c863fd',
+ './include/javascript/tiny_mce/plugins/example/langs/en.js' => 'e3c958c51f74663e53d1fb5fe90c979f',
+ './include/javascript/tiny_mce/plugins/example/js/dialog.js' => 'ff7c6a3db0d905ae655a273b87d42c78',
+ './include/javascript/tiny_mce/plugins/example/img/example.gif' => '6036655a01df362267183a8b23fead10',
+ './include/javascript/tiny_mce/plugins/example/editor_plugin_src.js' => '6c83458b6d2857adf8855fd24e123195',
+ './include/javascript/tiny_mce/plugins/example/editor_plugin.js' => '82586c79393ca177140794c465f3719f',
+ './include/javascript/tiny_mce/plugins/example/dialog.htm' => '2790971b13eb7487d45504f98e574e27',
+ './include/javascript/tiny_mce/plugins/emotions/langs/en_dlg.js' => 'f6f80d840918e4bab3cb68fa135bb51b',
+ './include/javascript/tiny_mce/plugins/emotions/js/emotions.js' => '768ed76617dbe7fca0e7394c0f208681',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-yell.gif' => '19bb8ebfe3c2f5ef3ffb9aa4a027900d',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-wink.gif' => '4ae6aa98aa63363c16ea74f927696bd9',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-undecided.gif' => '3c0c011d16b1a2331385ed97e160a42a',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif' => '5ec3bb4781c8e43a51d3a1a948b98fc0',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-surprised.gif' => 'eff5a6fbfb80ca2d3ae929b0a1c15638',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-smile.gif' => 'c676407db519bdf42481870746f097d8',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-sealed.gif' => '28b9401b59fb7ad10b96f57aaa2630c4',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif' => '11c14bd1496afd0e21df115d25b68e96',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-laughing.gif' => 'b691cfd07d8181059f8a4b041d534cc4',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-kiss.gif' => '4ae8945f3960751b5d294f18242e144d',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-innocent.gif' => 'ec0477c8a206ff250782e40f9bae4b4c',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-frown.gif' => '59930208822fe755f651a67ef4b70530',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif' => '905294088277f201be5a8e0285fb7998',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-embarassed.gif' => 'd59171236e6b0b96091eeda1f7b57ce3',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-cry.gif' => 'e72bf995ceca9230273ed9909c5db9c8',
+ './include/javascript/tiny_mce/plugins/emotions/img/smiley-cool.gif' => 'e26e97a318f82ec144b0818e5a8f8edb',
+ './include/javascript/tiny_mce/plugins/emotions/emotions.htm' => 'df4b3424e331c7146510f61892ca6fa9',
+ './include/javascript/tiny_mce/plugins/emotions/editor_plugin_src.js' => 'b03aacb7f6d0010ba11cbcf8433327e7',
+ './include/javascript/tiny_mce/plugins/emotions/editor_plugin.js' => 'fc11ff82324f77c41e1a44c1044d79ff',
+ './include/javascript/tiny_mce/plugins/directionality/editor_plugin_src.js' => '62860b40fe8fc26a6ba2a6d8777bd3b3',
+ './include/javascript/tiny_mce/plugins/directionality/editor_plugin.js' => '7713d6e3e2531ea5047b4e2532448d43',
+ './include/javascript/tiny_mce/plugins/contextmenu/editor_plugin_src.js' => '79844351ba38362467267631cad31e30',
+ './include/javascript/tiny_mce/plugins/contextmenu/editor_plugin.js' => '47f5b7af1ec73bf958d29045b968cea2',
+ './include/javascript/tiny_mce/plugins/compat2x/editor_plugin_src.js' => '3f7fe550b6d08203ef20f7f9b75f4493',
+ './include/javascript/tiny_mce/plugins/compat2x/editor_plugin.js' => 'c3d0aefeb6c5853d66654cc63e7cd3d9',
+ './include/javascript/tiny_mce/plugins/bbcode/editor_plugin_src.js' => '8ec9b5c2ff78959fa189ebe54376ba78',
+ './include/javascript/tiny_mce/plugins/bbcode/editor_plugin.js' => '19384072defc93532c0ecb7da2cf8f80',
+ './include/javascript/tiny_mce/plugins/autosave/editor_plugin_src.js' => '1badd9a8ebfeeeaa4293fac97be6bb66',
+ './include/javascript/tiny_mce/plugins/autosave/editor_plugin.js' => 'f54e4df3a63237afd7471c95d8484f6e',
+ './include/javascript/tiny_mce/plugins/advlink/link.htm' => '28b4e8b3b295a9aad181667a71ad5a5a',
+ './include/javascript/tiny_mce/plugins/advlink/langs/en_dlg.js' => 'a8f914a5c88714aee11eda0d75c98e71',
+ './include/javascript/tiny_mce/plugins/advlink/js/advlink.js' => 'd27775961d02693ef20d36dd8206c95a',
+ './include/javascript/tiny_mce/plugins/advlink/editor_plugin_src.js' => '565fc5493ec00039570ac605e3b5f01c',
+ './include/javascript/tiny_mce/plugins/advlink/editor_plugin.js' => '519f312b12dbc801f5d199f19ea650bb',
+ './include/javascript/tiny_mce/plugins/advlink/css/advlink.css' => '19558f5e2b7a7d11968aacdc37e6e436',
+ './include/javascript/tiny_mce/plugins/advimage/langs/en_dlg.js' => '11192eee56b945762dd843279ba34b81',
+ './include/javascript/tiny_mce/plugins/advimage/js/image.js' => '5d1229957e7e297beb11e5cc931bd636',
+ './include/javascript/tiny_mce/plugins/advimage/img/sample.gif' => 'b9c7057c46716340e8967340ad11766e',
+ './include/javascript/tiny_mce/plugins/advimage/image.htm' => '9c047eccb30c3073ebdf58abb7239a35',
+ './include/javascript/tiny_mce/plugins/advimage/editor_plugin_src.js' => '83575eef2712b169d8ca3548dc9a7efd',
+ './include/javascript/tiny_mce/plugins/advimage/editor_plugin.js' => '848ad22a9baff75c57d0d7f645f361ba',
+ './include/javascript/tiny_mce/plugins/advimage/css/advimage.css' => 'cce2bc7334ac52894124133d62c8d09c',
+ './include/javascript/tiny_mce/plugins/advhr/rule.htm' => 'c7f2e7569234a4ee4650ecde6d5053ac',
+ './include/javascript/tiny_mce/plugins/advhr/langs/en_dlg.js' => 'ba874544a2e8a6c07c476a25c48deb16',
+ './include/javascript/tiny_mce/plugins/advhr/js/rule.js' => '2fa441f1684a33d3ea89bb31cdea1ba5',
+ './include/javascript/tiny_mce/plugins/advhr/editor_plugin_src.js' => 'e2e474ebf2f1351c85f249fd5c948183',
+ './include/javascript/tiny_mce/plugins/advhr/editor_plugin.js' => '713492f5963523fcc075d873cccfdacf',
+ './include/javascript/tiny_mce/plugins/advhr/css/advhr.css' => '2d33b4333e29436b2102747f2ee2f395',
+ './include/javascript/tiny_mce/license.txt' => '045d04e17422d99e338da75b9c749b7c',
+ './include/javascript/tiny_mce/langs/en.js' => '5a1cd3c93501e4f7c75267d5617e7c9a',
+ './include/javascript/sugarwidgets/SugarYUILoader.js' => '3004b379974f68076dc298ab70e1f62d',
+ './include/javascript/sugarwidgets/SugarYUIWidgets.js' => '101a53f750187962cd209b1cfe531099',
+ './include/javascript/jsAlerts.php' => 'b026aec8b25d773ffc2e2562d51991d8',
+ './include/javascript/javascript.php' => '688f6f9c621400fe6d8c60874d54c382',
+ './include/javascript/getYUIComboFile.php' => '301a1c825ce73b706c0d84a028bc40ef',
+ './include/images/seed_will_id.gif' => '2f106be21d1591fcb91636594eeb1689',
+ './include/images/seed_sarah_id.gif' => 'e2f269d97a3a3f500dff75b770d6c6b1',
+ './include/images/seed_sally_id.gif' => 'cf29cdbd09b88a5f0f8f038b5f6b1db6',
+ './include/images/seed_max_id.gif' => 'e208059a38b9899e47b9e3dad65e8888',
+ './include/images/seed_jim_id.gif' => 'ccdaf0d492f924e8af2611b374550abd',
+ './include/images/seed_chris_id.gif' => 'ec816fe3d80053c5225890e838a5813e',
+ './include/images/default_user_feed_picture.png' => '76d7a79b8b448b05b7e0107d72222b95',
+ './include/images/1.gif' => '9560abd50536d3d57c23316c75f93fe7',
+ './include/images/wiki.png' => '6d21a744511a1b55378fbc985daac0e4',
+ './include/images/university.png' => '346083109b89352e3a4b77cc249c56df',
+ './include/images/sugarsales_myarea.png' => '32a23fbbf16b4d48f2e07292818d8ace',
+ './include/images/sugarcrm_login.png' => 'afc309ed136be87743408f886b2c50b2',
+ './include/images/sugarcrm_copyright_logo.jpg' => 'cab0f0a114f2df12d8a5a4ec3fe3ad2a',
+ './include/images/sugarcrm_about_logo.gif' => '3b5367037b236499ea9ecb95c901f654',
+ './include/images/sugar_wizard_welcome.jpg' => '523c31a42a62812e815cb5f413edb0ff',
+ './include/images/sugar_md_open.png' => 'b16339fb0a08fc2b35ba9d7d811bfb69',
+ './include/images/sugar_icon.ico' => '92f1ffd4b2fef157613e48d2d2c7d9c8',
+ './include/images/spacer.png' => '7df3dbe42ba6f94e0373ba374a2c5a74',
+ './include/images/rss_xml.gif' => 'd69bb576307f6ccb889d7acc96303edf',
+ './include/images/poweredby_sugarcrm.png' => 'f3ad3d8f733c7326a8affbdc94a2e707',
+ './include/images/powered_by_sugarcrm.gif' => 'fbc4de76cab648346bd7273823e0a0e2',
+ './include/images/options_up.gif' => '9307eb60df1cc0151bae58e5a64506c1',
+ './include/images/options.gif' => '8670274891572e477026ce53702ba140',
+ './include/images/kb.png' => 'c2ca9ff53826ae025ea68f861957dcc9',
+ './include/images/iphone-toolbar.png' => 'e58c24e451aea4e82cfa1a5cb2c00ea8',
+ './include/images/iphone-listArrow.png' => '3d059e6b6957c1be7a1bfdb4316776e6',
+ './include/images/install_themes.jpg' => '01fe7a67fb311afe5e93e9819ca36b12',
+ './include/images/forums.png' => '6079f5d08a4d4b3504223209e1ae5b46',
+ './include/images/docs.png' => '0752db044e772d50293561053acac995',
+ './include/images/cube_bg.gif' => 'bb01880551373dc9a2056697be69e5c1',
+ './include/images/blank.gif' => 'fc94fb0c3ed8a8f909dbc7630a0987ff',
+ './include/images/SugarPlanet.swf' => '5af57f2ee896225c65d9411aa2a1b971',
+ './include/globalControlLinks.php' => 'ce7bc3b7f32aafef2a9796cde652b356',
+ './include/generic/SugarWidgets/SugarWidgetFieldfile.php' => 'c5bc9bca34c26513b98edc87521c26e5',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopSummaryButton.php' => '5696649565fb5a9d4ce9026896ccfc5f',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopSelectUsersButton.php' => '9fae334284b2425e0793eac8e786e57c',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopSelectContactsButton.php' => 'e762dcee7db8e1cf6e4e2a00ee7026ba',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopSelectButton.php' => 'ace464efc2015de1c6387f3086726bfc',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopScheduleMeetingButton.php' => '80202780d705fc3820af718521967ac3',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopScheduleCallButton.php' => '27c611e9a26d941e662520034e0fd05d',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateTaskButton.php' => 'ffea8c95fa8a3aaa35ab5392245515a8',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateNoteButton.php' => '7b5567ea71baa16d9c168378abb69a81',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateLeadNameButton.php' => '8b965c92591f1f6aadc56be9bebe77f2',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateCampaignLogEntryButton.php' => 'af0d6f1ec98b54b267fcc9fbba3e3563',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopCreateAccountNameButton.php' => 'bf9f9158ad56ac876c1608fe3e4c28ed',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopComposeEmailButton.php' => '981a63a7c741406101e24d99890f9eba',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopButtonQuickCreate.php' => 'e7982b2e1db4ec5bd1d3544e0da26a0c',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopButton.php' => 'a585b852abf10a6c8ca3580d841f9cad',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelTopArchiveEmailButton.php' => 'dc3ec22caf6297d2372565748171afbe',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelRemoveButtonProjects.php' => '95410891867c4aa7c3ecf1d22f05960a',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelRemoveButtonMeetings.php' => 'f0a69da4a6bcf4834f4bf95ed14f9152',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelRemoveButton.php' => 'd2a945db662c90388b569a79bc18d712',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelLoadSignedButton.php' => 'd85482cfc0b3a551a12dfcf11c11c492',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelIcon.php' => 'f53fa357004d47f82484f967aeacbf68',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelGetLatestButton.php' => '902c0450d1778518168e9a9f9ccfa6f5',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelEmailLink.php' => '95ff0dc2d42b1b25107ef128ab096a9e',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelEditRoleButton.php' => '69b53a79d5ef87686e296fbc05e2ec56',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelEditButton.php' => 'f9584779332d60db9491e0319e74427c',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelDetailViewLink.php' => '37e4981c6986c4e73cac346e2b63d2bd',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelConcat.php' => '0e697509261a028df51ceb692a6ea068',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelCloseButton.php' => '0ca0857af92ee67860aa46f9c9e46e07',
+ './include/generic/SugarWidgets/SugarWidgetSubPanelActivitiesStatusField.php' => '44eb88e248bef0ba23221ab83b6cae6a',
+ './include/generic/SugarWidgets/SugarWidgetReportField.php' => 'a97fcf5a523af0b705b84152a644afab',
+ './include/generic/SugarWidgets/SugarWidgetFieldvarchar.php' => '5cce3ce38cf44dfa33a0ad08a3564752',
+ './include/generic/SugarWidgets/SugarWidgetFielduser_name.php' => '25f000dd33af6d28855ed53ffb62ec0f',
+ './include/generic/SugarWidgets/SugarWidgetFieldurl.php' => '2da41197d48165e9190b36b441fe249f',
+ './include/generic/SugarWidgets/SugarWidgetFieldtime.php' => 'd9155212b43391cc39edb4fa76b48352',
+ './include/generic/SugarWidgets/SugarWidgetFieldtext.php' => '05289dd957f4af46af219fc9667bee1b',
+ './include/generic/SugarWidgets/SugarWidgetFieldsingleenum.php' => '0cf6ba23c43a1566d815587d7854653f',
+ './include/generic/SugarWidgets/SugarWidgetFieldrelate.php' => '41d73fbd5776752fb59d4f061513693b',
+ './include/generic/SugarWidgets/SugarWidgetFieldradioenum.php' => '84507957179e3141d1457ae5fa88271b',
+ './include/generic/SugarWidgets/SugarWidgetFieldphone.php' => '262983ecb15f82d6f97b7fa7b8b2a1fe',
+ './include/generic/SugarWidgets/SugarWidgetFieldparent_type.php' => 'cadd3bdca6fdc5581c8d3f12bcd65030',
+ './include/generic/SugarWidgets/SugarWidgetFieldnum.php' => '6e9acb9aa2dd466d512bad04055c077a',
+ './include/generic/SugarWidgets/SugarWidgetFieldname.php' => '82f23ab96426931818aaf182ba144bf4',
+ './include/generic/SugarWidgets/SugarWidgetFieldmultienum.php' => 'bc6c91efab351c068f12e475dd8775b5',
+ './include/generic/SugarWidgets/SugarWidgetFieldlongtext.php' => '8d5ff0012181531feb562c2efcbc64d9',
+ './include/generic/SugarWidgets/SugarWidgetFieldint.php' => 'a8c8b274638a9cf039b3d8c266416b9f',
+ './include/generic/SugarWidgets/SugarWidgetFieldimage.php' => '63b6909b63eafc2bda2d53cb5e6f30d5',
+ './include/generic/SugarWidgets/SugarWidgetFieldid.php' => '461a534ec0747e686e0ebda2d914845e',
+ './include/generic/SugarWidgets/SugarWidgetFieldfullname.php' => '3682f5255bf8218b17fc66c30b884999',
+ './include/generic/SugarWidgets/SugarWidgetFieldfloat.php' => '5d38efd212076d9f096e4225145198e4',
+ './include/generic/SugarWidgets/SugarWidgetFieldenum.php' => 'b793766549772ded73db9baf19a43451',
+ './include/generic/SugarWidgets/SugarWidgetFieldemail.php' => '2b239faf616c60f7162fe4fe7259c055',
+ './include/generic/SugarWidgets/SugarWidgetFielddouble.php' => '8a726ca346e99c9ca1bd6d4972158706',
+ './include/generic/SugarWidgets/SugarWidgetFielddecimal.php' => '732686fb5739045a130f90f38055cd57',
+ './include/generic/SugarWidgets/SugarWidgetFielddatetimecombo.php' => 'ed002f3290327c4159579183b42c7d2c',
+ './include/generic/SugarWidgets/SugarWidgetFielddatetime.php' => 'ef8b68006510a82183ca5f09cee12d59',
+ './include/generic/SugarWidgets/SugarWidgetFielddatepicker.php' => 'bccc9cba27b46155a0c37fb77531b976',
+ './include/generic/SugarWidgets/SugarWidgetFielddate.php' => 'fd743d90553bb939b2fd5e8c47064e60',
+ './include/generic/SugarWidgets/SugarWidgetFieldcurrency.php' => '0d5b18e3408daba97dfb52642ccd759d',
+ './include/generic/SugarWidgets/SugarWidgetFieldchar.php' => '0df053d7f26f7677a97cda3c03c1e212',
+ './include/generic/SugarWidgets/SugarWidgetFieldbool.php' => 'cf88ae65be60587132bd357ea5e12c94',
+ './include/generic/SugarWidgets/SugarWidgetField.php' => 'a495548c3eebdbfbd26d94a3588b4cb2',
+ './include/generic/SugarWidgets/SugarWidget.php' => '0270ae80c91ede2bd270dd2c364451ed',
+ './include/generic/Save2.php' => '8fe37a23641d1dac8c6eaa40e03356a9',
+ './include/generic/LayoutManager.php' => 'f683d0982c048f6ba6c1bd0386dcf746',
+ './include/generic/DeleteRelationship.php' => 'a09280088f5f6f6fcfb7fdb1477dd8b5',
+ './include/formbase.php' => 'a3a0d4280a6c00163c3f8f908fc56beb',
+ './include/fonts/License.html' => '8a22bc6b773aeb68f9748fd1920f84d4',
+ './include/fonts/Times-Roman.afm' => 'f257a72c31f6a864f4e0994b1771628c',
+ './include/fonts/Times-Italic.afm' => 'c41212e70e19627889aefef85212a47d',
+ './include/fonts/Times-BoldItalic.afm' => '49d6b1de28b2f8f6f8a4eaff2485071f',
+ './include/fonts/Times-Bold.afm' => 'e2244341873416fa5d56635b5bfb797e',
+ './include/fonts/Helvetica.afm' => '9cceac6630e6963e1b4bfcd89ce91cb4',
+ './include/fonts/Helvetica-Oblique.afm' => '6261d6f49c6d20fe257ddd8be12c5fa0',
+ './include/fonts/Helvetica-BoldOblique.afm' => '1a0205dc4b27270f07aae77da1bdff1e',
+ './include/fonts/Helvetica-Bold.afm' => '50bddd1766f49443b3b3925cb81b971b',
+ './include/fonts/Courier.afm' => 'cd99e74c7dd0cd1952d5bc878f90c541',
+ './include/fonts/Courier-Oblique.afm' => '3324f479739ac9ebab740772b55705d2',
+ './include/fonts/Courier-BoldOblique.afm' => '5c34aeefc1ef69ae2fb317abc1ccc9ca',
+ './include/fonts/Courier-Bold.afm' => 'cb84ced0cc430a5d54497257a11638f5',
+ './include/export_utils.php' => 'c2bc58e4366464ee38c82e54b5c8e231',
+ './include/entryPoint.php' => '7992853edeb130ccff864920956a5910',
+ './include/dir_inc.php' => '3d81f515f41d3f7d654560093e10fcd2',
+ './include/database/SqlsrvManager.php' => '4f26319dcb5863696334243bf7b4e579',
+ './include/database/SqlsrvHelper.php' => '192ad146c32328a5f6a0143d07253fd2',
+ './include/database/PearDatabase.php' => '04c1aaa57df1bc5516c455b8883d56d2',
+ './include/database/MysqliManager.php' => '422bf5cf16c77a4b04c4477dd884a145',
+ './include/database/MysqliHelper.php' => '5c29384d6a98b58e4a70222012ede66b',
+ './include/database/MysqlManager.php' => '2df7ae91dc3750abf2edf8ab66e85c25',
+ './include/database/MysqlHelper.php' => 'a6866f89272d781eae540a54437f50d8',
+ './include/database/MssqlManager.php' => 'a3532faae8ed3b2fb486207a91c05b78',
+ './include/database/MssqlHelper.php' => '4d98d46ecb0139685571d7c9a98984cb',
+ './include/database/FreeTDSManager.php' => 'bbeb3f527257a0ebe0fd2f27f4090ca0',
+ './include/database/FreeTDSHelper.php' => '1f725f014b815db50a02427b8ad07352',
+ './include/database/DBManagerFactory.php' => '83c89bd465be2c859b15f336d5e22a1d',
+ './include/database/DBManager.php' => 'cfd4407e7034285edd54e090101cfea8',
+ './include/database/DBHelper.php' => 'd23ca59ade289a4b826cf55936e92e1d',
+ './include/controller/Controller.php' => 'f65e2428b4f9b9ed709278aced7099d6',
+ './include/contextMenus/menuDefs/sugarPerson.php' => '6ba041d95634a9dbdbea99e55a8e51d6',
+ './include/contextMenus/menuDefs/sugarObject.php' => '298c89b8c3e5386763e71515b4c11d93',
+ './include/contextMenus/menuDefs/sugarAccount.php' => '2f933fb2dafb7273d5c98f05613ecfa9',
+ './include/contextMenus/contextMenu.php' => 'fec90b47bb1071a653b972fc4947f2cc',
+ './include/connectors/utils/ConnectorUtils.php' => '7c28a58adec5ccf4e23cd1beec6a16ea',
+ './include/connectors/sources/loc/xml.php' => '45ca47d630dfd777456d2b3054dc1778',
+ './include/connectors/sources/ext/soap/soap.php' => 'a7302d7bd5ebeea6c3d83ae5cd230b16',
+ './include/connectors/sources/ext/rest/rest.php' => '78a5eab8f0a0ad3b41d92cf132db2b17',
+ './include/connectors/sources/default/source.php' => '97984ab7a11960de881fb7d04dceda6f',
+ './include/connectors/sources/SourceFactory.php' => 'cb0d179dd2da3c8bc70a8bc93f86ecd8',
+ './include/connectors/formatters/ext/soap/tpls/default.tpl' => '7b470afa25be5f2a9cb14cfcc2cbec25',
+ './include/connectors/formatters/ext/rest/tpls/default.tpl' => 'ae976eb0b1c3a97ff1471746ddc07bda',
+ './include/connectors/formatters/default/company_detail.js' => '47c3b66024d7cb298c22c01881b78529',
+ './include/connectors/formatters/default/formatter.php' => 'dd7be2adff839e1c56d13ee8627ece52',
+ './include/connectors/formatters/FormatterFactory.php' => 'f2838a245924053435869c4ff981235e',
+ './include/connectors/filters/default/filter.php' => 'c6a34cf14ec98a2a149c447b3c627a1c',
+ './include/connectors/filters/FilterFactory.php' => 'a74c1562a8f4f6f49e98d0b85efc9b20',
+ './include/connectors/component.php' => '722227b98fc941d55b0f5dabcb0bff23',
+ './include/connectors/ConnectorFactory.php' => '44f817c0e5e2db8db9ca5a40f3d4fe45',
+ './include/VarDefHandler/vardef_meta_arrays.php' => '6144157c776b1d019d0389d1ed0a9868',
+ './include/VarDefHandler/listvardefoverride.php' => 'd9e443ba78875b7aec6f0cf7b9e17468',
+ './include/VarDefHandler/VarDefHandler.php' => 'fab80ef153197b304b35cca428000009',
+ './include/TimeDate.php' => '935896bea5c3d4c78ff212d5170584ca',
+ './include/TemplateHandler/TemplateHandler.php' => '6854cd6b85466421987803f7962c4b5c',
+ './include/Sugarpdf/sugarpdf_default.php' => 'a0310a0194f541373e42c96e83b2b144',
+ './include/Sugarpdf/sugarpdf_config.php' => '5bb0994c91417984853bb9a33c7277e5',
+ './include/Sugarpdf/sugarpdf/sugarpdf.smarty.php' => '682203646fe9e1e21972ae28cf626723',
+ './include/Sugarpdf/SugarpdfHelper.php' => '52616eccc49a3a36e74670f3b281a277',
+ './include/Sugarpdf/SugarpdfFactory.php' => '374161d342248fb7348a1b80478d8c29',
+ './include/Sugarpdf/Sugarpdf.php' => 'c338aadbb7e308c2c5e1ca85e9d32c2a',
+ './include/Sugarpdf/FontManager.php' => '4a2de9036d79ab5ebe45ab3eee82695e',
+ './include/Sugar_Smarty.php' => '547322d4d90cf3c8f9a272bde06ea156',
+ './include/SugarTinyMCE.php' => 'ad41bfa32103b12916cd596893217566',
+ './include/SugarTheme/getImage.php' => '2da8f180e461703dafc2e95cc421dd8b',
+ './include/SugarTheme/cssmin.php' => '05384ba957435def09368425e4480688',
+ './include/SugarTheme/SugarTheme.php' => 'b7454114e7c736cf807e9dd7e13afbe3',
+ './include/SugarPHPMailer.php' => 'c4fb090f36f4d295af06ff02049d59eb',
+ './include/SugarCache/SugarCachesMash.php' => 'd08b32ef33a07c4a1960f326fb5f4b14',
+ './include/SugarCache/SugarCacheZend.php' => 'e8d3c30797a8e3f3d9717833f7ac2cd4',
+ './include/SugarCache/SugarCacheWincache.php' => '6bf210ca6bad3f4626c01a15cd598e2c',
+ './include/SugarCache/SugarCacheRedis.php' => '1d3300c42f473e7a0cc1bb21dcd3ea15',
+ './include/SugarCache/SugarCacheMemory.php' => 'd84fd2039ca0607fbe03ea23cde088d1',
+ './include/SugarCache/SugarCacheMemcached.php' => '4f804c06901db015780f373ed669a386',
+ './include/SugarCache/SugarCacheMemcache.php' => '4795c41709b2dfb3dd64414f7e75d2af',
+ './include/SugarCache/SugarCacheFile.php' => '6e2628da550c6235d87248825d3eb13e',
+ './include/SugarCache/SugarCacheAbstract.php' => '134458b0b255e28c6455e77ec0f170ba',
+ './include/SugarCache/SugarCacheAPC.php' => 'bd0a80c914aa68152e9429a9e3f86777',
+ './include/SugarCache/SugarCache.php' => 'ea7a05845f592a44da4b9057237000e1',
+ './include/SugarObjects/templates/sale/vardefs.php' => 'c7e359ed4c4876b961b4171641021ae0',
+ './include/SugarObjects/templates/sale/metadata/subpanels/default.php' => '8fb6a0b90aab32115fdec077adfee755',
+ './include/SugarObjects/templates/sale/metadata/searchdefs.php' => '01fab0adf7fb0aec30bb84ab07f551fa',
+ './include/SugarObjects/templates/sale/metadata/quickcreatedefs.php' => 'd28a9e618293f5aedcfa2d02cd3c2705',
+ './include/SugarObjects/templates/sale/metadata/popupdefs.php' => 'c1e9b08060c35ec85c272c6494e3ccf6',
+ './include/SugarObjects/templates/sale/metadata/metafiles.php' => '349e6ae03d64d736e8c362da98d71c5b',
+ './include/SugarObjects/templates/sale/metadata/listviewdefs.php' => '962f7f6c741c3693bcb6e5ad7b1ef5cd',
+ './include/SugarObjects/templates/sale/metadata/editviewdefs.php' => '3b7bef9b86fe2e2acf45e9d8d7fec67a',
+ './include/SugarObjects/templates/sale/metadata/detailviewdefs.php' => '42aa1f0f13dce34821b418f06b3e8e9b',
+ './include/SugarObjects/templates/sale/metadata/dashletviewdefs.php' => '8480c18ee629a8743d5acf9d793110ec',
+ './include/SugarObjects/templates/sale/metadata/SearchFields.php' => 'b48d639de511f148dc0f0f8f069987ba',
+ './include/SugarObjects/templates/sale/language/en_us.lang.php' => 'e17866d97b78d60cab78d64119eaceff',
+ './include/SugarObjects/templates/sale/language/application/en_us.lang.php' => '88a7f50d64f44799c5b4909ab55a0a80',
+ './include/SugarObjects/templates/sale/icons/sale_32.gif' => 'f73940c5f0691ffcc4758052272ffc44',
+ './include/SugarObjects/templates/sale/icons/sale.gif' => 'a89b5a96e5373e8ef621eb3cc8afa2fb',
+ './include/SugarObjects/templates/sale/icons/chance_32.gif' => '31c7c09bbe878fb78697aca9fb6a49b0',
+ './include/SugarObjects/templates/sale/icons/chance.gif' => '496625c78161bf4d5e7489d7f3a68d2a',
+ './include/SugarObjects/templates/sale/icons/Createsale.gif' => 'c1f20d3fdb3859f2f0b1c23b1e154614',
+ './include/SugarObjects/templates/sale/icons/Createchance.gif' => 'f4fae6d5a4f0135f9e7ea3fbd1a5a80f',
+ './include/SugarObjects/templates/sale/config.php' => '30a05f45b0d685a9f6486eb1a9b96151',
+ './include/SugarObjects/templates/sale/Sale.php' => '4811047a40a7167746b14ac103c866d8',
+ './include/SugarObjects/templates/sale/Chance.php' => 'c8c6b5645b05f82a3e365167d632e493',
+ './include/SugarObjects/templates/person/vardefs.php' => '2cd0813852af09932d7755631677c6b8',
+ './include/SugarObjects/templates/person/metadata/subpanels/default.php' => '867623b0a38ac6ac3d34b8fa090117ed',
+ './include/SugarObjects/templates/person/metadata/searchdefs.php' => 'b2cca9bc8177bb3cfecb3b8cf571ff4b',
+ './include/SugarObjects/templates/person/metadata/quickcreatedefs.php' => 'a3e2327b2d5dc1b7aaafc9915ffcba40',
+ './include/SugarObjects/templates/person/metadata/popupdefs.php' => '5d236c65abe1283a2f37ef8896a2928a',
+ './include/SugarObjects/templates/person/metadata/metafiles.php' => 'b8fdfd4c9f179268320f2043fa142cb3',
+ './include/SugarObjects/templates/person/metadata/listviewdefs.php' => 'bd2a6592f2f5186007e577065eb7e3aa',
+ './include/SugarObjects/templates/person/metadata/editviewdefs.php' => '6e716bae04fa96ec21f8827ab226b47e',
+ './include/SugarObjects/templates/person/metadata/detailviewdefs.php' => '9975beb00d896f3bcd6ea1699ab75b60',
+ './include/SugarObjects/templates/person/metadata/dashletviewdefs.php' => 'cc28034dbe0d1bda3c6778254168990c',
+ './include/SugarObjects/templates/person/metadata/SearchFields.php' => '1cdf25fc8f2f44f8b0336b12c7f7f256',
+ './include/SugarObjects/templates/person/language/en_us.lang.php' => 'ffd666b39971db1d0bbe8e454d0fe43f',
+ './include/SugarObjects/templates/person/icons/person_32.gif' => '1550c24a793910550200679be1c5c078',
+ './include/SugarObjects/templates/person/icons/person.gif' => 'ea5e2b2022166291d01ccedaf24b4e33',
+ './include/SugarObjects/templates/person/icons/Createperson.gif' => '2e20692d501b15729294b80f4f311d77',
+ './include/SugarObjects/templates/person/config.php' => 'b6eb8ddda2e789be72d8ed423a48890d',
+ './include/SugarObjects/templates/person/Person.php' => '644282f973fcb83d3555d22a482d7390',
+ './include/SugarObjects/templates/issue/vardefs.php' => '9891c01794faa4962c37f1e88724c49d',
+ './include/SugarObjects/templates/issue/metadata/subpanels/default.php' => '55fefed3cdd67df4470e62d806bf69a2',
+ './include/SugarObjects/templates/issue/metadata/searchdefs.php' => '6ed06477c8f74fa2c347e8dfe54babf6',
+ './include/SugarObjects/templates/issue/metadata/quickcreatedefs.php' => '9245483009fd5637fc59cd43e3549e20',
+ './include/SugarObjects/templates/issue/metadata/popupdefs.php' => '604126a5cfcb85b6dba8ecea992188e3',
+ './include/SugarObjects/templates/issue/metadata/metafiles.php' => 'b08ff06cfacb9c839860955c149cde9b',
+ './include/SugarObjects/templates/issue/metadata/listviewdefs.php' => '9574102213b07d831532b60476d16345',
+ './include/SugarObjects/templates/issue/metadata/editviewdefs.php' => '74cd547e922d0e3c7b617f4f3e17b4df',
+ './include/SugarObjects/templates/issue/metadata/detailviewdefs.php' => '3bf56f585aa0ca6cd641839146a7be3b',
+ './include/SugarObjects/templates/issue/metadata/dashletviewdefs.php' => 'cc28034dbe0d1bda3c6778254168990c',
+ './include/SugarObjects/templates/issue/metadata/SearchFields.php' => '414756f5fd12364a365ab10ecd68819b',
+ './include/SugarObjects/templates/issue/language/en_us.lang.php' => '624b8d8abc8bdb409e2447b8dd3bb51d',
+ './include/SugarObjects/templates/issue/language/application/en_us.lang.php' => 'd3c5595f7b0afbe04034d8cf26d43cd7',
+ './include/SugarObjects/templates/issue/icons/issue_32.gif' => 'b2f4acfa921e04b500320c2f6e271478',
+ './include/SugarObjects/templates/issue/icons/issue.gif' => 'b991bb74ff3c649b1f6592a4f3c6c114',
+ './include/SugarObjects/templates/issue/icons/Createissue.gif' => '269352232732ae705318612e960b9eba',
+ './include/SugarObjects/templates/issue/config.php' => '6f9cdfda0abefeab1262260d9030468c',
+ './include/SugarObjects/templates/issue/Issue.php' => '94069381dc9edadcfa1c231f1f7b4205',
+ './include/SugarObjects/templates/file/views/view.edit.php' => '5f65187fb35d6ea4b9dcd15a2e1011a4',
+ './include/SugarObjects/templates/file/vardefs.php' => '0e5a1978b2fbf76e6aff450942d75c07',
+ './include/SugarObjects/templates/file/metadata/subpanels/default.php' => 'e68b8639a483574b567629cf5bd08807',
+ './include/SugarObjects/templates/file/metadata/searchdefs.php' => '0ee0f29439e89162c8aef48953f45368',
+ './include/SugarObjects/templates/file/metadata/quickcreatedefs.php' => 'a20d8b973b3eadf4d5f22766b0f16408',
+ './include/SugarObjects/templates/file/metadata/metafiles.php' => 'e7d5c1d5e0c06c7984a7db04ee3f6383',
+ './include/SugarObjects/templates/file/metadata/listviewdefs.php' => '96f0351f161a616abc216f1e60064f5e',
+ './include/SugarObjects/templates/file/metadata/editviewdefs.php' => '1300d3e0819a32c4e8d8abf344d491fc',
+ './include/SugarObjects/templates/file/metadata/detailviewdefs.php' => 'cd73435c99737ea80a61ea8e41c902bf',
+ './include/SugarObjects/templates/file/metadata/dashletviewdefs.php' => '330f959e99840611d6f9cd0772c0892e',
+ './include/SugarObjects/templates/file/metadata/SearchFields.php' => '1960514f7d8268fc6842fa61b7edf365',
+ './include/SugarObjects/templates/file/language/en_us.lang.php' => '898b828442b97e1768533da6bd0ec262',
+ './include/SugarObjects/templates/file/language/application/en_us.lang.php' => '73927a49ad5d7b030819fe9735e0e3ee',
+ './include/SugarObjects/templates/file/icons/file_32.gif' => '16b6a44601f20a651d1c83dc1a020c12',
+ './include/SugarObjects/templates/file/icons/file.gif' => 'a577b65a0589e748d18aa1baef4e05c6',
+ './include/SugarObjects/templates/file/icons/Createfile.gif' => '3ed1d93938f715b1af93c0e99e900af5',
+ './include/SugarObjects/templates/file/controller.php' => 'd63646be092ad4d77c1ca096c413c43c',
+ './include/SugarObjects/templates/file/File.php' => 'b8f71060ea100f8d957176efa7d5dd5c',
+ './include/SugarObjects/templates/company/vardefs.php' => '1b297504eb8a626027d9acbb3ba986b1',
+ './include/SugarObjects/templates/company/metadata/subpanels/default.php' => '2ab6e9a96e88586d6060f1b8ec003397',
+ './include/SugarObjects/templates/company/metadata/searchdefs.php' => '7f963db941a6086a9b07c0ead95f3459',
+ './include/SugarObjects/templates/company/metadata/quickcreatedefs.php' => '19ac11f356b67d89ff17a26017af880a',
+ './include/SugarObjects/templates/company/metadata/popupdefs.php' => '7179e7d1045762be6ebf2150548a0ad3',
+ './include/SugarObjects/templates/company/metadata/metafiles.php' => 'b08ff06cfacb9c839860955c149cde9b',
+ './include/SugarObjects/templates/company/metadata/listviewdefs.php' => '539fc5542521c85335c63f5f455b6a4a',
+ './include/SugarObjects/templates/company/metadata/editviewdefs.php' => '1fbcdf5012b949eab9c7688cb6340009',
+ './include/SugarObjects/templates/company/metadata/detailviewdefs.php' => 'fc34b1ab8299a43de9a56f6a3aee928c',
+ './include/SugarObjects/templates/company/metadata/dashletviewdefs.php' => 'cc28034dbe0d1bda3c6778254168990c',
+ './include/SugarObjects/templates/company/metadata/SearchFields.php' => 'fc8ac6014765325f5021bdada6175cda',
+ './include/SugarObjects/templates/company/language/en_us.lang.php' => '660bc6f5262880cf44d6a1d0e20bce1f',
+ './include/SugarObjects/templates/company/language/application/en_us.lang.php' => '2d87dea43be8c2850cf3abf0ba7ea7c5',
+ './include/SugarObjects/templates/company/icons/company_32.gif' => 'eb850fc1863a46987cdafca12693c789',
+ './include/SugarObjects/templates/company/icons/company.gif' => '7890367dfe0e337a2f5f2839b3e6dac7',
+ './include/SugarObjects/templates/company/icons/Createcompany.gif' => '3978b32e01cbeb974d86b1da0617dae9',
+ './include/SugarObjects/templates/company/config.php' => '6ae18f6ce9daa6605a8a7b03c48273db',
+ './include/SugarObjects/templates/company/Company.php' => '193b46d2590072af5ea6b0f694744460',
+ './include/SugarObjects/templates/basic/vardefs.php' => '706febff3b66254a7244f6bf3b005f12',
+ './include/SugarObjects/templates/basic/metadata/subpanels/default.php' => '1531d794b6709aeb4a0111d83b786cdb',
+ './include/SugarObjects/templates/basic/metadata/searchdefs.php' => '77a426e0d55e076a745302a411935d22',
+ './include/SugarObjects/templates/basic/metadata/quickcreatedefs.php' => 'a55835f923d33db8a0174aad417655a8',
+ './include/SugarObjects/templates/basic/metadata/popupdefs.php' => 'e498a41b37a1927217dc5f8a12d62de2',
+ './include/SugarObjects/templates/basic/metadata/metafiles.php' => '73fea3868c8bcddf8e877f902f94fb8f',
+ './include/SugarObjects/templates/basic/metadata/listviewdefs.php' => '101b945d63217cab64d3942fe6a31973',
+ './include/SugarObjects/templates/basic/metadata/editviewdefs.php' => '53ebfaff9a10a57b406b778f1b7d889c',
+ './include/SugarObjects/templates/basic/metadata/detailviewdefs.php' => '3d27bd9aa9f359248caf8c2f44c1ba25',
+ './include/SugarObjects/templates/basic/metadata/dashletviewdefs.php' => '8480c18ee629a8743d5acf9d793110ec',
+ './include/SugarObjects/templates/basic/metadata/SearchFields.php' => '6d5cb8f2752706d6e56393c3d3aa870f',
+ './include/SugarObjects/templates/basic/language/en_us.lang.php' => 'f5baa3b5a84319da06f2c31cf78749a9',
+ './include/SugarObjects/templates/basic/icons/basic_32.gif' => 'd92dc1c8a1ef6e0351b6948d78bf1436',
+ './include/SugarObjects/templates/basic/icons/basic.gif' => '75faad9850edd06df55b63abce42d014',
+ './include/SugarObjects/templates/basic/icons/Createbasic.gif' => 'e25889cd660d838655f5e213fe565f0d',
+ './include/SugarObjects/templates/basic/Dashlets/Dashlet/m-n-Dashlet.php' => '1891bc6878bb4864ef6135145e5d0908',
+ './include/SugarObjects/templates/basic/Dashlets/Dashlet/m-n-Dashlet.meta.php' => '75b2139565dc7c4fe4d9d9b8e1973634',
+ './include/SugarObjects/templates/basic/Basic.php' => 'aae8cc20c1510feac2e68a2d481649eb',
+ './include/SugarObjects/implements/team_security/vardefs.php' => 'a61bfc389a5f6f58f64a72dca231f50e',
+ './include/SugarObjects/implements/team_security/language/en_us.lang.php' => 'c00816fcc370c97c6190059119c4c3c0',
+ './include/SugarObjects/implements/assignable/vardefs.php' => 'f388916ada054d6afa05f954e0a2cd3e',
+ './include/SugarObjects/implements/assignable/language/en_us.lang.php' => 'e4acab8de35121957fb86900899e0763',
+ './include/SugarObjects/VardefManager.php' => 'c1f9129f8ab826cda750895e6020ac61',
+ './include/SugarObjects/SugarSession.php' => '514ac6afae766a48937041187d9c3b49',
+ './include/SugarObjects/SugarRegistry.php' => '98e36a91582216044880950f43ba725b',
+ './include/SugarObjects/SugarConfig.php' => 'df914787952d788704ca6a7593f4eb4c',
+ './include/SugarObjects/LanguageManager.php' => 'f95ebaadc3ed45ceb9fa6b4c41e206bd',
+ './include/SugarLogger/SugarLogger.php' => '2af3c5f2ad5229e7c55d298e4122b8e3',
+ './include/SugarLogger/LoggerTemplate.php' => '865497592529cb74a6033a5155f015b0',
+ './include/SugarLogger/LoggerManager.php' => '62171c14b68db2be07810744dead9519',
+ './include/SugarFolders/SugarFolders.php' => '4c4eecf343d46449ad4dbb64ac45e52f',
+ './include/SugarFields/SugarFieldHandler.php' => '5c16ae65725f0cab8b8a498fa7e7dfb5',
+ './include/SugarFields/Parsers/SearchFormMetaParser.php' => '02267a9149b7e09830109655a8a4b373',
+ './include/SugarFields/Parsers/Rules/VariableSubstitutionRule.php' => 'da69179d8f94d54dd68c23feafbbc832',
+ './include/SugarFields/Parsers/Rules/VariableCleanupRule.php' => 'd56cc1194806cb7834ac8da5bd4da03d',
+ './include/SugarFields/Parsers/Rules/UndefinedVardefRule.php' => 'd303e3e0a83c8f82af8e6277bc78c3a7',
+ './include/SugarFields/Parsers/Rules/QuotesParseRule.php' => '32459f8e902b11a1424f2f427f9e73bb',
+ './include/SugarFields/Parsers/Rules/ProductsParseRule.php' => '330054f868b118dfe87182691609a2de',
+ './include/SugarFields/Parsers/Rules/ParseRules.php' => '1b392485e41dac8da214699f25f740a6',
+ './include/SugarFields/Parsers/Rules/OpportunitiesParseRule.php' => '6f75e8f0526a85a7e41a3ad6ff9285a4',
+ './include/SugarFields/Parsers/Rules/NotesParseRule.php' => '7d6c93dd7bd962d66c8c507a2608e40b',
+ './include/SugarFields/Parsers/Rules/MeetingsParseRule.php' => 'd8a587569f07121db152c3495a4291ee',
+ './include/SugarFields/Parsers/Rules/LeadsParseRule.php' => 'b763bdd2cda8f7b10be4d6cdb61cab9f',
+ './include/SugarFields/Parsers/Rules/EmptyRowRule.php' => 'b948020921195b9bdabfcd1e16f823ff',
+ './include/SugarFields/Parsers/Rules/EmailAddressRule.php' => 'e94c0b9ba67c8df677774114e9bdea4b',
+ './include/SugarFields/Parsers/Rules/DocumentsParseRule.php' => '64f4ae1336625862068d9e04d3995a2f',
+ './include/SugarFields/Parsers/Rules/ContractsParseRule.php' => '8b497e91cab35069d0ece860f18a8443',
+ './include/SugarFields/Parsers/Rules/ContactsParseRule.php' => '13cf473f4fb1429edfed4192ef02b192',
+ './include/SugarFields/Parsers/Rules/CampaignsParseRule.php' => 'fe8e11b19b0e09f90543014247ea9f50',
+ './include/SugarFields/Parsers/Rules/CallsParseRule.php' => '82161ac97ae9b06ab3491142eae4ee0f',
+ './include/SugarFields/Parsers/Rules/BugsParseRule.php' => '903f45dcb27713c8f81d87abc1a0e282',
+ './include/SugarFields/Parsers/Rules/BaseRule.php' => '453b46f9169f323256157668bb1c5fde',
+ './include/SugarFields/Parsers/Rules/AddressRule.php' => '2d576b842686df79369ff141554448a0',
+ './include/SugarFields/Parsers/Rules/ActivitiesParseRule.php' => 'dc3448fde70fb776eabb2fe14e54a364',
+ './include/SugarFields/Parsers/Rules/AccountsParseRule.php' => 'b61c2fd3ef2f1911e5c80f868d2322f8',
+ './include/SugarFields/Parsers/QuickCreateMetaParser.php' => '33160aa871736e67ba9f3161770f26a7',
+ './include/SugarFields/Parsers/MetaParser.php' => 'f4fc34a2e1a360fa03fda3feaf9f7a1d',
+ './include/SugarFields/Parsers/EditViewMetaParser.php' => '56e8c08febb69176e24e27474efc02a6',
+ './include/SugarFields/Parsers/DetailViewMetaParser.php' => '067153dd72b6ccead212f5c05989467d',
+ './include/SugarFields/Fields/Id/SugarFieldId.php' => '4e9671259741f5e9bdad9134536d0b0b',
+ './include/SugarFields/Fields/Username/SugarFieldUsername.php' => '68b2a346bb6bc9a37fd5997839a3ef22',
+ './include/SugarFields/Fields/Username/DetailView.tpl' => '265789b155e8f0627ee8f09e7442556a',
+ './include/SugarFields/Fields/URL/ListView.tpl' => '348cdc6eb954f912b7ad3de52386b044',
+ './include/SugarFields/Fields/URL/EditView.tpl' => '6c4b5eace8297f1ab1b9a591a996cf53',
+ './include/SugarFields/Fields/URL/DetailView.tpl' => 'ca276cf6c74d44072082dd4d2bb9df67',
+ './include/SugarFields/Fields/Text/SugarFieldText.php' => '09062f54c8846717b788223389539921',
+ './include/SugarFields/Fields/Text/EditView.tpl' => 'c894ddc45353fcbb4bb0ff6ced41dc6a',
+ './include/SugarFields/Fields/Text/DetailView.tpl' => '569a73fb57f61968c44b8b89d1fa85c8',
+ './include/SugarFields/Fields/Text/ClassicEditView.tpl' => '64b3798cb9493699ba6753f8d1308800',
+ './include/SugarFields/Fields/Relate/SugarFieldRelate.php' => '9a4e59ddc32a34efac991a47db3b3330',
+ './include/SugarFields/Fields/Relate/SearchView.tpl' => '06aa8e553038827a8180f033345d980d',
+ './include/SugarFields/Fields/Relate/EditView.tpl' => '7104af2a6eb8a8677b8bf8a5129a6efe',
+ './include/SugarFields/Fields/Relate/DetailView.tpl' => '1d58830f1002d63405955e15402f154f',
+ './include/SugarFields/Fields/Readonly/SugarFieldReadonly.php' => 'c94a8504b58aa243752d0ea79ba58d35',
+ './include/SugarFields/Fields/Radioenum/EditView.tpl' => '43624976527f15572ccf9c3e9e913dcf',
+ './include/SugarFields/Fields/Radioenum/DetailView.tpl' => '40e967a3e3d8d84759ec757e10d87698',
+ './include/SugarFields/Fields/Phone/SugarFieldPhone.php' => 'e31438e2425b63be6640b3fb4e73d7a5',
+ './include/SugarFields/Fields/Phone/EditView.tpl' => '9b9ef604b528e14f9e11abbf236de147',
+ './include/SugarFields/Fields/Password/SugarFieldPassword.php' => 'ce8e8aef9cc8df2b2323402a4b2ff1d6',
+ './include/SugarFields/Fields/Password/EditView.tpl' => '1edeebd3c8b1ecc3e2c7e85cbe6d082b',
+ './include/SugarFields/Fields/Parent/SugarFieldParent.php' => '01a9d1328c58c997609e19d4e6a1fad8',
+ './include/SugarFields/Fields/Parent/SearchView.tpl' => 'bbd6fbd734276c39c8f54ff47d97389f',
+ './include/SugarFields/Fields/Parent/EditView.tpl' => '38dff65450e0495924448d6ee756aa6b',
+ './include/SugarFields/Fields/Parent/DetailView.tpl' => '81cf3af6a61d38101e3cfe747dd9a64a',
+ './include/SugarFields/Fields/Multienum/SugarFieldMultienum.php' => 'a2a08b6a251a8074fece78676e2c6517',
+ './include/SugarFields/Fields/Multienum/SearchView.tpl' => 'dc5d9652e9a630788ddb7578a850d36c',
+ './include/SugarFields/Fields/Multienum/ListView.tpl' => '20999318663962eb6e9f9df6c4cc0a93',
+ './include/SugarFields/Fields/Multienum/EditViewFunction.tpl' => '9f0bd6fbdd370ba799181b420700d690',
+ './include/SugarFields/Fields/Multienum/EditView.tpl' => 'b76caf30b40ead7e5e77ee385680e623',
+ './include/SugarFields/Fields/Multienum/DetailView.tpl' => 'b2c0824e4a3585cac4e7dd5b8cbc44fb',
+ './include/SugarFields/Fields/Link/ListView.tpl' => '3efb0c3d1e5f5f7cc825664416795b6f',
+ './include/SugarFields/Fields/Link/EditView.tpl' => '13c9dd96fe5d5997ff6626414f51daea',
+ './include/SugarFields/Fields/Link/DetailView.tpl' => '7cf2bcf75d842bfaf7c2aefe29badd8e',
+ './include/SugarFields/Fields/Int/RangeSearchForm.tpl' => '7bd5ddf1034ac84f3a76318dc2a08ba7',
+ './include/SugarFields/Fields/Int/SugarFieldInt.php' => '37b89119cbc9e5654454c94ef9434612',
+ './include/SugarFields/Fields/Int/SearchForm.tpl' => '49dfd8196ff5a647550a0102ec302b40',
+ './include/SugarFields/Fields/Int/EditView.tpl' => 'ef85b3701213ec7fbf270b7a652f665b',
+ './include/SugarFields/Fields/Int/DetailView.tpl' => '2a2e939aa1f46920974d4e55b3e536ed',
+ './include/SugarFields/Fields/Iframe/EditView.tpl' => 'd932cd74d2aa8f150e05e4fc1842a9ff',
+ './include/SugarFields/Fields/Iframe/DetailView.tpl' => '166e7c48cf8508bf8475d93e9fa7cc65',
+ './include/SugarFields/Fields/Html/SugarFieldHtml.php' => '52fbd9c0870c72a93f5ff77fb331b5a5',
+ './include/SugarFields/Fields/Html/DetailView.tpl' => 'fb7614d8b124259ec226e0419c1de02a',
+ './include/SugarFields/Fields/Fullname/SugarFieldFullname.php' => '04f64aa66c5bb260769cc0383b82dabd',
+ './include/SugarFields/Fields/Fullname/DetailView.tpl' => '5013b528be98fb2c5cd89b79a95e7f04',
+ './include/SugarFields/Fields/Float/SugarFieldFloat.php' => 'cde383c4826dc6789d4564ddf7557f0a',
+ './include/SugarFields/Fields/Float/EditView.tpl' => '0fb9f47fb2ff78b80b4be921d083c4fa',
+ './include/SugarFields/Fields/Float/DetailView.tpl' => 'd262f314387c02eea26e73e7b13eeded',
+ './include/SugarFields/Fields/File/SugarFieldFile.js' => '8235879c29fa930c1b41a9d7a913c4f1',
+ './include/SugarFields/Fields/File/SearchView.tpl' => '714c86e492dad340a8b6d7fb02402190',
+ './include/SugarFields/Fields/File/ListView.tpl' => 'e721c525ebe3f10e1d92111f3fa96faf',
+ './include/SugarFields/Fields/File/SugarFieldFile.php' => '73ba55ea4efb3e5b3fdc67f867e7ca01',
+ './include/SugarFields/Fields/File/EditView.tpl' => '6809bea5bf1a9d932a44499b807e8a79',
+ './include/SugarFields/Fields/File/DetailView.tpl' => 'e1a8b7dc324439b6616483c9db5bef54',
+ './include/SugarFields/Fields/Enum/SugarFieldEnum.php' => 'f20e65f73f58126986b4fdc04a70c3e0',
+ './include/SugarFields/Fields/Enum/SearchView.tpl' => '0b28499163b68dd7d5830e72420234fd',
+ './include/SugarFields/Fields/Enum/EditViewFunction.tpl' => '12a4667e9b589c9f765ef85a5caa0a14',
+ './include/SugarFields/Fields/Enum/EditView.tpl' => 'be6dd8ebec706676b32f71807874426f',
+ './include/SugarFields/Fields/Enum/DetailViewFunction.tpl' => 'ac68398d2c03f5fd9efe88e63c09115e',
+ './include/SugarFields/Fields/Enum/DetailView.tpl' => '2202329800d7476db244306c357f8468',
+ './include/SugarFields/Fields/Download/SugarFieldDownload.php' => '779b5b9abfcae1a71934b838f5eb0799',
+ './include/SugarFields/Fields/Download/DetailView.tpl' => 'f6d2e5bc05d4918321f840c17e98bbdb',
+ './include/SugarFields/Fields/Datetimecombo/Datetimecombo.js' => 'e8a30237305aaebef40a69e66f5510df',
+ './include/SugarFields/Fields/Datetimecombo/RangeSearchForm.tpl' => 'c4dae0f0f5f4e521ce03803e35817204',
+ './include/SugarFields/Fields/Datetimecombo/SugarFieldDatetimecombo.php' => '19177c0d55dae3f974cb4ad185061208',
+ './include/SugarFields/Fields/Datetimecombo/SearchView.tpl' => '794430573ea1f10bc910017e977315dd',
+ './include/SugarFields/Fields/Datetimecombo/EditView.tpl' => 'c07feccf3b23395688857fffd182071f',
+ './include/SugarFields/Fields/Datetime/SugarFieldDatetime.php' => '795d0c525855ab25231a428879234895',
+ './include/SugarFields/Fields/Datetime/EditView.tpl' => 'cecc4c2aedea1f00200956b4ce57c382',
+ './include/SugarFields/Fields/Currency/SugarFieldCurrency.php' => '29694b4b7e7c008b1176898b41603197',
+ './include/SugarFields/Fields/Currency/ListView.tpl' => 'fa4ab79b0660390d5fbf44f9d69ebea7',
+ './include/SugarFields/Fields/Currency/EditView.tpl' => 'ec497a7ccc2665af341a4e0b4ba4d00d',
+ './include/SugarFields/Fields/Currency/DetailView.tpl' => '34e955ee65eb1b10d02b20213d934b61',
+ './include/SugarFields/Fields/Collection/SugarFieldCollection.js' => '60966b950f10e2f289473c33eb806ddb',
+ './include/SugarFields/Fields/Collection/view.sugarfieldcollection.php' => 'f58f76131d63b8587d8344e43fe6a713',
+ './include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php' => '799f44cc04c8f8c693c10c998bf47a83',
+ './include/SugarFields/Fields/Collection/SugarFieldCollection.php' => '445a08388c087f5c8346430087a76a3c',
+ './include/SugarFields/Fields/Collection/EditView.tpl' => '8be320b6638a81aeaf0dae3200eeee96',
+ './include/SugarFields/Fields/Collection/DetailView.tpl' => '5847e6e86b00ce6911f5f0efbb143bd8',
+ './include/SugarFields/Fields/Collection/CollectionEditViewRow.tpl' => '550c330e047e904e1681d403f0075c45',
+ './include/SugarFields/Fields/Collection/CollectionEditView.tpl' => '92dbf9dccbead9ce2d506e87572e3a40',
+ './include/SugarFields/Fields/Collection/CollectionDetailView.tpl' => '89e4fa568874dafc3b7c84bf98ad6b67',
+ './include/SugarFields/Fields/Bool/SugarFieldBool.php' => 'a218eca4959d94b5701a327d941c3714',
+ './include/SugarFields/Fields/Bool/SearchView.tpl' => '5ba5e1bec319cc466c2bf8c5c6f36bcd',
+ './include/SugarFields/Fields/Bool/ListView.tpl' => '2cf9cfe7f0224625a9db87a55c862066',
+ './include/SugarFields/Fields/Bool/InlineEditView.tpl' => 'fc9ecf7e13414039acd38b619b3e5400',
+ './include/SugarFields/Fields/Bool/InlineEdit.tpl' => '2c1e27debc2a992ca2f8a41ea01a0600',
+ './include/SugarFields/Fields/Bool/EditView.tpl' => '20c4753b0534a3bdbc22ae54ba629301',
+ './include/SugarFields/Fields/Bool/DetailView.tpl' => 'a3b5e1308c6b998830711c3a7581bec1',
+ './include/SugarFields/Fields/Base/ImportViewFunction.tpl' => '3dcc32cf3cbf29446433bd3a807fa168',
+ './include/SugarFields/Fields/Base/SugarFieldBase.php' => 'cec1d8e7ac97a0095cdc22cb71ae8bce',
+ './include/SugarFields/Fields/Base/SearchForm.tpl' => '5a526a4a1d48dcb1c53cd1bc725ee24b',
+ './include/SugarFields/Fields/Base/ListView.tpl' => '23022cb491510574c46d3a985524d4f2',
+ './include/SugarFields/Fields/Base/InlineEditView.tpl' => 'cad6ed8451a2f8bfe93a12c7a9e226ca',
+ './include/SugarFields/Fields/Base/InlineEdit.tpl' => 'd8c88cc70bfa8e746acc23cb9431dcea',
+ './include/SugarFields/Fields/Base/EditViewFunction.tpl' => '3dcc32cf3cbf29446433bd3a807fa168',
+ './include/SugarFields/Fields/Base/EditView.tpl' => 'f1c6961334f3242047b999020fabdb09',
+ './include/SugarFields/Fields/Base/DetailViewFunction.tpl' => '424ee8062ffb12e2aa32f711268229bc',
+ './include/SugarFields/Fields/Base/DetailView.tpl' => 'fc7c2563d528bbbc328f60fd9e39e089',
+ './include/SugarFields/Fields/Assigned_user_name/EditViewFunction.tpl' => '69fca202aeeb72fd5617e20d560631c3',
+ './include/SugarFields/Fields/Assigned_user_name/SugarFieldAssigned_user_name.php' => 'b2ba2feaf8b1db87700965a6314cf656',
+ './include/SugarFields/Fields/Assigned_user_name/SearchView.tpl' => 'a98eb4befbdcb21fc499f0fa975f8a1a',
+ './include/SugarFields/Fields/Address/SugarFieldAddress.js' => 'afd9583270e6a2eac3bf72c308f09183',
+ './include/SugarFields/Fields/Address/en_us.EditView.tpl' => '6a840da6d8a18eb6d11393d73670932b',
+ './include/SugarFields/Fields/Address/en_us.DetailView.tpl' => '5bf7266e333859717d82eadb479f13b9',
+ './include/SugarFields/Fields/Address/SugarFieldAddress.php' => '6ae12612bffcfa91e88b72a17622ec36',
+ './include/SugarFields/Fields/Address/EditView.tpl' => '6a840da6d8a18eb6d11393d73670932b',
+ './include/SugarFields/Fields/Address/DetailView.tpl' => 'cda7b5ebe9f6fdc86850509718024d8e',
+ './include/SugarEmailAddress/SugarEmailAddress.js' => 'd7aa1b86fa26ed7d9d10d63d6d540270',
+ './include/SugarEmailAddress/templates/forWideFormBodyView.tpl' => 'f553c5c7e78e1eac9f28d8193d000d1b',
+ './include/SugarEmailAddress/templates/forEditView.tpl' => 'a017738db1cb591c8215e7e01c6f1c39',
+ './include/SugarEmailAddress/templates/forDuplicatesView.tpl' => '09f861c23cd12077f050e3079af3d23f',
+ './include/SugarEmailAddress/templates/forDetailView.tpl' => 'c482472d715f94594f4c5b0dc1d46557',
+ './include/SugarEmailAddress/SugarEmailAddress.php' => 'bb09409a336736629f0fdc95ba3bcba1',
+ './include/SugarDependentDropdown/metadata/dependentDropdown.php' => 'ad07b642238039f6dd8b366019feca3c',
+ './include/SugarDependentDropdown/javascript/SugarDependentDropdown.js' => 'b5f8625205567f3d436ce7182375c881',
+ './include/SugarDependentDropdown/SugarDependentDropdown.php' => 'ac4385687c68504d233e39a1c13b89ea',
+ './include/SugarCharts/swf/barChart.swf' => 'e024c31bfcaa90fa3a54809a8c65861c',
+ './include/SugarCharts/swf/chart.swf' => 'afda6fe91342c4864d1991d3c1ccbfff',
+ './include/SugarCharts/swf/groupByChart.swf' => '2eca03fe41128001349bacf997b1fedc',
+ './include/SugarCharts/swf/horizontalBarChart.swf' => 'f3b95d3dc4f268ed9cf4b388c6c3b4a8',
+ './include/SugarCharts/swf/horizontalGroupByChart.swf' => '7f611d0a68d18d72ad7cde6e525449d9',
+ './include/SugarCharts/swf/lineChart.swf' => 'e4b6eef95ff87f5e1b36cdfe74966ddd',
+ './include/SugarCharts/swf/pieChart.swf' => 'c8a528dc470ac904864ea88549b3adc9',
+ './include/SugarCharts/swf/stackedGroupByChart.swf' => '0d524ea04b2c56d1c7cdc86194f59ed1',
+ './include/SugarCharts/SugarChartFactory.php' => 'c12c6dddeeff4a0b91d2bd436c305e57',
+ './include/SugarCharts/JsChart.php' => 'a47703d7cebaed44448d0c11475411d1',
+ './include/SugarCharts/Jit/tpls/chart.tpl' => 'db663713468e49441f7fc6c0ccafab54',
+ './include/SugarCharts/Jit/tpls/DashletGenericChartScript.tpl' => '669af80b8d685e3a7184a54e0c0e3141',
+ './include/SugarCharts/Jit/js/mySugarCharts.js' => '365b6a9f00fd025442ed582dd7e9c557',
+ './include/SugarCharts/Jit/js/sugarCharts.js' => 'dc7b0776216db012d32e96d9b23d7745',
+ './include/SugarCharts/Jit/js/Jit/jit.js' => 'fcff6ed6bcecfc5f8a36a053089c33d3',
+ './include/SugarCharts/Jit/css/base.css' => '8ce4e603ad49e48925a013c9ad565e52',
+ './include/SugarCharts/Jit/JitReports.php' => 'a41d2f8c71fb1691c9af14590122fa2e',
+ './include/SugarCharts/Jit/Jit.php' => '3079c345047407c2d3ab746241927682',
+ './include/SugarCharts/Jit/FlashCanvas/canvas2png.js' => '71a23466955e17ab3094233fee8db708',
+ './include/SugarCharts/Jit/FlashCanvas/flashcanvas.js' => '8bc523ae2dce6eb2d191cbb561a218b5',
+ './include/SugarCharts/Jit/FlashCanvas/save.php' => 'b128689255043db993d1cc2f4bc484bc',
+ './include/SugarCharts/Jit/FlashCanvas/proxy.php' => '82ccbc7400b0bda3a33316920de41e60',
+ './include/SugarCharts/Jit/FlashCanvas/flashcanvas.swf' => '528d82bb81799f23d4def3425badf913',
+ './include/SugarCharts/SugarChart.php' => 'aa23b4fac128341d6112ba185003a08a',
+ './include/SubPanel/SubPanelTiles.js' => 'ea6a4b3add603885bbe3100d62d36c40',
+ './include/SubPanel/tpls/singletabmenu.tpl' => '3070f73cc977481a36dbb69ad8f4e23a',
+ './include/SubPanel/subpanels.txt' => '754316b019dc694b893e830ffe65f49d',
+ './include/SubPanel/registered_layout_defs.php' => '6784a47eba53d5940d743958bfd1cef5',
+ './include/SubPanel/SugarTab.php' => 'b401ecf5483d99d56f12d1ff91edf97c',
+ './include/SubPanel/SubPanelViewer.php' => '2ee30a85709d5abe7bc8e203721d5b68',
+ './include/SubPanel/SubPanelTilesTabs.php' => '3a7a49c6dbcab329119c74aa96833ae9',
+ './include/SubPanel/SubPanelTiles.php' => '174bac5837e8db811f8eb691c2dc1395',
+ './include/SubPanel/SubPanelDynamic.html' => '73e24930846c23f2cedb379ce9053a5e',
+ './include/SubPanel/SubPanelDefinitions.php' => 'b4e34f38b2c722ad4a143092da5cdc66',
+ './include/SubPanel/SubPanel.php' => '2eb2ebfb7b6dfd3b067a44d5be750a91',
+ './include/Smarty/plugins/shared.make_timestamp.php' => '2d98e1b8ae60c93316d90bf152d3f5a5',
+ './include/Smarty/plugins/shared.escape_special_chars.php' => '1a8d89273862e174b64f683d42feb198',
+ './include/Smarty/plugins/outputfilter.trimwhitespace.php' => '25a2cdd916bf01bb8caa45a23fdf8d63',
+ './include/Smarty/plugins/modifier.wordwrap.php' => 'a3478828dc04f5e653d8cf004a8ce374',
+ './include/Smarty/plugins/modifier.upper.php' => 'dd90f6658466a3f98f935e6556bbcac1',
+ './include/Smarty/plugins/modifier.truncate.php' => 'b9b8d28ba0af5e060fc7e002b37f9518',
+ './include/Smarty/plugins/modifier.to_url.php' => '85bfd4db53ca9e701791f0559b7de44b',
+ './include/Smarty/plugins/modifier.strip_tags.php' => '8f98de4ecc0f3380d36943b0716edae9',
+ './include/Smarty/plugins/modifier.strip_semicolon.php' => '716963b69fd6281457d284e19c73dd62',
+ './include/Smarty/plugins/modifier.strip.php' => 'd37cbead10b238172272e54a5cd9c691',
+ './include/Smarty/plugins/modifier.string_format.php' => '916e60af3846575f2f0b70db2d25ba98',
+ './include/Smarty/plugins/modifier.spacify.php' => 'caaa7bc654d20b7a34670ffaf4810a16',
+ './include/Smarty/plugins/modifier.replace.php' => '5bb1e3d534891f79a09a36aee97b16d5',
+ './include/Smarty/plugins/modifier.regex_replace.php' => '20d7768bb576dbe28790e0d28124b1f9',
+ './include/Smarty/plugins/modifier.nl2br.php' => '2365291cea2e3cde544dc151bd62c662',
+ './include/Smarty/plugins/modifier.lower.php' => '014241bdc9356e4db65ff84902e868d2',
+ './include/Smarty/plugins/modifier.indent.php' => 'ee36b10a3f19acbdd06a6bd9185e62ab',
+ './include/Smarty/plugins/modifier.in_array.php' => 'f5aabe01841e76d205eec79f091ded5f',
+ './include/Smarty/plugins/modifier.escape.php' => 'aae08c2908d653176d5cdcdae0a8cd97',
+ './include/Smarty/plugins/modifier.default_date_value.php' => '6c4f7433ed3982422e83736ac0e1fc50',
+ './include/Smarty/plugins/modifier.default.php' => '0fe3023b34a89cb5f9168c558fc7cdaa',
+ './include/Smarty/plugins/modifier.debug_print_var.php' => '681a55a868dbeb1fb6ebcd993be9ed40',
+ './include/Smarty/plugins/modifier.date_format.php' => '779b980e5296f6e0814b26940c69afb8',
+ './include/Smarty/plugins/modifier.count_words.php' => '25b752b87368fafa7f66e4811f7f223e',
+ './include/Smarty/plugins/modifier.count_sentences.php' => 'ce2aa6fd44be95bbca2f9fa405184476',
+ './include/Smarty/plugins/modifier.count_paragraphs.php' => '094571a25323b4a624339c510c235e23',
+ './include/Smarty/plugins/modifier.count_characters.php' => '37fa5004b6d5f74dc05833658577e99a',
+ './include/Smarty/plugins/modifier.cat.php' => '0bdc246da1c7628c41296b51705ef4cf',
+ './include/Smarty/plugins/modifier.capitalize.php' => 'b6bcbaf3b0c8770898148e483a223c7e',
+ './include/Smarty/plugins/function.sugarvar_connector.php' => 'c84020dc3c970932cb3f4cc21ce10dfd',
+ './include/Smarty/plugins/function.sugarvar.php' => '5e7f2cf7aa362630648ce79689c643a9',
+ './include/Smarty/plugins/function.sugar_variable_constructor.php' => '6561cdb5987f989d18090a4713c9a27a',
+ './include/Smarty/plugins/function.sugar_translate.php' => 'b52ec4b3da8315a561df668fdfa82a1a',
+ './include/Smarty/plugins/function.sugar_run_helper.php' => '2118a0bb279e18aae2b0fe9237e6ba6d',
+ './include/Smarty/plugins/function.sugar_replace_vars.php' => 'a72d58f8842fcd9b39126d6324f1157a',
+ './include/Smarty/plugins/function.sugar_phone.php' => 'b4780a38d9fdd3a0d44bbc8e5a8c21aa',
+ './include/Smarty/plugins/function.sugar_number_format.php' => '11a1900821c4ba7b1621f2ee39a69aa2',
+ './include/Smarty/plugins/function.sugar_link.php' => '2424db7b435a5a5db2fe2fce0e1489cf',
+ './include/Smarty/plugins/function.sugar_include.php' => '7129e4a4c3b856917d352e62783f67ac',
+ './include/Smarty/plugins/function.sugar_image.php' => '711ae380835a8819e08757aed10fcaee',
+ './include/Smarty/plugins/function.sugar_help.php' => '70afb79935fed0839b175dcb90defd77',
+ './include/Smarty/plugins/function.sugar_getwebpath.php' => '42a9c08d0104dc9e692ace8e5361fdd1',
+ './include/Smarty/plugins/function.sugar_getjspath.php' => '57012e520ede6460a5246cb49dd6ce16',
+ './include/Smarty/plugins/function.sugar_getimagepath.php' => 'f95c722408c0860608c3cfdaf41ca57c',
+ './include/Smarty/plugins/function.sugar_field.php' => 'c91e8279c69999e11a36c96adb838839',
+ './include/Smarty/plugins/function.sugar_fetch.php' => '6fd07816cbba8003cdb31d3ee067271f',
+ './include/Smarty/plugins/function.sugar_evalcolumn_old.php' => '85b786307307859d4221cf32466d7893',
+ './include/Smarty/plugins/function.sugar_evalcolumn.php' => '59740a8d35e31740068ffd7e82067e4c',
+ './include/Smarty/plugins/function.sugar_currency_format.php' => '328379f1c05a4e8e60d640ce4fc8cb15',
+ './include/Smarty/plugins/function.sugar_connector_display.php' => '266cbf9b85deea2b1aa7407ca46f069d',
+ './include/Smarty/plugins/function.sugar_button_slider.php' => '6152ab8014fecf6fa1b6af75c28af497',
+ './include/Smarty/plugins/function.sugar_button.php' => '04e4e9f30503a9b62ba91c505c2620ca',
+ './include/Smarty/plugins/function.popup_init.php' => 'bbf08a63f3a1ae2679b324d23cfce520',
+ './include/Smarty/plugins/function.popup.php' => 'cf231d09647d1b1cf0adf5904b66b6a6',
+ './include/Smarty/plugins/function.overlib_includes.php' => 'a9ebdebac2bff90663da6090767b3f39',
+ './include/Smarty/plugins/function.multienum_to_array.php' => '402c543b8c0179e5e8f712dc304bf891',
+ './include/Smarty/plugins/function.math.php' => '99aa00ff372550f12df400da784ebab4',
+ './include/Smarty/plugins/function.mailto.php' => '5ba678549af1712ff9e64c244a8806c1',
+ './include/Smarty/plugins/function.html_table.php' => '2931b5dd6b495a332f4074094f6c1534',
+ './include/Smarty/plugins/function.html_select_time.php' => '780246c13ff291a61a80e69a12690e4a',
+ './include/Smarty/plugins/function.html_select_date.php' => 'ec3b1e591143de9dda0bf4c35bb6bf4c',
+ './include/Smarty/plugins/function.html_radios.php' => 'dde3b081e27db52945838e1f52a24714',
+ './include/Smarty/plugins/function.html_options.php' => 'a7903c34c86b166373946497fac2b7bb',
+ './include/Smarty/plugins/function.html_image.php' => '06abba1563143b4b1190ca07d53b0a0d',
+ './include/Smarty/plugins/function.html_checkboxes.php' => 'b1ca393b03bb49f580bef620db8727cb',
+ './include/Smarty/plugins/function.fetch.php' => '23aea2dfaba739298fe7ed0fa667efdb',
+ './include/Smarty/plugins/function.ext_includes.php' => 'e75b10578a7963fbd221d0e823471bc7',
+ './include/Smarty/plugins/function.eval.php' => '21a9230b569490f28ea9d67b1741ca89',
+ './include/Smarty/plugins/function.debug.php' => 'f1e71b56fc00f6de299f92571a8f6638',
+ './include/Smarty/plugins/function.cycle.php' => 'b15976e5809f951353857f490f65661e',
+ './include/Smarty/plugins/function.counter.php' => '73d05c9943053b38780e3bb86bf74fd2',
+ './include/Smarty/plugins/function.config_load.php' => '752a15886ca6ee831f2ab650ab09fe4e',
+ './include/Smarty/plugins/function.assign_debug_info.php' => '47b6d1f6e8411637af71925793a97efc',
+ './include/Smarty/plugins/compiler.assign.php' => 'e77d210e1f8aceff7f7bd67b1d25b28f',
+ './include/Smarty/plugins/block.textformat.php' => 'b0bebaca5693c6baf9332d22d6fbd1d1',
+ './include/Smarty/internals/core.write_file.php' => 'e624cf8490354f89340ba77c4d845519',
+ './include/Smarty/internals/core.write_compiled_resource.php' => '797244610368f0b276b4ecd743086f6b',
+ './include/Smarty/internals/core.write_compiled_include.php' => '93584e495a0bfb25f946f20f459889fb',
+ './include/Smarty/internals/core.write_cache_file.php' => '3347fa035bd907e7ea032ef4b745c0da',
+ './include/Smarty/internals/core.smarty_include_php.php' => '0f20b03f57483da2ede06ef900586bed',
+ './include/Smarty/internals/core.run_insert_handler.php' => '0cddac7a6aaf1b4fa18abe44eeb6c807',
+ './include/Smarty/internals/core.rmdir.php' => '2ecc86dd2fa40ed875c8273db17b4406',
+ './include/Smarty/internals/core.rm_auto.php' => '38cc535c939220b688d87884935395c1',
+ './include/Smarty/internals/core.read_cache_file.php' => '335015690743693e69b61d5bd52ae729',
+ './include/Smarty/internals/core.process_compiled_include.php' => 'da68a35662d0484b19c3637e2b625895',
+ './include/Smarty/internals/core.process_cached_inserts.php' => '9bfff97b0eb3f1fd2e416c536bac19c9',
+ './include/Smarty/internals/core.load_resource_plugin.php' => '66b72ff2bdb55f460e439cc07acd367e',
+ './include/Smarty/internals/core.load_plugins.php' => '4bc662697a0b10387d98685eabbb9faa',
+ './include/Smarty/internals/core.is_trusted.php' => '5dbc0bf6ad82123f09634397b436e4cb',
+ './include/Smarty/internals/core.is_secure.php' => '4c329afe681f1aad25b2bcce92dd520f',
+ './include/Smarty/internals/core.get_php_resource.php' => '0404f718f426d1e4e72ec43452b89ece',
+ './include/Smarty/internals/core.get_microtime.php' => '44d5bb49946bb2c4204494776324d673',
+ './include/Smarty/internals/core.get_include_path.php' => '1d5941075543a345c0c217d09d6b9a97',
+ './include/Smarty/internals/core.display_debug_console.php' => 'e9e81d5f37a8507d324e5bce83c34d04',
+ './include/Smarty/internals/core.create_dir_structure.php' => 'c8b9a192b7da5dd1a0ffa5a15b230eed',
+ './include/Smarty/internals/core.assign_smarty_interface.php' => 'c9d0bd78f9fee26105a2df3fbbca93e1',
+ './include/Smarty/internals/core.assemble_plugin_filepath.php' => 'a28fae766fb2a8ecc45b8c6fc4c35e76',
+ './include/Smarty/debug.tpl' => '048f29488fb3da08b3fcc5a746489696',
+ './include/Smarty/Smarty_Compiler.class.php' => 'b9a859a96c0d005cee69253bac461599',
+ './include/Smarty/Smarty.class.php' => '44dbf7377bba64c38900cc56d6b0b5b7',
+ './include/Smarty/README' => '1a3fe37eed420a020489d1082ea150c8',
+ './include/Smarty/LICENSE' => '8c2e1ec1540fb3e0beb68361344cba7e',
+ './include/Smarty/Config_File.class.php' => '8852379ae39541f5e3355591ee0bfa03',
+ './include/Smarty/COPYING.lib' => '8c2e1ec1540fb3e0beb68361344cba7e',
+ './include/SearchForm/tpls/header.tpl' => '66a8fd41e599af7cdaddbf5ec6ddc6e7',
+ './include/SearchForm/tpls/footer.tpl' => '63029c5d9fb81f706b61e346fd237254',
+ './include/SearchForm/tpls/SearchFormGenericAdvanced.tpl' => '6c503de6635ffff0d7a3cf913add9a70',
+ './include/SearchForm/tpls/SearchFormGeneric.tpl' => 'f4cee5cd0a6f267f23d3b493fbc05c8f',
+ './include/SearchForm/SugarSpot.php' => '59b4acdf92ea5e88bdc62a9eda76aada',
+ './include/SearchForm/SearchForm2.php' => '566b757e9259eb6b33a7d5be61d293e2',
+ './include/SearchForm/SearchForm.php' => '18fa71b0f4d20ec60fc9f907009a2dc3',
+ './include/QuickSearchDefaults.php' => '674dd947d5a73cbb7f671dc0c70326ee',
+ './include/Popups/tpls/header.tpl' => '100057ca98c7ac829a36cebd232c6bd3',
+ './include/Popups/tpls/footer.tpl' => 'e973a29e7d29e9ab18a1c41bf6a0318e',
+ './include/Popups/tpls/PopupGeneric.tpl' => 'bfe6dcbb71e502382816288507264a62',
+ './include/Popups/Popup_picker.php' => '5778cbee0092c9812b687180ac9c3dcf',
+ './include/Popups/PopupSmarty.php' => '47845112dc6f4561a1b414b345a9cdf5',
+ './include/Pear/XML_HTMLSax3/LICENSE' => 'a45bb1bbeed9e26b26c5763df1d3913d',
+ './include/Pear/XML_HTMLSax3/HTMLSax3/States.php' => '5b528baa84631f85349a7183597d2fb3',
+ './include/Pear/XML_HTMLSax3/HTMLSax3/Decorators.php' => '34a9a95566c891f013584073fbadaf7e',
+ './include/Pear/XML_HTMLSax3/HTMLSax3.php' => '11107d97b19feb13feb394cd858603f0',
+ './include/Pear/HTML_Safe/license.txt' => 'a9001003ee71c8e4ca0337600994e7ac',
+ './include/Pear/HTML_Safe/Safe.php' => 'fdcbdcb1ba1a71e3ce7432ca04e4b853',
+ './include/Pear/Crypt_Blowfish/license.txt' => 'a45bb1bbeed9e26b26c5763df1d3913d',
+ './include/Pear/Crypt_Blowfish/Blowfish/DefaultKey.php' => '8274b556662cc178342ea96940b36514',
+ './include/Pear/Crypt_Blowfish/Blowfish.php' => 'b391980575340d0fe5bf2df72bc13932',
+ './include/OutboundEmail/OutboundEmail.php' => 'c502e2caaeaa94b514dd2a14f791745e',
+ './include/MySugar/tpls/retrieveReportCharts.tpl' => '72c137f9c8df056f8ec6ffaf01aa3bd6',
+ './include/MySugar/tpls/retrievePage.tpl' => 'aba0b602f74d0f8d420af10fdfd703be',
+ './include/MySugar/tpls/dashletsSearchResults.tpl' => '1f101a6547e7bd0653cc47fbcb5ac90a',
+ './include/MySugar/tpls/chartDashletsSearchResults.tpl' => '67fc336767e4e9048e4d59905257b443',
+ './include/MySugar/tpls/addDashletsDialog.tpl' => '7c87bb1474e1a740c12245c5396efc6f',
+ './include/MySugar/tpls/MySugar.tpl' => '931e27d4210d26221451f428119e43cd',
+ './include/MySugar/javascript/MySugar.js' => '78e42672503843e14f0c3195a558d87f',
+ './include/MySugar/MySugar.php' => 'eeaf9f743996136c20d8b666ecbd8994',
+ './include/MySugar/DashletsDialog/DashletsDialog.php' => 'e744aa3227983c1359009470bca4efd4',
+ './include/MassUpdate.php' => '40ff490a2fd6d983c14187bca22cdbea',
+ './include/MVC/View/views/view.xml.php' => '899ce32b620a040d2f04dd32bf32cd6d',
+ './include/MVC/View/views/view.vcard.php' => '3b04600e1920cef4e3d6b74e26c0e386',
+ './include/MVC/View/views/view.sugarpdf.php' => 'fffb5f92357ed83e618ccf726747443e',
+ './include/MVC/View/views/view.sugarpdf.config.php' => 'f2e716a709d667779fae8f7339a41f8f',
+ './include/MVC/View/views/view.serialized.php' => '419a311f5b59f154f53c683f56863a5f',
+ './include/MVC/View/views/view.quickcreate.php' => 'b130d5c1db8f57870ce01a33bdbe6664',
+ './include/MVC/View/views/view.quick.php' => 'd9fb0ab43dc329674181db536fc738a3',
+ './include/MVC/View/views/view.popup.php' => 'de27b3d994b115c78c34444e91c1854f',
+ './include/MVC/View/views/view.noaccess.php' => '97a35342d7a3eed867b1bdbaea229fcd',
+ './include/MVC/View/views/view.multiedit.php' => '5e113a540d3bbac4d7329b1c6b808377',
+ './include/MVC/View/views/view.modulelistmenu.php' => 'e903cb33f76f8e66c57ff218698a6a9b',
+ './include/MVC/View/views/view.list.php' => '3da830a3debfd98e6d0f46f8c463366a',
+ './include/MVC/View/views/view.json.php' => '860bdf32d8d0c5e223f7d54c41ae017e',
+ './include/MVC/View/views/view.importvcardsave.php' => '41068e4fead26d11306ed9de7f03a12b',
+ './include/MVC/View/views/view.importvcard.php' => '63a6f9060dd84fdd9970e34c31857b6f',
+ './include/MVC/View/views/view.html.php' => 'b0b55af897d4035b5fade1506d6d8db5',
+ './include/MVC/View/views/view.edit.php' => '0c3e2cf6a1d4da57feac747562bfcb76',
+ './include/MVC/View/views/view.detail.php' => '8270e3714b50f262b5e6b71418655278',
+ './include/MVC/View/views/view.config.php' => '3ed505354fa6e7c166ab25cd5244426d',
+ './include/MVC/View/views/view.classic.php' => 'f42a4229cbdc0234d839e0ea7f2b592d',
+ './include/MVC/View/views/view.classic.config.php' => 'a24241005a762569f3a5b0e2c906b0cc',
+ './include/MVC/View/views/view.ajax.php' => 'e5efe32ce8532928396be74f1d2f39a3',
+ './include/MVC/View/tpls/xsrf.tpl' => '779535fac8004ae61d70a9fb2141e7df',
+ './include/MVC/View/tpls/modulelistmenu.tpl' => '30e9e17ede95641e61d081bdc55bbf1b',
+ './include/MVC/View/tpls/Importvcard.tpl' => '76a9b0c70a3b0a143ea483481a11458b',
+ './include/MVC/View/ViewFactory.php' => 'c7ebee5efbeae00db163c01401ba28e8',
+ './include/MVC/View/SugarView.php' => '6f087797e1a4bc67abb8c17fcae9aac1',
+ './include/MVC/SugarModule.php' => '549e85c67ab4e6e4298976410b9fa0e4',
+ './include/MVC/SugarApplication.php' => 'a3309d3aa416fd21e33df4ab636929ae',
+ './include/MVC/Controller/file_access_control_map.php' => 'e04c44c836810acfbc21c7ffb10f00d6',
+ './include/MVC/Controller/entry_point_registry.php' => '63da395b9079b223b4a921ee0d1af7c9',
+ './include/MVC/Controller/action_view_map.php' => 'f86f9461f69d408db31d4c726c53bc9e',
+ './include/MVC/Controller/action_file_map.php' => '5a5579b9cee401b91d6d421cf6f95576',
+ './include/MVC/Controller/SugarController.php' => '4efe413ff1a79f05c2f8fa7782c610dc',
+ './include/MVC/Controller/ControllerFactory.php' => '0df016a533ab996705d00d709c65c353',
+ './include/Localization/Localization.php' => '233e770470587ab67c7cf6a3fdffa9b3',
+ './include/ListView/ListViewDCMenu.tpl' => '2f65467af069a9497f43f09e020b797d',
+ './include/ListView/ListViewXTPL.php' => '1565e08d5508441d4fc6528e41dda507',
+ './include/ListView/ListViewSmarty.php' => '072e1dc0db96f0272ca30be6a96fb49e',
+ './include/ListView/ListViewPagination.tpl' => 'bab0422f5ab27b8c37fd10cf45b5f910',
+ './include/ListView/ListViewNoMassUpdate.tpl' => 'eed55b49e2b787d71106e4e54d30f45f',
+ './include/ListView/ListViewGeneric.tpl' => '9ffc51d5bb72ac1eb186dc4d9696b57c',
+ './include/ListView/ListViewFacade.php' => '09ab474e08eb514a7fe506b6faa3abae',
+ './include/ListView/ListViewDisplay.php' => 'a814a93190a4442eeb8c78278608a218',
+ './include/ListView/ListViewData.php' => 'd3842252060a33a735401eb6476e8486',
+ './include/ListView/ListView.php' => '9f6e57223e08b58929c6b9899a87e700',
+ './include/JSON.php' => 'e5d193ad3ae6461e297797e204e99e46',
+ './include/HTTP_WebDAV_Server/license.txt' => 'a45bb1bbeed9e26b26c5763df1d3913d',
+ './include/HTTP_WebDAV_Server/dav.txt' => 'c5235ed64efa685da638c6dcdb6a9708',
+ './include/HTTP_WebDAV_Server/Tools/_parse_proppatch.php' => '70971e2e4a07137ef26d6f4777194a9c',
+ './include/HTTP_WebDAV_Server/Tools/_parse_propfind.php' => 'a714317051491612e3d70d066e18b7b6',
+ './include/HTTP_WebDAV_Server/Tools/_parse_lockinfo.php' => 'bf062d20864aa65ad832b96961b90b01',
+ './include/HTTP_WebDAV_Server/Server.php' => '85e6613006abbd02d316572254f9f97f',
+ './include/HTTP_WebDAV_Server/README' => 'e6f0ca3d7e4fa2b20310995f269c3ef2',
+ './include/GroupedTabs/GroupedTabStructure.php' => '40657e2a1b291caa5868b843bc683eec',
+ './include/EditView/header.tpl' => '13b6c6dcd13b71ea8e0f70b4cc544b09',
+ './include/EditView/footer.tpl' => 'ecd19cb2e11819d8fd4e6002da1e50a9',
+ './include/EditView/SugarVCR.php' => 'da2c12eea813bacc8d6f004e01fdad09',
+ './include/EditView/SubpanelQuickCreate.php' => '12637ec7294ec293924c9bd8a4980d8b',
+ './include/EditView/QuickCreate.tpl' => 'db1d0c687df9587bba18ed50015e7c00',
+ './include/EditView/QuickCreate.php' => '785ea6d1ee8a781c3be2caa6ad8e6f18',
+ './include/EditView/PopupQuickCreate.php' => '337f225f03fc21c831155bbaf984125a',
+ './include/EditView/EditView2.php' => 'dc8f8ab0999c20c65c3ef0c47f27c7d1',
+ './include/EditView/EditView.tpl' => '2414bcf1a7e7618a1ef5008ee4c9fca8',
+ './include/EditView/EditView.php' => '0c0e9448689883c371cca32397e79ec8',
+ './include/DetailView/header.tpl' => '09b011bb23a5b632218aeaf00ca03d0f',
+ './include/DetailView/footer.tpl' => '3c66d5fab6cadba3277505554b234ae9',
+ './include/DetailView/DetailView2.php' => '5438db41056ed8f5a6cb6828e2828818',
+ './include/DetailView/DetailView.tpl' => '87c2b8ef3017ce19626f750f4e49a0c9',
+ './include/DetailView/DetailView.php' => 'edba64550e8750167aeca183f0917c52',
+ './include/Dashlets/DashletGenericAutoRefreshDynamic.tpl' => 'cf058a5e3ebf1467326a8b6cac9d8394',
+ './include/Dashlets/DashletGenericDisplay.tpl' => '0789f0bfd1de579ce83bdf4895665056',
+ './include/Dashlets/DashletGenericConfigure.tpl' => 'e0b44a273303bed6eaee040a78762d2d',
+ './include/Dashlets/DashletGenericAutoRefresh.tpl' => '4fb7e5de13f7f786557453913973dad8',
+ './include/Dashlets/DashletGenericChartConfigure.tpl' => 'acc6b9ec91ce12ef66209851f924473c',
+ './include/Dashlets/DashletGenericChart.php' => 'c076507694384a248687e95224cf78fe',
+ './include/Dashlets/DashletGeneric.php' => '740d2e86717fd9769dc16b7554c785be',
+ './include/Dashlets/DashletCacheBuilder.php' => '2450bc0178c619d93dfa457795a6fa31',
+ './include/Dashlets/Dashlet.php' => '4e97d5df8cdd4337913e1df1c7dc5977',
+ './image.php' => '9b23aefc874f7518e0f8c32c8ea53711',
+ './json_server.php' => '336652fc4e8c10c12889751f7fd64b3a',
+ './examples/SoapTestPortal2.php' => '1df38f1a9deb711ac020176352775ea8',
+ './examples/SoapTestPortal.php' => '2d5550a7519f3ef62c445673df39077c',
+ './examples/SoapTest.php' => 'f026c807b4bdc6c0c4b177f82f5cbcd8',
+ './examples/ProgressBarTest.php' => 'eb3f978a9d71831cd893e79935867ea1',
+ './examples/FormValidationTest.php' => 'a9369a5e1d04c7394ab652339abec6da',
+ './examples/ExampleLeadCapture.php' => '5427510db86ff439c9345bd3673c7173',
+ './examples/EXAMPLES_README.txt' => 'b55744b5e2684d91f6d3f98db4553673',
+ './emailmandelivery.php' => 'c48b3d73c8359b341ce50b1963847944',
+ './download.php' => '3751125d0074b4ecb4ba8f0b3aa3f6d9',
+ './dictionary.php' => 'e4e8f9cad5a1e40989cfb246d5f8f99b',
+ './Zend/Version.php' => '7ed9dea03172b0f8fb11f085a17f100b',
+ './Zend/Validate/Ip.php' => '05326c26a0f419d8dac8c168f6cb7f12',
+ './Zend/Validate/Interface.php' => 'e4740491b21885d7439b9df6fd669288',
+ './Zend/Validate/Hostname/Jp.php' => '8edee6d942534ea8037ceb6f23640d5c',
+ './Zend/Validate/Hostname/Com.php' => '19562d7628ecd73ac147577b96eb8641',
+ './Zend/Validate/Hostname/Cn.php' => '326faf778c688e6bee5ce0fe006d46a9',
+ './Zend/Validate/Hostname/Biz.php' => 'ee5319555a6d9089848846b7dece3326',
+ './Zend/Validate/Hostname.php' => '6e2caae3fccade0947ef2f55fa1db12a',
+ './Zend/Validate/Abstract.php' => '0e617afaf441ae142ca03eea964e1afc',
+ './Zend/Uri/Http.php' => 'c7f0cddbf8f25abf27870f055f6a3233',
+ './Zend/Uri/Exception.php' => 'd887f44a926f35ceb936871537dc5ac8',
+ './Zend/Uri.php' => 'cde07c0e943c7cda721794d3df422f72',
+ './Zend/Registry.php' => '56b05bc37aa19203e114fe93782b33b0',
+ './Zend/Oauth/Token/Request.php' => 'affe7ec2aa5d5213c04faefd241658fe',
+ './Zend/Oauth/Token/AuthorizedRequest.php' => '89fbdd54439eb00ab07d6cdfee9c230e',
+ './Zend/Oauth/Token/Access.php' => '3f0660a492b66f94342ab3a0db44869d',
+ './Zend/Oauth/Token.php' => '66c75d877789a6c9f76fcb56eca8f69f',
+ './Zend/Oauth/Signature/SignatureAbstract.php' => 'd44f7c92c85ba7915a6774e78f426b1c',
+ './Zend/Oauth/Signature/Rsa.php' => '1c34a9f3ba22e92181fd20635bd165a0',
+ './Zend/Oauth/Signature/Plaintext.php' => '172f0dbf4ffed18d6aa136bbe752c4d2',
+ './Zend/Oauth/Signature/Hmac.php' => '7de78bcbd009391679c290259d4f0b7e',
+ './Zend/Oauth/Http/Utility.php' => 'b423ef547710255a45cac24c0f2212b6',
+ './Zend/Oauth/Http/UserAuthorization.php' => '19865a03744565805aedc37c211451b1',
+ './Zend/Oauth/Http/RequestToken.php' => 'a601ddf2a654043d45c8850970c3f81d',
+ './Zend/Oauth/Http/AccessToken.php' => '1d1fb8b5fa88827ea8170738cb44ddf0',
+ './Zend/Oauth/Http.php' => 'b71dc11811eb3b4ce48555c4ee836664',
+ './Zend/Oauth/Exception.php' => '8aa7149c933281a33beec3e6e29527ac',
+ './Zend/Oauth/Consumer.php' => 'a7e6bd2b6e40437980f8489790bc6a53',
+ './Zend/Oauth/Config/ConfigInterface.php' => '6830164ea9812294fc750da1337098f5',
+ './Zend/Oauth/Config.php' => '80ff096d8cec0c5bb7d1388a480c8803',
+ './Zend/Oauth/Client.php' => '45f14e23ad50d4d85b1656681d81d487',
+ './Zend/Oauth.php' => 'a194292fb9c2439c2909d2b0fe17a2bd',
+ './Zend/Loader.php' => '3a440481f38852f58a39b712ca87d1f9',
+ './Zend/Http/Response/Stream.php' => '83d96a23bada94448d56b7302916d4ef',
+ './Zend/Http/Response.php' => '0594b4e9572d27007e49442abe309918',
+ './Zend/Http/Exception.php' => '98f4737ee4d6b3de93fdf05a3fc7aa4c',
+ './Zend/Http/Client/Exception.php' => '30da2add08b4555e5fa1dc8c157ca37f',
+ './Zend/Http/Client/Adapter/Test.php' => 'e06773a4f74eac882c7f22c7f20761e5',
+ './Zend/Http/Client/Adapter/Stream.php' => '8d522d85b6bff060c9a10f9fd611ec0a',
+ './Zend/Http/Client/Adapter/Socket.php' => '6d6db9d986cfca0ce18d17c33cc612f6',
+ './Zend/Http/Client/Adapter/Proxy.php' => '892ba28ced3643b8ed5aca54f3896969',
+ './Zend/Http/Client/Adapter/Interface.php' => 'a0f8555e41c4679e3e0efc2822235e3a',
+ './Zend/Http/Client/Adapter/Exception.php' => '89c054ccc9f1db399d3b97051b146d0a',
+ './Zend/Http/Client/Adapter/Curl.php' => 'a0f409edfe1f0b0dffbf98709c846f19',
+ './Zend/Http/Client.php' => '0fdc1a5e0e0df69543f9aa98359d0fdc',
+ './Zend/Gdata/YouTube/VideoQuery.php' => 'd08f02e20e12871425d05490ef7bf634',
+ './Zend/Gdata/YouTube/VideoFeed.php' => '07eaed57637e2e490c1ff29f18c3af0a',
+ './Zend/Gdata/YouTube/VideoEntry.php' => '78db67e2d267168f00d82d23454532c3',
+ './Zend/Gdata/YouTube/UserProfileEntry.php' => '359456a0bed13649bf015ad24660e0a8',
+ './Zend/Gdata/YouTube/SubscriptionFeed.php' => '6ef548ff24d60cb264c7e38ac6fbaca7',
+ './Zend/Gdata/YouTube/SubscriptionEntry.php' => 'f4bf339e2ffad6815cabc42ec8981b73',
+ './Zend/Gdata/YouTube/PlaylistVideoFeed.php' => '3ebd122ccc2d3c6cb2fa97f2522aef0b',
+ './Zend/Gdata/YouTube/PlaylistVideoEntry.php' => 'd74666010c8a5d60950863bb6c1d9d50',
+ './Zend/Gdata/YouTube/PlaylistListFeed.php' => '3507e7a2c09dcb5ee8387cbee50da98a',
+ './Zend/Gdata/YouTube/PlaylistListEntry.php' => 'd8aa220766d77a83e916bfd0192f7364',
+ './Zend/Gdata/YouTube/MediaEntry.php' => '3478e5d65938b5ec5bdfc4382ebf89f3',
+ './Zend/Gdata/YouTube/InboxFeed.php' => '20eb4fa2025a9c9a98c5d3fa605f6cf0',
+ './Zend/Gdata/YouTube/InboxEntry.php' => 'dca5d2c467e84e7fb08dd7e43048e868',
+ './Zend/Gdata/YouTube/Extension/VideoId.php' => '5fa1f60078f30cff4216d4a9ff814f40',
+ './Zend/Gdata/YouTube/Extension/Username.php' => '982784449807f558d3eb733fdf805a68',
+ './Zend/Gdata/YouTube/Extension/Uploaded.php' => '36cdd75b4c5a2e999cca2136d11960ba',
+ './Zend/Gdata/YouTube/Extension/Token.php' => 'b8f0ea9931e09a2519cc365c257eab90',
+ './Zend/Gdata/YouTube/Extension/Status.php' => '1d0216cd5c04340148ea8c22a25a28c3',
+ './Zend/Gdata/YouTube/Extension/Statistics.php' => '50c584bdd099e939c711d1fd38204c2f',
+ './Zend/Gdata/YouTube/Extension/State.php' => '2f29a2e918dea080bce7b4947a5cf1a7',
+ './Zend/Gdata/YouTube/Extension/School.php' => '4307b603d94845f53259794be5dfc2ad',
+ './Zend/Gdata/YouTube/Extension/ReleaseDate.php' => '2f820ec0f859a4a758b15fa6db91032c',
+ './Zend/Gdata/YouTube/Extension/Relationship.php' => '0aad7884eadc0207c6c37c6d73195deb',
+ './Zend/Gdata/YouTube/Extension/Recorded.php' => '4fdcc93cbd4897396a7212471a121772',
+ './Zend/Gdata/YouTube/Extension/Racy.php' => '74ca091807a7e8817da850ddd7823950',
+ './Zend/Gdata/YouTube/Extension/QueryString.php' => 'ab0e180254036a30661bb2e13e796245',
+ './Zend/Gdata/YouTube/Extension/Private.php' => 'cae31d4bf0bcaf8a70881dd9cf8327d5',
+ './Zend/Gdata/YouTube/Extension/Position.php' => '85ddb29ec12e5712cf02e198e16213cf',
+ './Zend/Gdata/YouTube/Extension/PlaylistTitle.php' => 'c2d90679e77c0db14c3641b4feffd66b',
+ './Zend/Gdata/YouTube/Extension/PlaylistId.php' => '1d0f3a4a9c7409e0c9e48260d1733e19',
+ './Zend/Gdata/YouTube/Extension/Occupation.php' => '15d49f27af36ee458375d4e463dbd3e7',
+ './Zend/Gdata/YouTube/Extension/NoEmbed.php' => '474501835ffcef3db7ce66a3fc990dc4',
+ './Zend/Gdata/YouTube/Extension/Music.php' => '88fe6680609c5151603b0c440f3c0cf7',
+ './Zend/Gdata/YouTube/Extension/Movies.php' => '64d0579c0b8024d6ecfcff8715d104fc',
+ './Zend/Gdata/YouTube/Extension/MediaRating.php' => 'e521e0e474677af81229e53d26660085',
+ './Zend/Gdata/YouTube/Extension/MediaGroup.php' => '780666a1707fbc6f66131c567513ce0e',
+ './Zend/Gdata/YouTube/Extension/MediaCredit.php' => 'df56bc66783d7728e91733d21b30f1c2',
+ './Zend/Gdata/YouTube/Extension/MediaContent.php' => '418f1480bc0e1705c8aea34214346c63',
+ './Zend/Gdata/YouTube/Extension/Location.php' => '7f31e4011644e3f78462003005bcc128',
+ './Zend/Gdata/YouTube/Extension/Link.php' => 'e490e2123fa255a08403838cdbb1797f',
+ './Zend/Gdata/YouTube/Extension/LastName.php' => '38eb3a8a73940421ef5d96e0d9b00344',
+ './Zend/Gdata/YouTube/Extension/Hometown.php' => '1e45365d9ef59f0685d4951ff2c10008',
+ './Zend/Gdata/YouTube/Extension/Hobbies.php' => 'c4824a0ecf6c61ee08585e7eb31f7fd5',
+ './Zend/Gdata/YouTube/Extension/Gender.php' => '09f2ad8e233248a52c88dcc957bf6949',
+ './Zend/Gdata/YouTube/Extension/FirstName.php' => 'e4ee02e4af42fbdf362fcf1f484f6cef',
+ './Zend/Gdata/YouTube/Extension/Duration.php' => 'd3cd34eaad5bc28bc95e70f4997e8eed',
+ './Zend/Gdata/YouTube/Extension/Description.php' => '1efbfbc83319bf470112cebfc4b325da',
+ './Zend/Gdata/YouTube/Extension/CountHint.php' => '392b457b91e6deac12753af92a0972b1',
+ './Zend/Gdata/YouTube/Extension/Control.php' => '77805b2e407809fdedba6f9b817f0a57',
+ './Zend/Gdata/YouTube/Extension/Company.php' => '571ed8acf0f7e498442fefcdfb53607f',
+ './Zend/Gdata/YouTube/Extension/Books.php' => 'aa8cc7495b93762e1a5141568ca69d9a',
+ './Zend/Gdata/YouTube/Extension/Age.php' => '823d6b5a30800dfe8ff0e1ce911ad020',
+ './Zend/Gdata/YouTube/Extension/AboutMe.php' => 'c81b3f7b441c0cb22e57bd32fd37d1ae',
+ './Zend/Gdata/YouTube/ContactFeed.php' => 'd9df7a110f5f8c7929451f6f7db62eb7',
+ './Zend/Gdata/YouTube/ContactEntry.php' => 'e65c537e9246bef0bd33502c2b271b36',
+ './Zend/Gdata/YouTube/CommentFeed.php' => '2a7f5aa0b70e7c1ec9c0585f4101839e',
+ './Zend/Gdata/YouTube/CommentEntry.php' => '511706a609bfcaa3b9f6365f39decb8c',
+ './Zend/Gdata/YouTube/ActivityFeed.php' => '3cc4414f4a907b0b4215851041d7cd06',
+ './Zend/Gdata/YouTube/ActivityEntry.php' => '0b4ecdc019d7f5bc2202e197b8a52ef1',
+ './Zend/Gdata/YouTube.php' => '55c50f1e97915e71d8d074ec58545193',
+ './Zend/Gdata/Spreadsheets/WorksheetFeed.php' => 'c236e0a8fb83879d9cfc70c98bd94a79',
+ './Zend/Gdata/Spreadsheets/WorksheetEntry.php' => '28585b9947db42a3cebafa8305e35ec4',
+ './Zend/Gdata/Spreadsheets/SpreadsheetFeed.php' => '07edc2e2f0eba835e57d77c82b80adb4',
+ './Zend/Gdata/Spreadsheets/SpreadsheetEntry.php' => '0db99ce56cc1f60c4912701ea4b6bb44',
+ './Zend/Gdata/Spreadsheets/ListQuery.php' => '914b1eef2c6d215d95cd9d50c5888ea9',
+ './Zend/Gdata/Spreadsheets/ListFeed.php' => '7ca20a1f04afddbc182d4a9237720ee9',
+ './Zend/Gdata/Spreadsheets/ListEntry.php' => '453dd5c3a99a8b85af6983883cdd6331',
+ './Zend/Gdata/Spreadsheets/Extension/RowCount.php' => '7dd692b4c1078a5c816979898444c551',
+ './Zend/Gdata/Spreadsheets/Extension/Custom.php' => '2121726d40bef96d5cd6f63fccb9d442',
+ './Zend/Gdata/Spreadsheets/Extension/ColCount.php' => '5ee3185c11569d23a45e124da3b0187b',
+ './Zend/Gdata/Spreadsheets/Extension/Cell.php' => '0e1a402993243dbf103b663ae3a65b82',
+ './Zend/Gdata/Spreadsheets/DocumentQuery.php' => '6ecca6b1509d7c70c96abd5e5c9e84ae',
+ './Zend/Gdata/Spreadsheets/CellQuery.php' => '2f90c329430c3f7abd6b5e0bc38a489e',
+ './Zend/Gdata/Spreadsheets/CellFeed.php' => 'e1a2bfe06f4ce23ae9c165b5cd4fbd0f',
+ './Zend/Gdata/Spreadsheets/CellEntry.php' => '898b3bbeb5f37e933e084ca71e652282',
+ './Zend/Gdata/Spreadsheets.php' => 'd6987183f1b327ccc11c9613fef7e474',
+ './Zend/Gdata/Query.php' => 'e2757f1bc039f2aaeed8ad4e7e86722f',
+ './Zend/Gdata/Photos/UserQuery.php' => '38c69ef30c96b164332f65a331ee0547',
+ './Zend/Gdata/Photos/UserFeed.php' => '56fdfaed72ad83487b13c9a6724a4c89',
+ './Zend/Gdata/Photos/UserEntry.php' => '356163021b933a5fa4d5944705be9534',
+ './Zend/Gdata/Photos/TagEntry.php' => 'db7cc947d50fdecfcf2f61eec00da421',
+ './Zend/Gdata/Photos/PhotoQuery.php' => '6ad0e3dc10de7c3dca800b77356a77ba',
+ './Zend/Gdata/Photos/PhotoFeed.php' => 'bf98655deba36706cdd23061f7c9d5ce',
+ './Zend/Gdata/Photos/PhotoEntry.php' => '3912e922f088f379912993e97f536db7',
+ './Zend/Gdata/Photos/Extension/Width.php' => '577629fed6de78472df888e378079c7c',
+ './Zend/Gdata/Photos/Extension/Weight.php' => 'b492aec4b790d2cd4c0eae047c01ec8f',
+ './Zend/Gdata/Photos/Extension/Version.php' => 'e8913ab213d21e2e4dd24d825aa7e940',
+ './Zend/Gdata/Photos/Extension/User.php' => 'f165bf08593fee86f7e4717ebaec1b47',
+ './Zend/Gdata/Photos/Extension/Timestamp.php' => '75eb2c121fa06c129e5d28fbeaa2bec0',
+ './Zend/Gdata/Photos/Extension/Thumbnail.php' => '43fb1e62312f079d64c7baab2963cea5',
+ './Zend/Gdata/Photos/Extension/Size.php' => '2630ae3ec766e4474d965736082ebbad',
+ './Zend/Gdata/Photos/Extension/Rotation.php' => 'a68e0eaf62d7373b40e3134a6b9c5ea4',
+ './Zend/Gdata/Photos/Extension/QuotaLimit.php' => 'a320dae891db029e4886bdd06371b583',
+ './Zend/Gdata/Photos/Extension/QuotaCurrent.php' => '71be9182545794213360b44d31164e10',
+ './Zend/Gdata/Photos/Extension/Position.php' => 'eb5d326804d6934286494155f56a56ec',
+ './Zend/Gdata/Photos/Extension/PhotoId.php' => '0a1dca01961755747c4f7dfaf18001cf',
+ './Zend/Gdata/Photos/Extension/NumPhotosRemaining.php' => 'bca831419999d05e562380ab5bf896a0',
+ './Zend/Gdata/Photos/Extension/NumPhotos.php' => '6409e2ab85a661ec85ddc280323370f2',
+ './Zend/Gdata/Photos/Extension/Nickname.php' => 'b671bd7ac595645c7df32306dbb0724b',
+ './Zend/Gdata/Photos/Extension/Name.php' => '65b004def0d96e6df4dc98732d765c72',
+ './Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php' => '54c496b1aebfad69b0b6aa54072ff35f',
+ './Zend/Gdata/Photos/Extension/Location.php' => 'f796cf33da904ad63ce48bfd314e6899',
+ './Zend/Gdata/Photos/Extension/Id.php' => '361b94fd39a07c5b185b9fbd7ba41fb1',
+ './Zend/Gdata/Photos/Extension/Height.php' => 'd602dc7f176bd6a9d868af0d09bc2303',
+ './Zend/Gdata/Photos/Extension/CommentingEnabled.php' => '49165c783a798d688b41bbbcbe060124',
+ './Zend/Gdata/Photos/Extension/CommentCount.php' => '543d6e8ec2766eab5feead7b5a717c4f',
+ './Zend/Gdata/Photos/Extension/Client.php' => '89bf5e2b85b34d1658fc5f44cbd7231e',
+ './Zend/Gdata/Photos/Extension/Checksum.php' => 'fd7cd4114add2accc8c8739d4ad022b1',
+ './Zend/Gdata/Photos/Extension/BytesUsed.php' => '9b827f57b6df8b455edbece3f841ccd1',
+ './Zend/Gdata/Photos/Extension/AlbumId.php' => '165002b61b7b6e2cff7da3e071c77cba',
+ './Zend/Gdata/Photos/Extension/Access.php' => '4dcc5ef6fa65be6d7c90cb94ff7e8cef',
+ './Zend/Gdata/Photos/CommentEntry.php' => '3d6e4d837f802a70383d382a8e16c046',
+ './Zend/Gdata/Photos/AlbumQuery.php' => '46c69253e0c22851915671300cf76bfd',
+ './Zend/Gdata/Photos/AlbumFeed.php' => '8f923c1bfefdba885bf2a4e549f2ef2c',
+ './Zend/Gdata/Photos/AlbumEntry.php' => 'f357bde1a27fe69bf9f7d30ca404737e',
+ './Zend/Gdata/Photos.php' => '9ddecf3bc25e69715e48eda73ec50314',
+ './Zend/Gdata/MimeFile.php' => '7c590cfb35853728314b660496957cc8',
+ './Zend/Gdata/MimeBodyString.php' => '8cc543fe62bfee59fd60edfa1755f1de',
+ './Zend/Gdata/MediaMimeStream.php' => 'c43c413eec9556f1dd103b3279e7f1b0',
+ './Zend/Gdata/Media/Feed.php' => '5eff2741c0df2fa38192f356cd38a105',
+ './Zend/Gdata/Media/Extension/MediaTitle.php' => '22d2b650c4ac47eaf7d44d4c79303417',
+ './Zend/Gdata/Media/Extension/MediaThumbnail.php' => 'c6da2b5cb45fcef98045213bddacc19f',
+ './Zend/Gdata/Media/Extension/MediaText.php' => 'a532decd15211d332c740b5fb9f2cb86',
+ './Zend/Gdata/Media/Extension/MediaRestriction.php' => '5ca5d055a993c9d2a8d90798542d9b15',
+ './Zend/Gdata/Media/Extension/MediaRating.php' => 'c0379615ef7e105805513a106264f5bc',
+ './Zend/Gdata/Media/Extension/MediaPlayer.php' => 'f8a5d5cba705113cf3ebde25fe1d5501',
+ './Zend/Gdata/Media/Extension/MediaKeywords.php' => '4af6605e2a9d3097314197c6d7723ff2',
+ './Zend/Gdata/Media/Extension/MediaHash.php' => '6efe3050750396957b4c134297cec762',
+ './Zend/Gdata/Media/Extension/MediaGroup.php' => '5df9c900f8c20293ff9b480d07ad09e2',
+ './Zend/Gdata/Media/Extension/MediaDescription.php' => 'e2687081069be0d2540f4337d40c6361',
+ './Zend/Gdata/Media/Extension/MediaCredit.php' => '849a2d69e6c0911887faeedaa2a8fdde',
+ './Zend/Gdata/Media/Extension/MediaCopyright.php' => 'a188c2607b2ba47dd2806c9c8f2705d7',
+ './Zend/Gdata/Media/Extension/MediaContent.php' => '2d565a102eef2a2015f04a49cd01426e',
+ './Zend/Gdata/Media/Extension/MediaCategory.php' => '3d304d1f7556b320766a62d05d6c9cce',
+ './Zend/Gdata/Media/Entry.php' => '3b616e1f80cab56dfa3d70b5c0a5f0cc',
+ './Zend/Gdata/Media.php' => '01c1520ff214209bd33bbcbead394d64',
+ './Zend/Gdata/Kind/EventEntry.php' => 'a43630a2d2067d3b485cef550d42dc9f',
+ './Zend/Gdata/HttpClient.php' => '8fb2007caccb17a77dad778d8af0b60d',
+ './Zend/Gdata/HttpAdapterStreamingSocket.php' => '7bbd9ba33d8d6df39b51b14a8d3486a1',
+ './Zend/Gdata/HttpAdapterStreamingProxy.php' => '7affc3e70de3fff146d250317d2d9030',
+ './Zend/Gdata/Health/Query.php' => '17fabebdad3be441f8dac2b826fca3a4',
+ './Zend/Gdata/Health/ProfileListFeed.php' => '20ec77b8a95c063f04d5f06e40f4d31c',
+ './Zend/Gdata/Health/ProfileListEntry.php' => 'a0148f1cc9353b297de31f12b14fb498',
+ './Zend/Gdata/Health/ProfileFeed.php' => '740a08f3445dac331c2ccf8ad04761be',
+ './Zend/Gdata/Health/ProfileEntry.php' => '76e93dd6da4feede52a9e2f33b7a3f2c',
+ './Zend/Gdata/Health/Extension/Ccr.php' => '7820c80f6a5a596dffee19ad86adda4d',
+ './Zend/Gdata/Health.php' => 'b6ed0d0b12be634f972bab3b99942e74',
+ './Zend/Gdata/Geo/Feed.php' => 'beb9344c11b85ea47c8d88d5d426add6',
+ './Zend/Gdata/Geo/Extension/GmlPos.php' => 'a0ff7fdff628fbfc6356ee88d3caaf34',
+ './Zend/Gdata/Geo/Extension/GmlPoint.php' => '0097670a0c6795935dcd80aaede6192c',
+ './Zend/Gdata/Geo/Extension/GeoRssWhere.php' => '681591874d4ac36147d432024a036e1b',
+ './Zend/Gdata/Geo/Entry.php' => 'acaa2f05954dccd840b95a8c4029235b',
+ './Zend/Gdata/Geo.php' => '8ef08655344ff86003c62f23db98954d',
+ './Zend/Gdata/Gbase/SnippetQuery.php' => '1feca4717ee466378378931160afde51',
+ './Zend/Gdata/Gbase/SnippetFeed.php' => 'ffe624be953dea771db41282527cb58e',
+ './Zend/Gdata/Gbase/SnippetEntry.php' => '40a7196df3511ae3ce963d23bc709c6b',
+ './Zend/Gdata/Gbase/Query.php' => '80659494e0a9fcb6215b4c4596609d2f',
+ './Zend/Gdata/Gbase/ItemQuery.php' => 'dd4dc6f47df900fe97254590f7c2d89a',
+ './Zend/Gdata/Gbase/ItemFeed.php' => '4ec749d978812d02e4aa7ea39326d139',
+ './Zend/Gdata/Gbase/ItemEntry.php' => '9f2267926147400f176037cfa47250dc',
+ './Zend/Gdata/Gbase/Feed.php' => 'e56b61fefa051c5596dd107dee255ba5',
+ './Zend/Gdata/Gbase/Extension/BaseAttribute.php' => 'e621931c3a259452fea4edf13431bfd9',
+ './Zend/Gdata/Gbase/Entry.php' => '4f0fd497fa906d00230af75f10b22322',
+ './Zend/Gdata/Gbase.php' => 'b3ee9fb6647e020d710ef1b8fdb7247a',
+ './Zend/Gdata/Gapps/UserQuery.php' => '7cc7cedbf1261c718ec5e9efd2b8e209',
+ './Zend/Gdata/Gapps/UserFeed.php' => '910e7651d59bfcc32aaf8539c01aa11c',
+ './Zend/Gdata/Gapps/UserEntry.php' => 'd4c36359c0de3c0047887cd8e7cc467c',
+ './Zend/Gdata/Gapps/ServiceException.php' => '44bb02fd9c7ee600b2946d4872c48421',
+ './Zend/Gdata/Gapps/Query.php' => '5804bf0e612cccb95fd109dfbc8d990b',
+ './Zend/Gdata/Gapps/OwnerQuery.php' => '2e28da5f124ab4ccdda91cfd69ad65ae',
+ './Zend/Gdata/Gapps/OwnerFeed.php' => '3f73aa0690ecd2bea62d459a86ae6aee',
+ './Zend/Gdata/Gapps/OwnerEntry.php' => 'a283e5d08b9640b1e73634b9eac1242f',
+ './Zend/Gdata/Gapps/NicknameQuery.php' => 'da4a417afde13ce7c511df9faa3c136b',
+ './Zend/Gdata/Gapps/NicknameFeed.php' => '0ecac922acaff29cea48fdea3dfb29f3',
+ './Zend/Gdata/Gapps/NicknameEntry.php' => '381398d8b64c684845bd95f696d38216',
+ './Zend/Gdata/Gapps/MemberQuery.php' => '1655bca8880182513af9eb085de7b05a',
+ './Zend/Gdata/Gapps/MemberFeed.php' => 'f358e81473a4e695fce3cf6001863140',
+ './Zend/Gdata/Gapps/MemberEntry.php' => 'e8fd0a7f5a95697e21424df53c2e26f9',
+ './Zend/Gdata/Gapps/GroupQuery.php' => '86fce715639be938d9eaf926dd20bcfb',
+ './Zend/Gdata/Gapps/GroupFeed.php' => '2303a0202e5ccaaa9a9531cc5de3eac8',
+ './Zend/Gdata/Gapps/GroupEntry.php' => '71a9305f473ebd479141b498a3494866',
+ './Zend/Gdata/Gapps/Extension/Quota.php' => 'd82e3541bbf2d29033963d2c198ab817',
+ './Zend/Gdata/Gapps/Extension/Property.php' => 'ab9b1a604822fd2f50e7eb230e8227f5',
+ './Zend/Gdata/Gapps/Extension/Nickname.php' => 'e858a3eafc46e8ba51de5cbe123a5f6d',
+ './Zend/Gdata/Gapps/Extension/Name.php' => 'f172f52f0db4d0c153205c4e065ea4b2',
+ './Zend/Gdata/Gapps/Extension/Login.php' => 'ea5ef17c68ab4f008200c5ef1c9ba11c',
+ './Zend/Gdata/Gapps/Extension/EmailList.php' => '66888e850a10ddfa540b3cb383556337',
+ './Zend/Gdata/Gapps/Error.php' => 'c7a499123a8aac5ae674582de89409cd',
+ './Zend/Gdata/Gapps/EmailListRecipientQuery.php' => '4fe617162091b96284cf6b30d4f8d45c',
+ './Zend/Gdata/Gapps/EmailListRecipientFeed.php' => '054c494d29479aef7fc90ad72a18c148',
+ './Zend/Gdata/Gapps/EmailListRecipientEntry.php' => '81124d2cbc9bb158df22b9c60ed9abca',
+ './Zend/Gdata/Gapps/EmailListQuery.php' => '11727b5f93fd88982dccc9bffe990661',
+ './Zend/Gdata/Gapps/EmailListFeed.php' => '3a00eea9d8c256ccda9ed2de0c5a0f56',
+ './Zend/Gdata/Gapps/EmailListEntry.php' => '1bb495a41c2e871ff542d2ace03083af',
+ './Zend/Gdata/Gapps.php' => '344bad2ed2ad479a4f57fda1b7b28670',
+ './Zend/Gdata/Feed.php' => '84a86a1adb03cf41a52edfb2f1bbd1a9',
+ './Zend/Gdata/Extension/Who.php' => '68b82339fb38fbd24c46117035604a49',
+ './Zend/Gdata/Extension/Where.php' => '5e3d0267266d786b86a4eb2c3dc6a7be',
+ './Zend/Gdata/Extension/When.php' => 'a58d5c1d94f7c340d5c47d1f153c3ca1',
+ './Zend/Gdata/Extension/Visibility.php' => 'bfcbf78cb8720f7a8eede9897dd4e28d',
+ './Zend/Gdata/Extension/Transparency.php' => '55a3f7b531fbcd1b8fdf217eb24f4b77',
+ './Zend/Gdata/Extension/Reminder.php' => 'e17b2f4ee1e0b2c080e24d9c70f0f526',
+ './Zend/Gdata/Extension/RecurrenceException.php' => '2f229486b249a3ba034dc1922002433e',
+ './Zend/Gdata/Extension/Recurrence.php' => 'd3a85bd86f5761074d663f3404babce4',
+ './Zend/Gdata/Extension/Rating.php' => '402217d483bd62c029be175166b0e0f6',
+ './Zend/Gdata/Extension/OriginalEvent.php' => 'a35914d5d59f8f9286aa816aee6ce058',
+ './Zend/Gdata/Extension/OpenSearchTotalResults.php' => 'bd1fdeec1ad50db6930597f25ac00976',
+ './Zend/Gdata/Extension/OpenSearchStartIndex.php' => 'f537eb3df18a5a2cde301b3b1fe550f7',
+ './Zend/Gdata/Extension/OpenSearchItemsPerPage.php' => 'b2607a72db7ac52eb8384b517d63f132',
+ './Zend/Gdata/Extension/FeedLink.php' => '9228248336b8904d1d0466fdabeb54ec',
+ './Zend/Gdata/Extension/ExtendedProperty.php' => '58ceef287b114ab1dd6c8463026cc389',
+ './Zend/Gdata/Extension/EventStatus.php' => '63dd0b4dc1fd822b792d05c544f41381',
+ './Zend/Gdata/Extension/EntryLink.php' => '133d38758dc1aa4460f42c5f6429bd98',
+ './Zend/Gdata/Extension/Comments.php' => '5284e3c442faa4fd195d2f4e90e734ca',
+ './Zend/Gdata/Extension/AttendeeType.php' => 'b8d7be4de6154f63a908ff36f929d1fb',
+ './Zend/Gdata/Extension/AttendeeStatus.php' => '38ea8daff33ec27ace3e35bb3399aff9',
+ './Zend/Gdata/Extension.php' => 'f4983203262813c5b20be865cd651e60',
+ './Zend/Gdata/Exif/Feed.php' => '8f28a030312f17288dfa452b6535eea1',
+ './Zend/Gdata/Exif/Extension/Time.php' => '2fc3c0a61ad2774cd262dd2eb18925c0',
+ './Zend/Gdata/Exif/Extension/Tags.php' => 'fb41e356cf6d13e718df13308c4977a5',
+ './Zend/Gdata/Exif/Extension/Model.php' => 'e50b5c8c91f132a9688c04979a3a7f2a',
+ './Zend/Gdata/Exif/Extension/Make.php' => '6a73ecf5a9d9f457a1e2105d6becbe04',
+ './Zend/Gdata/Exif/Extension/Iso.php' => '27d57264785569ff25f27b56f0626d28',
+ './Zend/Gdata/Exif/Extension/ImageUniqueId.php' => '2d335e6f555dd161ad56b62cafd227a9',
+ './Zend/Gdata/Exif/Extension/FocalLength.php' => '37e01682a9ba61f4ed6d4f89482442d5',
+ './Zend/Gdata/Exif/Extension/Flash.php' => '47d698699c2a3b38367d40e2c921be7e',
+ './Zend/Gdata/Exif/Extension/FStop.php' => '4048127b24094f8510679c356fb4130b',
+ './Zend/Gdata/Exif/Extension/Exposure.php' => '17a221583b3d9295310a7105f381b14d',
+ './Zend/Gdata/Exif/Extension/Distance.php' => '508d9351f48a0c4b89657252970ed753',
+ './Zend/Gdata/Exif/Entry.php' => 'cf9064fd8345152c90c629a9be667f3c',
+ './Zend/Gdata/Exif.php' => '2307cff4532c815e782d61daab7ea160',
+ './Zend/Gdata/Entry.php' => '9ab68a7da9ab47a8c8ebe09377d7ca6e',
+ './Zend/Gdata/DublinCore/Extension/Title.php' => '4201ad4501a44390d7d20be6e73f55a0',
+ './Zend/Gdata/DublinCore/Extension/Subject.php' => 'e4e3c9fb6b276ac42a74459ff000b4e6',
+ './Zend/Gdata/DublinCore/Extension/Rights.php' => '154e444ee89f1a8b61dbb4574f81812f',
+ './Zend/Gdata/DublinCore/Extension/Publisher.php' => '7b5fbe6b6c8b10a85edd0cd7dbfe7615',
+ './Zend/Gdata/DublinCore/Extension/Language.php' => '68b69a28430e42a2f1939de30c54fd2d',
+ './Zend/Gdata/DublinCore/Extension/Identifier.php' => 'da25ea992cd4591161cf7dcb838f6b81',
+ './Zend/Gdata/DublinCore/Extension/Format.php' => 'f90e804a999bc7ea9de7528f20d7c6b2',
+ './Zend/Gdata/DublinCore/Extension/Description.php' => '2941724eb29ead9b97aa5d487a8d4a97',
+ './Zend/Gdata/DublinCore/Extension/Date.php' => 'f6a1f1f6de749607aefe748c0032f52f',
+ './Zend/Gdata/DublinCore/Extension/Creator.php' => 'd90628cbac0f51ebc078265b77ea2450',
+ './Zend/Gdata/DublinCore.php' => 'b0bac63dc1a6b8cdedf8eb0a614688c3',
+ './Zend/Gdata/Docs/Query.php' => 'd78e6e5d4921f901d42ee1470a0037be',
+ './Zend/Gdata/Docs/DocumentListFeed.php' => '0e1f8bd2edd405a2cc7338398ebc8193',
+ './Zend/Gdata/Docs/DocumentListEntry.php' => 'eca757a3e4835b698ca58ed561c62528',
+ './Zend/Gdata/Docs.php' => 'bf405da462f8af4c2b482e1c396df580',
+ './Zend/Gdata/ClientLogin.php' => '24f07d68ad16d4d76c3ac02b0a172179',
+ './Zend/Gdata/Calendar/ListFeed.php' => '689104be14f604a351305bd4f259534b',
+ './Zend/Gdata/Calendar/ListEntry.php' => 'a703e4f6997b1d2220ea7d8ca71bfeac',
+ './Zend/Gdata/Calendar/Extension/WebContent.php' => 'abc03a658fa837b5da4a16095ddc14be',
+ './Zend/Gdata/Calendar/Extension/Timezone.php' => 'c32233c244828a0a7700c535f48b42e8',
+ './Zend/Gdata/Calendar/Extension/SendEventNotifications.php' => '6016ad8af905ebf27c5362dc6aa3c101',
+ './Zend/Gdata/Calendar/Extension/Selected.php' => 'fb15731ec66ff7140a114a7338c68340',
+ './Zend/Gdata/Calendar/Extension/QuickAdd.php' => '7238895758792d2ac86e5f665a7ac948',
+ './Zend/Gdata/Calendar/Extension/Link.php' => '0537bbcc9a494a46e886807825ac4f54',
+ './Zend/Gdata/Calendar/Extension/Hidden.php' => '3d57e2ec1823f5d8dc40d330670c4b34',
+ './Zend/Gdata/Calendar/Extension/Color.php' => 'e5ed39bd28bfe0068afafae27053483d',
+ './Zend/Gdata/Calendar/Extension/AccessLevel.php' => '77d388464e13fa29d6f3458ee43df6c6',
+ './Zend/Gdata/Calendar/EventQuery.php' => '1b2d94211af1eb3f4d9564a10b26a133',
+ './Zend/Gdata/Calendar/EventFeed.php' => 'f19c9145cf905a1701dadb117a5dbf75',
+ './Zend/Gdata/Calendar/EventEntry.php' => '4bfdcba72023f25ca41fef5d91a75073',
+ './Zend/Gdata/Calendar.php' => '4f403359ac413aea1fc8f6a24a627abc',
+ './Zend/Gdata/Books/VolumeQuery.php' => 'b976b6765a2e6df2c309db22b5e76160',
+ './Zend/Gdata/Books/VolumeFeed.php' => 'b8ff187c65a5fe2bf5ce990c18e44da9',
+ './Zend/Gdata/Books/VolumeEntry.php' => '0f837082c8fa04eaa220a9a951430869',
+ './Zend/Gdata/Books/Extension/Viewability.php' => 'f70735b6816c819338289cd5bac08364',
+ './Zend/Gdata/Books/Extension/ThumbnailLink.php' => 'cacfc1c756c927ef1ddeb5d9045534e4',
+ './Zend/Gdata/Books/Extension/Review.php' => '27afeb43e74846d178909d0300db6735',
+ './Zend/Gdata/Books/Extension/PreviewLink.php' => 'a3ce28689c7a7918a3e5699dea2545f3',
+ './Zend/Gdata/Books/Extension/InfoLink.php' => 'f87cad2a8305227311a44158f06c93f7',
+ './Zend/Gdata/Books/Extension/Embeddability.php' => '8b23184acfcf1d95e3eb35f7ae319c82',
+ './Zend/Gdata/Books/Extension/BooksLink.php' => '615384af3b31d3b54e3088e0d7ce4fe5',
+ './Zend/Gdata/Books/Extension/BooksCategory.php' => '1be9d61273496693c7c2b082184f0812',
+ './Zend/Gdata/Books/Extension/AnnotationLink.php' => '82f10d58503d6efac755aaebbe89e6e2',
+ './Zend/Gdata/Books/CollectionFeed.php' => '06ba2427be03e2b6ffddecde3abc1f19',
+ './Zend/Gdata/Books/CollectionEntry.php' => '62d3b17fce4c075fe1fbe88e8b85cab3',
+ './Zend/Gdata/Books.php' => '19e28ddea7b1e4e528783f72f160d9f3',
+ './Zend/Gdata/AuthSub.php' => '10bc8d63c7d29afea2a64816ef40be42',
+ './Zend/Gdata/App/VersionException.php' => 'f79b340a6e76df8235e8936cf1f6dea8',
+ './Zend/Gdata/App/Util.php' => '4f0103d76da6c1df3b5446d1d4cab1aa',
+ './Zend/Gdata/App/MediaSource.php' => 'd66435bd23f29c74d16a97ef7bd3c237',
+ './Zend/Gdata/App/MediaFileSource.php' => '228605cfbe7bd1a56ce499948cffc44f',
+ './Zend/Gdata/App/MediaEntry.php' => 'e604853b65b83ff22b67aa42333b1470',
+ './Zend/Gdata/App/LoggingHttpClientAdapterSocket.php' => '80a5cfc9e2d5228d34a83728589c375c',
+ './Zend/Gdata/App/InvalidArgumentException.php' => '7d25d4e28c5716d5a623f69e3f34f1d5',
+ './Zend/Gdata/App/IOException.php' => 'a7c6b306054e4393868b4c3abfee4cb3',
+ './Zend/Gdata/App/HttpException.php' => '6eaf643eed81a95a0185f09597ab598c',
+ './Zend/Gdata/App/FeedSourceParent.php' => '4b2310f917e8942d5f6ab6322a7980b6',
+ './Zend/Gdata/App/FeedEntryParent.php' => 'ee305afd397993b2668272e75aa20609',
+ './Zend/Gdata/App/Feed.php' => 'dd719b4feb53568fdad80ccef14d557d',
+ './Zend/Gdata/App/Extension/Uri.php' => '493b2a3364cbf5ebe297a548b6f3a0a5',
+ './Zend/Gdata/App/Extension/Updated.php' => '3f4da2bf87a0c81b7c9f12656e6c1c37',
+ './Zend/Gdata/App/Extension/Title.php' => '48de3c92ebb8e5fbf923ea43ae0a748f',
+ './Zend/Gdata/App/Extension/Text.php' => 'c6b9d3a8870ed4540a133455fcd43be6',
+ './Zend/Gdata/App/Extension/Summary.php' => '1c5fdc5ace6f74e7e8d8d5ade87a695f',
+ './Zend/Gdata/App/Extension/Subtitle.php' => 'e3e62bb19d1d5ca2a854234a7ff3f8bc',
+ './Zend/Gdata/App/Extension/Source.php' => 'c0552deee4ae8ec73cfb237d759999ad',
+ './Zend/Gdata/App/Extension/Rights.php' => 'c623ecc998bbed7e7c52571b37a27c3c',
+ './Zend/Gdata/App/Extension/Published.php' => 'c2c0fa40b7c7e9c858bf978edd5a0381',
+ './Zend/Gdata/App/Extension/Person.php' => '4958e01b770f9238e38863b887c0ed77',
+ './Zend/Gdata/App/Extension/Name.php' => '7d03477dbe90f4484e5477b690a3320f',
+ './Zend/Gdata/App/Extension/Logo.php' => '3433509934553948b86bda803ee38c99',
+ './Zend/Gdata/App/Extension/Link.php' => '16a58f5e61a5cc943ec03115c7fc739b',
+ './Zend/Gdata/App/Extension/Id.php' => 'b5bc2ae8e3e0a762fcb353ea3437ef4e',
+ './Zend/Gdata/App/Extension/Icon.php' => '231765bce9ed753dce83c97c5cc3944c',
+ './Zend/Gdata/App/Extension/Generator.php' => '9b1965c558067f31358616766de1aa00',
+ './Zend/Gdata/App/Extension/Email.php' => '6af7122bfdf49aea8b261a81cae56e05',
+ './Zend/Gdata/App/Extension/Element.php' => 'e985283b1b696bfb0d326f08fd19d8ad',
+ './Zend/Gdata/App/Extension/Edited.php' => '330aa08d5ca463aa359af76e5f5b17fa',
+ './Zend/Gdata/App/Extension/Draft.php' => '99ebe71f8b8b3fd840a181a24c08ae60',
+ './Zend/Gdata/App/Extension/Control.php' => 'be358f494629721b7c2d3f34d619bdb6',
+ './Zend/Gdata/App/Extension/Contributor.php' => '52b7be7179f68bd41e8033c7c61de368',
+ './Zend/Gdata/App/Extension/Content.php' => 'dc5f2ed1b1471d8bf26a4a3a083c2e9e',
+ './Zend/Gdata/App/Extension/Category.php' => 'e799a0a6548ddfefa0cc14f7c8ff8d1c',
+ './Zend/Gdata/App/Extension/Author.php' => 'd565809e5cd9f16f4b27c5384d8c5dfb',
+ './Zend/Gdata/App/Extension.php' => '8e4d504243e904fb21896e5aaa41e986',
+ './Zend/Gdata/App/Exception.php' => '83d110552e64d66b3e658f53011d1dfe',
+ './Zend/Gdata/App/Entry.php' => '133cf11a6726a895c2a570b51aeeeab4',
+ './Zend/Gdata/App/CaptchaRequiredException.php' => '654404b4361bcefcaacb2895199c3ce6',
+ './Zend/Gdata/App/BaseMediaSource.php' => 'f03d9750e70786156510a6bbf035e50d',
+ './Zend/Gdata/App/Base.php' => '0812ad5e71d4da23e6dac0b174d72dac',
+ './Zend/Gdata/App/BadMethodCallException.php' => '7d6e59e67eddf8e29065a07bfafbfbb1',
+ './Zend/Gdata/App/AuthException.php' => 'b71068b440931bf94ce5c8a1bc1c0963',
+ './Zend/Gdata/App.php' => '040846a1bbf23b95286b6ce6d92f11e8',
+ './Zend/Gdata.php' => 'c3979fa5ca85014295e6f78333ade8b4',
+ './Zend/Exception.php' => '55ee8977abba3e9c8c56937432434c4c',
+ './Zend/Crypt/Rsa/Key/Public.php' => 'bab2f532d07354d76d66ea559ce8cf91',
+ './Zend/Crypt/Rsa/Key/Private.php' => 'fa5a88c09c54728381b80ab7f2d1f515',
+ './Zend/Crypt/Rsa/Key.php' => '74438b6cecba7b323f86817c06bbd5e9',
+ './Zend/Crypt/Rsa.php' => 'c1b32cc26f5a09dccfae97c4b8a4aab0',
+ './Zend/Crypt/Math/Exception.php' => 'fa1df64deb5a50dba4b2291087ce73c4',
+ './Zend/Crypt/Math/BigInteger/Interface.php' => 'ddfb6e640c5e8e70c0145265c6766827',
+ './Zend/Crypt/Math/BigInteger/Gmp.php' => '961c30bc8a8a1fa5c0639bae35c96c8b',
+ './Zend/Crypt/Math/BigInteger/Exception.php' => '2abd4617fbef3a5707d674395aa54f17',
+ './Zend/Crypt/Math/BigInteger/Bcmath.php' => '711aca90da8cb203310549c16a40569a',
+ './Zend/Crypt/Math/BigInteger.php' => '4e83a33b019afde2b3f465078da98ae1',
+ './Zend/Crypt/Math.php' => '34803bb199f584d0ddb40c6b10c6926d',
+ './Zend/Crypt/Hmac/Exception.php' => '0f5e7197d44598e88b0f3c4bc76ce548',
+ './Zend/Crypt/Hmac.php' => '263965ebc65320101b7b812674d27c35',
+ './Zend/Crypt/Exception.php' => '1259690d0861934b9aec872583cb77b4',
+ './Zend/Crypt/DiffieHellman/Exception.php' => '767330f408c58b089aa082d990b73099',
+ './Zend/Crypt/DiffieHellman.php' => 'ec0a4f522b732f7fcbb9c4ab94d926e1',
+ './Zend/Crypt.php' => '0e72fd104506094fd2c7682b0b924542',
+ './install.php' => '53a5f32608389deae7fb6d57b552b39e',
+ './export.php' => '4d3cf3590901a87b525fd340238e7556',
+ './data/upload/index.html' => '9cd784063d39b18d308932c28c385853',
+ './data/Tracker.php' => '29c14ab7333e8d37a7ff77fe42b516bd',
+ './data/SugarBean.php' => '7fb508b71a67ee4f25b80dc4502e84b5',
+ './data/Link.php' => '06d9fa82aa3f1f4d2a3ab563174dab60',
+ './custom/index.html' => 'b0070a296647b6026d1800db14510e3c',
+ './cron.php' => 'a8ad27b49bafc80799a504760c007bdd',
+ './campaign_trackerv2.php' => 'e1420743b082e8191b7e231db0810d0e',
+ './campaign_tracker.php' => '1ae8d86945943738da6a2bc2e8bcdbb9',
+ './cache/xml/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/upload/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/pdf/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/layout/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/index.html' => '330a1eedb7f47535b37c1159ef805ec1',
+ './cache/import/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/images/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/feeds/index.html' => '9cd784063d39b18d308932c28c385853',
+ './cache/csv/index.html' => '9cd784063d39b18d308932c28c385853',
+ './acceptDecline.php' => '5333056512e0bfcf3249b5ffb96a5189',
+ './XTemplate/xtpl.php' => '7428c503e8fc3de9ff1e26ff8095b441',
+ './XTemplate/LICENSE' => '8c2e1ec1540fb3e0beb68361344cba7e',
+ './WebToLeadCapture.php' => 'e78cc96ab80dad03479a72eb439e60b5',
+ './TreeData.php' => '93ba2c53f2781017b5b0f2f962c398f4',
+ './SugarSecurity.php' => '4d8d0d7caf9aa942ff0f7ab61b8bfaae',
+ './ModuleInstall/PackageManager/tpls/PackageManagerScripts.tpl' => '1a32055544e7142252c7335e3e10d60f',
+ './ModuleInstall/PackageManager/tpls/PackageManagerLicense.tpl' => '89219bcdad610f475111c9d19c524df7',
+ './ModuleInstall/PackageManager/tpls/PackageForm.tpl' => '6a286fef17f4ad90cce0aaca456e47d2',
+ './ModuleInstall/PackageManager/tpls/ModuleLoaderListView.tpl' => '89644c510ea26bc19a338a9039fd14c5',
+ './ModuleInstall/PackageManager/metadata/listviewdefs.php' => 'e5a304b0e3f59b9655fee84251f859ad',
+ './ModuleInstall/PackageManager/PackageManagerDownloader.php' => '4b7278a48d4f5924ccab01fa79244e22',
+ './ModuleInstall/PackageManager/PackageManagerDisplay.php' => '26df5fc37509ae7a4fe28b1f424096c6',
+ './ModuleInstall/PackageManager/PackageManagerComm.php' => 'd9e4d2d8af57cc28fa6e57cf01eb1e68',
+ './ModuleInstall/PackageManager/PackageManager.php' => 'a47fe97c2797785e179b781744a3ed92',
+ './ModuleInstall/PackageManager/PackageController.php' => '5a41f4e7bb19d5585e4b694be0691bed',
+ './ModuleInstall/PackageManager/ListViewPackages.php' => '9cb9a457724974797f68f6e5bd094842',
+ './ModuleInstall/ModuleScanner.php' => '533ad4511f2d9d521cb30ac7c10c48f1',
+ './ModuleInstall/ModuleInstaller.php' => '3445fef26e0ea0d86f0b93e97bf6ec26',
+ './HandleAjaxCall.php' => '7c97cd2c9be97a8fd845fe4706a65f1c',
+);
+?>
diff --git a/image.php b/image.php
new file mode 100644
index 00000000..13de2f4e
--- /dev/null
+++ b/image.php
@@ -0,0 +1,46 @@
+
diff --git a/include/Dashlets/Dashlet.php b/include/Dashlets/Dashlet.php
new file mode 100644
index 00000000..0032b6d8
--- /dev/null
+++ b/include/Dashlets/Dashlet.php
@@ -0,0 +1,378 @@
+id = $id;
+ }
+
+ /**
+ * Returns the HTML for the configure icon
+ *
+ * @return string HTML
+ */
+ public function setConfigureIcon()
+ {
+ if($this->isConfigurable) {
+ $additionalTitle = ' ';
+ return $additionalTitle;
+ }
+
+ /**
+ * @deprecated No longer needed, replaced with Dashlet::getHeader() and Dashlet::getFooter()
+ *
+ * @param string $text
+ * @return string HTML
+ */
+ public function getTitle($text = '')
+ {
+ return '';
+ }
+
+ /**
+ * Called when Dashlet is displayed
+ *
+ * @param string $text text after the title
+ * @return string Header html
+ */
+ public function getHeader($text = '')
+ {
+ global $sugar_config;
+
+ $title = '' . $text . ' ';
+ $title .= $this->setConfigureIcon();
+ $title .= $this->setRefreshIcon();
+ $title .= $this->setDeleteIcon();
+
+ $str = 'id . '" class="hd">
' . get_form_header($this->title, $title, false) . '
';
+
+ return $str;
+ }
+
+ /**
+ * Called when Dashlet is displayed
+ *
+ * @return string footer HTML
+ */
+ public function getFooter()
+ {
+ $footer = '
';
+
+ return $footer;
+ }
+
+ /**
+ * Called when Dashlet is displayed, override this
+ *
+ * @param string $text text after the title
+ * @return string title HTML
+ */
+ public function display($text = '')
+ {
+ return '';
+ }
+
+ /**
+ * Called when Dashlets configuration options are called
+ */
+ public function displayOptions()
+ {
+ }
+
+ /**
+ * Override if you need to do pre-processing before display is called
+ */
+ public function process()
+ {
+ }
+
+ /**
+ * Processes and displays the auto refresh code for the dashlet
+ *
+ * @param int $dashletOffset
+ * @return string HTML code
+ */
+ protected function processAutoRefresh($dashletOffset = 0)
+ {
+ global $sugar_config;
+
+ if ( empty($dashletOffset) ) {
+ $dashletOffset = 0;
+ $module = $_REQUEST['module'];
+ if(isset($_REQUEST[$module.'2_'.strtoupper($this->seedBean->object_name).'_offset'])) {
+ $dashletOffset = $_REQUEST[$module.'2_'.strtoupper($this->seedBean->object_name).'_offset'];
+ }
+ }
+
+ if ( !$this->isRefreshable ) {
+ return '';
+ }
+ if ( !empty($sugar_config['dashlet_auto_refresh_min']) && $sugar_config['dashlet_auto_refresh_min'] == -1 ) {
+ return '';
+ }
+ $autoRefreshSS = new Sugar_Smarty();
+ $autoRefreshSS->assign('dashletOffset', $dashletOffset);
+ $autoRefreshSS->assign('dashletId', $this->id);
+ $autoRefreshSS->assign('strippedDashletId', str_replace("-","",$this->id)); //javascript doesn't like "-" in function names
+ if ( empty($this->autoRefresh) ) {
+ $this->autoRefresh = 0;
+ }
+ elseif ( !empty($sugar_config['dashlet_auto_refresh_min']) ) {
+ $this->autoRefresh = min($sugar_config['dashlet_auto_refresh_min'],$this->autoRefresh);
+ }
+ $autoRefreshSS->assign('dashletRefreshInterval', $this->autoRefresh * 1000);
+ $tpl = 'include/Dashlets/DashletGenericAutoRefresh.tpl';
+ if ( $_REQUEST['action'] == "DynamicAction" ) {
+ $tpl = 'include/Dashlets/DashletGenericAutoRefreshDynamic.tpl';
+ }
+
+ return $autoRefreshSS->fetch($tpl);
+ }
+
+ /**
+ * Override this if your dashlet is configurable (this is called when the the configureDashlet form is shown)
+ * Filters the array for only the parameters it needs to save
+ *
+ * @param array $req the array to pull options from
+ * @return array options array
+ */
+ public function saveOptions($req)
+ {
+ }
+
+ /**
+ * Sets the language strings
+ *
+ * @param string $dashletClassname classname of the dashlet
+ * @param string $dashletDirectory directory path of the dashlet
+ */
+ public function loadLanguage($dashletClassname, $dashletDirectory = 'modules/Home/Dashlets/')
+ {
+ global $current_language, $dashletStrings;
+
+ if(!isset($dashletStrings[$dashletClassname])) {
+ // load current language strings for current language, else default to english
+ if(is_file($dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.' . $current_language . '.lang.php')
+ || is_file('custom/' . $dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.' . $current_language . '.lang.php') ) {
+ if(is_file($dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.' . $current_language . '.lang.php')) {
+ require($dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.' . $current_language . '.lang.php');
+ }
+ if(is_file('custom/' . $dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.' . $current_language . '.lang.php')) {
+ require('custom/' . $dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.' . $current_language . '.lang.php');
+ }
+ }
+ else {
+ if(is_file($dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.en_us.lang.php')) {
+ require($dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.en_us.lang.php');
+ }
+ if(is_file('custom/' . $dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.en_us.lang.php')) {
+ require('custom/' . $dashletDirectory . $dashletClassname . '/' . $dashletClassname . '.en_us.lang.php');
+ }
+ }
+ }
+
+ $this->dashletStrings = $dashletStrings[$dashletClassname];
+ }
+
+ /**
+ * Generic way to store an options array into UserPreferences
+ *
+ * @param array $optionsArray the array to save
+ */
+ public function storeOptions($optionsArray)
+ {
+ global $current_user;
+
+ $dashletDefs = $current_user->getPreference('dashlets', 'Home'); // load user's dashlets config
+ $dashletDefs[$this->id]['options'] = $optionsArray;
+ $current_user->setPreference('dashlets', $dashletDefs, 0, 'Home');
+ }
+
+ /**
+ * Generic way to retrieve options array from UserPreferences
+ *
+ * @return array options array stored in UserPreferences
+ */
+ public function loadOptions()
+ {
+ global $current_user;
+
+ $dashletDefs = $current_user->getPreference('dashlets', 'Home'); // load user's dashlets config
+ if(isset($dashletDefs[$this->id]['options']))
+ return $dashletDefs[$this->id]['options'];
+ else
+ return array();
+ }
+
+ /**
+ * Override this in the subclass. It is used to determine whether the dashlet can be displayed.
+ *
+ * @return bool indicating whether or not the current user has access to display this Dashlet.
+ */
+ public function hasAccess()
+ {
+ return true;
+ }
+
+ /**
+ * Returns the available auto refresh settings you can set a dashlet to
+ *
+ * @return array options available
+ */
+ protected function getAutoRefreshOptions()
+ {
+ $options = $GLOBALS['app_list_strings']['dashlet_auto_refresh_options'];
+
+ if ( isset($GLOBALS['sugar_config']['dashlet_auto_refresh_min']) ) {
+ foreach ( $options as $time => $desc ) {
+ if ( $time != -1 && $time < $GLOBALS['sugar_config']['dashlet_auto_refresh_min'] ) {
+ unset($options[$time]);
+ }
+ }
+ }
+
+ return $options;
+ }
+
+ /**
+ * Returns true if the dashlet is auto refreshable
+ *
+ * @return bool
+ */
+ protected function isAutoRefreshable()
+ {
+ return $this->isRefreshable &&
+ ( isset($GLOBALS['sugar_config']['dashlet_auto_refresh_min']) ?
+ $GLOBALS['sugar_config']['dashlet_auto_refresh_min'] != -1 : true );
+ }
+}
\ No newline at end of file
diff --git a/include/Dashlets/DashletCacheBuilder.php b/include/Dashlets/DashletCacheBuilder.php
new file mode 100644
index 00000000..592ed5e1
--- /dev/null
+++ b/include/Dashlets/DashletCacheBuilder.php
@@ -0,0 +1,88 @@
+ $file) {
+ if(substr_count($file, '.meta') == 0) { // ignore meta data files
+ $class = substr($file, strrpos($file, '/') + 1, -4);
+ $dashletFiles[$class] = array();
+ $dashletFiles[$class]['file'] = $file;
+ $dashletFiles[$class]['class'] = $class;
+ if(is_file(preg_replace('/(.*\/.*)(\.php)/Uis', '$1.meta$2', $file))) { // is there an associated meta data file?
+ $dashletFiles[$class]['meta'] = preg_replace('/(.*\/.*)(\.php)/Uis', '$1.meta$2', $file);
+ require($dashletFiles[$class]['meta']);
+ if ( isset($dashletMeta[$class]['module']) )
+ $dashletFiles[$class]['module'] = $dashletMeta[$class]['module'];
+ }
+
+ $filesInDirectory = array();
+ getFiles($filesInDirectory, substr($file, 0, strrpos($file, '/')), '/^.*\/Dashlets\/[^\.]*\.icon\.(jpg|jpeg|gif|png)$/i');
+ if(!empty($filesInDirectory)) {
+ $dashletFiles[$class]['icon'] = $filesInDirectory[0]; // take the first icon we see
+ }
+ }
+ }
+
+ write_array_to_file('dashletsFiles', $dashletFiles, $cacheDir . 'dashlets.php');
+ }
+}
+?>
\ No newline at end of file
diff --git a/include/Dashlets/DashletGeneric.php b/include/Dashlets/DashletGeneric.php
new file mode 100644
index 00000000..ab9a509c
--- /dev/null
+++ b/include/Dashlets/DashletGeneric.php
@@ -0,0 +1,506 @@
+isConfigurable = true;
+ if(isset($options)) {
+ if(!empty($options['filters'])) $this->filters = $options['filters'];
+ if(!empty($options['title'])) $this->title = $options['title'];
+ if(!empty($options['displayRows'])) $this->displayRows = $options['displayRows'];
+ if(!empty($options['displayColumns'])) $this->displayColumns = $options['displayColumns'];
+ if(isset($options['myItemsOnly'])) $this->myItemsOnly = $options['myItemsOnly'];
+ if(isset($options['autoRefresh'])) $this->autoRefresh = $options['autoRefresh'];
+ }
+
+ $this->layoutManager = new LayoutManager();
+ $this->layoutManager->setAttribute('context', 'Report');
+ // fake a reporter object here just to pass along the db type used in many widgets.
+ // this should be taken out when sugarwidgets change
+ $temp = (object) array('db' => &$GLOBALS['db'], 'report_def_str' => '');
+ $this->layoutManager->setAttributePtr('reporter', $temp);
+ $this->lvs = new ListViewSmarty();
+ }
+
+ /**
+ * Sets up the display options template
+ *
+ * @return string HTML that shows options
+ */
+ function processDisplayOptions() {
+ require_once('include/templates/TemplateGroupChooser.php');
+
+ $this->configureSS = new Sugar_Smarty();
+ // column chooser
+ $chooser = new TemplateGroupChooser();
+
+ $chooser->args['id'] = 'edit_tabs';
+ $chooser->args['left_size'] = 5;
+ $chooser->args['right_size'] = 5;
+ $chooser->args['values_array'][0] = array();
+ $chooser->args['values_array'][1] = array();
+
+ $this->loadCustomMetadata();
+ // Bug 39517 - Don't add custom fields automatically to the available fields to display in the listview
+ //$this->addCustomFields();
+ if($this->displayColumns) {
+ // columns to display
+ foreach($this->displayColumns as $num => $name) {
+ // defensive code for array being returned
+ $translated = translate($this->columns[$name]['label'], $this->seedBean->module_dir);
+ if(is_array($translated)) $translated = $this->columns[$name]['label'];
+ $chooser->args['values_array'][0][$name] = trim($translated, ':');
+ }
+ // columns not displayed
+ foreach(array_diff(array_keys($this->columns), array_values($this->displayColumns)) as $num => $name) {
+ // defensive code for array being returned
+ $translated = translate($this->columns[$name]['label'], $this->seedBean->module_dir);
+ if(is_array($translated)) $translated = $this->columns[$name]['label'];
+ $chooser->args['values_array'][1][$name] = trim($translated, ':');
+ }
+ }
+ else {
+ foreach($this->columns as $name => $val) {
+ // defensive code for array being returned
+ $translated = translate($this->columns[$name]['label'], $this->seedBean->module_dir);
+ if(is_array($translated)) $translated = $this->columns[$name]['label'];
+ if(!empty($val['default']) && $val['default'])
+ $chooser->args['values_array'][0][$name] = trim($translated, ':');
+ else
+ $chooser->args['values_array'][1][$name] = trim($translated, ':');
+ }
+ }
+
+ $chooser->args['left_name'] = 'display_tabs';
+ $chooser->args['right_name'] = 'hide_tabs';
+ $chooser->args['max_left'] = '6';
+
+ $chooser->args['left_label'] = $GLOBALS['app_strings']['LBL_DISPLAY_COLUMNS'];
+ $chooser->args['right_label'] = $GLOBALS['app_strings']['LBL_HIDE_COLUMNS'];
+ $chooser->args['title'] = '';
+ $this->configureSS->assign('columnChooser', $chooser->display());
+
+ $query = false;
+ $count = 0;
+
+ if(!is_array($this->filters)) {
+ // use default search params
+ $this->filters = array();
+ foreach($this->searchFields as $name => $params) {
+ if(!empty($params['default']))
+ $this->filters[$name] = $params['default'];
+ }
+ }
+ foreach($this->searchFields as $name=>$params) {
+ if(!empty($name)) {
+ $name = strtolower($name);
+ $currentSearchFields[$name] = array();
+ $widgetDef = $this->seedBean->field_defs[$name];
+ if($widgetDef['type'] == 'enum') $widgetDef['remove_blank'] = true; // remove the blank option for the dropdown
+ if($widgetDef['name'] == 'assigned_user_name') $widgetDef['name'] = 'assigned_user_id';
+ $widgetDef['input_name0'] = empty($this->filters[$name]) ? '' : $this->filters[$name];
+ $currentSearchFields[$name]['label'] = !empty($params['label']) ? translate($params['label'], $this->seedBean->module_dir) : translate($widgetDef['vname'], $this->seedBean->module_dir);
+ $currentSearchFields[$name]['input'] = $this->layoutManager->widgetDisplayInput($widgetDef, true, (empty($this->filters[$name]) ? '' : $this->filters[$name]));
+ }
+ else { // ability to create spacers in input fields
+ $currentSearchFields['blank' + $count]['label'] = '';
+ $currentSearchFields['blank' + $count]['input'] = '';
+ $count++;
+ }
+ }
+ $this->currentSearchFields = $currentSearchFields;
+
+ $this->configureSS->assign('strings', array('general' => $GLOBALS['mod_strings']['LBL_DASHLET_CONFIGURE_GENERAL'],
+ 'filters' => $GLOBALS['mod_strings']['LBL_DASHLET_CONFIGURE_FILTERS'],
+ 'myItems' => $GLOBALS['mod_strings']['LBL_DASHLET_CONFIGURE_MY_ITEMS_ONLY'],
+ 'displayRows' => $GLOBALS['mod_strings']['LBL_DASHLET_CONFIGURE_DISPLAY_ROWS'],
+ 'title' => $GLOBALS['mod_strings']['LBL_DASHLET_CONFIGURE_TITLE'],
+ 'save' => $GLOBALS['app_strings']['LBL_SAVE_BUTTON_LABEL'],
+ 'autoRefresh' => $GLOBALS['app_strings']['LBL_DASHLET_CONFIGURE_AUTOREFRESH'],
+ ));
+ $this->configureSS->assign('id', $this->id);
+ $this->configureSS->assign('showMyItemsOnly', $this->showMyItemsOnly);
+ $this->configureSS->assign('myItemsOnly', $this->myItemsOnly);
+ $this->configureSS->assign('searchFields', $this->currentSearchFields);
+ // title
+ $this->configureSS->assign('dashletTitle', $this->title);
+
+ // display rows
+ $displayRowOptions = $GLOBALS['sugar_config']['dashlet_display_row_options'];
+ $this->configureSS->assign('displayRowOptions', $displayRowOptions);
+ $this->configureSS->assign('displayRowSelect', $this->displayRows);
+
+ if($this->isAutoRefreshable()) {
+ $this->configureSS->assign('isRefreshable', true);
+ $this->configureSS->assign('autoRefreshOptions', $this->getAutoRefreshOptions());
+ $this->configureSS->assign('autoRefreshSelect', $this->autoRefresh);
+ }
+ }
+ /**
+ * Displays the options for this Dashlet
+ *
+ * @return string HTML that shows options
+ */
+ function displayOptions() {
+ $this->processDisplayOptions();
+ return parent::displayOptions() . $this->configureSS->fetch($this->configureTpl);
+ }
+
+ function buildWhere() {
+ global $current_user;
+
+ $returnArray = array();
+
+ if(!is_array($this->filters)) {
+ // use defaults
+ $this->filters = array();
+ foreach($this->searchFields as $name => $params) {
+ if(!empty($params['default']))
+ $this->filters[$name] = $params['default'];
+ }
+ }
+ foreach($this->filters as $name=>$params) {
+ if(!empty($params)) {
+ if($name == 'assigned_user_id' && $this->myItemsOnly) continue; // don't handle assigned user filter if filtering my items only
+ $widgetDef = $this->seedBean->field_defs[$name];
+
+ $widgetClass = $this->layoutManager->getClassFromWidgetDef($widgetDef, true);
+ $widgetDef['table'] = $this->seedBean->table_name;
+ $widgetDef['table_alias'] = $this->seedBean->table_name;
+ if(!empty($widgetDef['source']) && $widgetDef['source'] == 'custom_fields'){
+ $widgetDef['table'] = $this->seedBean->table_name."_cstm";
+ $widgetDef['table_alias'] = $widgetDef['table'];
+ }
+ switch($widgetDef['type']) {// handle different types
+ case 'date':
+ case 'datetime':
+ case 'datetimecombo':
+ if(is_array($params) && !empty($params)) {
+ if(!empty($params['date']))
+ $widgetDef['input_name0'] = $params['date'];
+ $filter = 'queryFilter' . $params['type'];
+ }
+ else {
+ $filter = 'queryFilter' . $params;
+ }
+ array_push($returnArray, $widgetClass->$filter($widgetDef, true));
+ break;
+ case 'assigned_user_name':
+ // This type runs through the SugarWidgetFieldname class, and needs a little extra help to make it through
+ if ( ! isset($widgetDef['column_key']) ) {
+ $widgetDef['column_key'] = $name;
+ }
+ // No break here, we want to run through the default handler
+ default:
+ $widgetDef['input_name0'] = $params;
+ if(is_array($params) && !empty($params)) { // handle array query
+ array_push($returnArray, $widgetClass->queryFilterone_of($widgetDef, false));
+ }
+ else {
+ array_push($returnArray, $widgetClass->queryFilterStarts_With($widgetDef, true));
+ }
+ $widgetDef['input_name0'] = $params;
+ break;
+ }
+ }
+ }
+
+ if($this->myItemsOnly) array_push($returnArray, $this->seedBean->table_name . '.' . "assigned_user_id = '" . $current_user->id . "'");
+
+ return $returnArray;
+ }
+
+ protected function loadCustomMetadata()
+ {
+ $customMetadate = 'custom/modules/'.$this->seedBean->module_dir.'/metadata/dashletviewdefs.php';
+ if ( file_exists ( $customMetadate )){
+ require($customMetadate);
+ $this->searchFields = $dashletData[$this->seedBean->module_dir.'Dashlet']['searchFields'];
+ foreach($this->searchFields as $key =>$def){
+ if($key == 'assigned_user_name'){
+ $this->searchFields['assigned_user_id'] = $def;
+ unset($this->searchFields['assigned_user_name'] );
+ break;
+ }
+ }
+
+ $this->columns = $dashletData[$this->seedBean->module_dir.'Dashlet']['columns'];
+ }
+ }
+
+ /**
+ * Does all dashlet processing, here's your chance to modify the rows being displayed!
+ */
+ function process($lvsParams = array()) {
+ $currentSearchFields = array();
+ $configureView = true; // configure view or regular view
+ $query = false;
+ $whereArray = array();
+ $lvsParams['massupdate'] = false;
+
+ $this->loadCustomMetadata();
+ $this->addCustomFields();
+ // apply filters
+ if(isset($this->filters) || $this->myItemsOnly) {
+ $whereArray = $this->buildWhere();
+ }
+
+ $this->lvs->export = false;
+ $this->lvs->multiSelect = false;
+ // columns
+ $displayColumns = array();
+ if(!empty($this->displayColumns)) { // use user specified columns
+ foreach($this->displayColumns as $name => $val) {
+ $displayColumns[strtoupper($val)] = $this->columns[$val];
+ $displayColumns[strtoupper($val)]['label'] = trim($displayColumns[strtoupper($val)]['label'], ':');// strip : at the end of headers
+ }
+ }
+ else if (isset($this->columns)){
+ // use the default
+ foreach($this->columns as $name => $val) {
+ if(!empty($val['default']) && $val['default']) {
+ $displayColumns[strtoupper($name)] = $val;
+ $displayColumns[strtoupper($name)]['label'] = trim($displayColumns[strtoupper($name)]['label'], ':');
+ }
+ }
+ }
+ $this->lvs->displayColumns = $displayColumns;
+
+
+ $this->lvs->lvd->setVariableName($this->seedBean->object_name, array());
+ $lvdOrderBy = $this->lvs->lvd->getOrderBy(); // has this list been ordered, if not use default
+
+ $nameRelatedFields = array();
+ if(empty($lvdOrderBy['orderBy'])) {
+ foreach($displayColumns as $colName => $colParams) {
+ if(!empty($colParams['defaultOrderColumn'])) {
+ $lvsParams['overrideOrder'] = true;
+ $lvsParams['orderBy'] = $colName;
+ $lvsParams['sortOrder'] = $colParams['defaultOrderColumn']['sortOrder'];
+ }
+ }
+ }
+ // Check for 'last_name' column sorting with related fields (last_name, first_name)
+ // See ListViewData.php for actual sorting change.
+ if ($lvdOrderBy['orderBy'] == 'last_name' && !empty($displayColumns['NAME']) && !empty($displayColumns['NAME']['related_fields']) &&
+ in_array('last_name', $displayColumns['NAME']['related_fields']) &&
+ in_array('first_name', $displayColumns['NAME']['related_fields'])) {
+ $lvsParams['overrideLastNameOrder'] = true;
+ }
+
+ if(!empty($this->displayTpl))
+ {
+ //MFH BUG #14296
+ $where = '';
+ if(!empty($whereArray)){
+ $where = '(' . implode(') AND (', $whereArray) . ')';
+ }
+ $this->lvs->setup($this->seedBean, $this->displayTpl, $where , $lvsParams, 0, $this->displayRows/*, $filterFields*/);
+ if(in_array('CREATED_BY', array_keys($displayColumns))) { // handle the created by field
+ foreach($this->lvs->data['data'] as $row => $data) {
+ $this->lvs->data['data'][$row]['CREATED_BY'] = get_assigned_user_name($data['CREATED_BY']);
+ }
+ }
+ // assign a baseURL w/ the action set as DisplayDashlet
+ foreach($this->lvs->data['pageData']['urls'] as $type => $url) {
+ // awu Replacing action=DisplayDashlet with action=DynamicAction&DynamicAction=DisplayDashlet
+ if($type == 'orderBy')
+ $this->lvs->data['pageData']['urls'][$type] = preg_replace('/(action=.*&)/Ui', 'action=DynamicAction&DynamicAction=displayDashlet&', $url);
+ else
+ $this->lvs->data['pageData']['urls'][$type] = preg_replace('/(action=.*&)/Ui', 'action=DynamicAction&DynamicAction=displayDashlet&', $url) . '&sugar_body_only=1&id=' . $this->id;
+ }
+
+ $this->lvs->ss->assign('dashletId', $this->id);
+ }
+ }
+
+ /**
+ * Displays the Dashlet, must call process() prior to calling this
+ *
+ * @return string HTML that displays Dashlet
+ */
+ function display() {
+ return parent::display() . $this->lvs->display(false) . $this->processAutoRefresh();
+ }
+
+ /**
+ * Filter the $_REQUEST and only save only the needed options
+ * @param array $req the array to pull options from
+ *
+ * @return array options array
+ */
+ function saveOptions($req) {
+ $options = array();
+
+ $this->loadCustomMetadata();
+ foreach($req as $name => $value) {
+ if(!is_array($value)) $req[$name] = trim($value);
+ }
+ $options['filters'] = array();
+ foreach($this->searchFields as $name=>$params) {
+ $widgetDef = $this->seedBean->field_defs[$name];
+ if($widgetDef['type'] == 'datetimecombo' || $widgetDef['type'] == 'datetime' || $widgetDef['type'] == 'date') { // special case datetime types
+ $options['filters'][$widgetDef['name']] = array();
+ if(!empty($req['type_' . $widgetDef['name']])) { // save the type of date filter
+ $options['filters'][$widgetDef['name']]['type'] = $req['type_' . $widgetDef['name']];
+ }
+ if(!empty($req['date_' . $widgetDef['name']])) { // save the date
+ $options['filters'][$widgetDef['name']]['date'] = $req['date_' . $widgetDef['name']];
+ }
+ }
+ elseif(!empty($req[$widgetDef['name']])) {
+ $options['filters'][$widgetDef['name']] = $req[$widgetDef['name']];
+ }
+ }
+ if(!empty($req['dashletTitle'])) {
+ $options['title'] = $req['dashletTitle'];
+ }
+
+ if(!empty($req['myItemsOnly'])) {
+ $options['myItemsOnly'] = $req['myItemsOnly'];
+ }
+ else {
+ $options['myItemsOnly'] = false;
+ }
+ $options['displayRows'] = empty($req['displayRows']) ? '5' : $req['displayRows'];
+ // displayColumns
+ if(!empty($req['displayColumnsDef'])) {
+ $options['displayColumns'] = explode('|', $req['displayColumnsDef']);
+ }
+ $options['autoRefresh'] = empty($req['autoRefresh']) ? '0' : $req['autoRefresh'];
+ return $options;
+ }
+
+ /**
+ * Internal function to add custom fields
+ *
+ */
+ function addCustomFields() {
+ foreach($this->seedBean->field_defs as $fieldName => $def) {
+ if(!empty($def['type']) && $def['type'] == 'html')
+ continue;
+ if(isset($def['vname'])) {
+ $translated = translate($def['vname'], $this->seedBean->module_dir);
+ if(is_array($translated)) $translated = $def['vname'];
+ if(!empty($def['source']) && $def['source'] == 'custom_fields') {
+ if(isset($this->columns[$fieldName]['default']) && $this->columns[$fieldName]['default']){
+ $this->columns[$fieldName] = array('width' => '10',
+ 'label' => $translated,
+ 'default' => 1);
+ }else{
+ $this->columns[$fieldName] = array('width' => '10',
+ 'label' => $translated);
+ }
+
+ }
+ }
+ }
+ }
+}
+?>
diff --git a/include/Dashlets/DashletGenericAutoRefresh.tpl b/include/Dashlets/DashletGenericAutoRefresh.tpl
new file mode 100644
index 00000000..4c829a5a
--- /dev/null
+++ b/include/Dashlets/DashletGenericAutoRefresh.tpl
@@ -0,0 +1,58 @@
+{*
+
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+
+
+
+*}
+
+
+
\ No newline at end of file
diff --git a/include/Dashlets/DashletGenericAutoRefreshDynamic.tpl b/include/Dashlets/DashletGenericAutoRefreshDynamic.tpl
new file mode 100644
index 00000000..7dee1526
--- /dev/null
+++ b/include/Dashlets/DashletGenericAutoRefreshDynamic.tpl
@@ -0,0 +1,64 @@
+{*
+
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+
+
+
+*}
+
+
+
\ No newline at end of file
diff --git a/include/Dashlets/DashletGenericChart.php b/include/Dashlets/DashletGenericChart.php
new file mode 100644
index 00000000..a2672dd9
--- /dev/null
+++ b/include/Dashlets/DashletGenericChart.php
@@ -0,0 +1,354 @@
+ $value ) {
+ $this->$key = $value;
+ }
+ }
+
+ // load searchfields
+ $classname = get_class($this);
+ if ( is_file("modules/Charts/Dashlets/$classname/$classname.data.php") ) {
+ require("modules/Charts/Dashlets/$classname/$classname.data.php");
+ $this->_searchFields = $dashletData[$classname]['searchFields'];
+ }
+
+ // load language files
+ $this->loadLanguage($classname, 'modules/Charts/Dashlets/');
+
+ if ( empty($options['title']) )
+ $this->title = $this->dashletStrings['LBL_TITLE'];
+ if ( isset($options['autoRefresh']) )
+ $this->autoRefresh = $options['autoRefresh'];
+
+ $this->layoutManager = new LayoutManager();
+ $this->layoutManager->setAttribute('context', 'Report');
+ // fake a reporter object here just to pass along the db type used in many widgets.
+ // this should be taken out when sugarwidgets change
+ $temp = (object) array('db' => &$GLOBALS['db'], 'report_def_str' => '');
+ $this->layoutManager->setAttributePtr('reporter', $temp);
+ }
+
+ /**
+ * @see Dashlet::setRefreshIcon()
+ */
+ public function setRefreshIcon()
+ {
+ $additionalTitle = '';
+ if($this->isRefreshable)
+ $additionalTitle .= ' ';
+ return $additionalTitle;
+ }
+
+ /**
+ * Displays the javascript for the dashlet
+ *
+ * @return string javascript to use with this dashlet
+ */
+ public function displayScript()
+ {
+
+ require_once('include/SugarCharts/SugarChartFactory.php');
+ $sugarChart = SugarChartFactory::getInstance();
+ return $sugarChart->getDashletScript($this->id);
+
+ }
+
+ /**
+ * Gets the smarty object for the config window. Designed to allow lazy loading the object
+ * when it's needed.
+ */
+ protected function getConfigureSmartyInstance()
+ {
+ if ( !($this->_configureSS instanceof Sugar_Smarty) ) {
+
+ $this->_configureSS = new Sugar_Smarty();
+ }
+
+ return $this->_configureSS;
+ }
+
+ /**
+ * Saves the chart config options
+ * Filter the $_REQUEST and only save only the needed options
+ *
+ * @param array $req
+ * @return array
+ */
+ public function saveOptions(
+ $req
+ )
+ {
+ global $timedate;
+
+ $options = array();
+
+ foreach($req as $name => $value)
+ if(!is_array($value)) $req[$name] = trim($value);
+
+ foreach($this->_searchFields as $name => $params) {
+ $widgetDef = $params;
+ if ( isset($this->getSeedBean()->field_defs[$name]) )
+ $widgetDef = $this->getSeedBean()->field_defs[$name];
+ if ( $widgetDef['type'] == 'date') // special case date types
+ $options[$widgetDef['name']] = $timedate->swap_formats($req['type_'.$widgetDef['name']], $timedate->get_date_format(), $timedate->dbDayFormat);
+ elseif ( $widgetDef['type'] == 'time') // special case time types
+ $options[$widgetDef['name']] = $timedate->swap_formats($req['type_'.$widgetDef['name']], $timedate->get_time_format(), $timedate->dbTimeFormat);
+ elseif ( $widgetDef['type'] == 'datepicker') // special case datepicker types
+ $options[$widgetDef['name']] = $timedate->swap_formats($req[$widgetDef['name']], $timedate->get_date_format(), $timedate->dbDayFormat);
+ elseif (!empty($req[$widgetDef['name']]))
+ $options[$widgetDef['name']] = $req[$widgetDef['name']];
+ }
+
+ if (!empty($req['dashletTitle']))
+ $options['title'] = $req['dashletTitle'];
+
+ $options['autoRefresh'] = empty($req['autoRefresh']) ? '0' : $req['autoRefresh'];
+
+ return $options;
+ }
+
+ /**
+ * Handles displaying the chart dashlet configuration popup window
+ *
+ * @return string HTML to return to the browser
+ */
+ public function displayOptions()
+ {
+ $currentSearchFields = array();
+
+ if ( is_array($this->_searchFields) ) {
+ foreach($this->_searchFields as $name=>$params) {
+ if(!empty($name)) {
+ $name = strtolower($name);
+ $currentSearchFields[$name] = array();
+
+ $widgetDef = $params;
+ if ( isset($this->getSeedBean()->field_defs[$name]) )
+ $widgetDef = $this->getSeedBean()->field_defs[$name];
+
+ if($widgetDef['type'] == 'enum' || $widgetDef['type'] == 'singleenum') $widgetDef['remove_blank'] = true; // remove the blank option for the dropdown
+
+ if ( empty($widgetDef['input_name0']) )
+ $widgetDef['input_name0'] = empty($this->$name) ? '' : $this->$name;
+ $currentSearchFields[$name]['label'] = translate($widgetDef['vname'], $this->getSeedBean()->module_dir);
+ if ( $currentSearchFields[$name]['label'] == $widgetDef['vname'] )
+ $currentSearchFields[$name]['label'] = translate($widgetDef['vname'], 'Charts');
+ $currentSearchFields[$name]['input'] = $this->layoutManager->widgetDisplayInput($widgetDef, true, (empty($this->$name) ? '' : $this->$name));
+ }
+ else { // ability to create spacers in input fields
+ $currentSearchFields['blank' + $count]['label'] = '';
+ $currentSearchFields['blank' + $count]['input'] = '';
+ $count++;
+ }
+ }
+ }
+ $this->currentSearchFields = $currentSearchFields;
+ $this->getConfigureSmartyInstance()->assign('title',translate('LBL_TITLE','Charts'));
+ $this->getConfigureSmartyInstance()->assign('save',$GLOBALS['app_strings']['LBL_SAVE_BUTTON_LABEL']);
+ $this->getConfigureSmartyInstance()->assign('id', $this->id);
+ $this->getConfigureSmartyInstance()->assign('searchFields', $this->currentSearchFields);
+ $this->getConfigureSmartyInstance()->assign('dashletTitle', $this->title);
+ $this->getConfigureSmartyInstance()->assign('dashletType', 'predefined_chart');
+ $this->getConfigureSmartyInstance()->assign('module', $_REQUEST['module']);
+
+ if($this->isAutoRefreshable()) {
+ $this->getConfigureSmartyInstance()->assign('isRefreshable', true);
+ $this->getConfigureSmartyInstance()->assign('autoRefresh', $GLOBALS['app_strings']['LBL_DASHLET_CONFIGURE_AUTOREFRESH']);
+ $this->getConfigureSmartyInstance()->assign('autoRefreshOptions', $this->getAutoRefreshOptions());
+ $this->getConfigureSmartyInstance()->assign('autoRefreshSelect', $this->autoRefresh);
+ }
+
+ return parent::displayOptions() . $this->getConfigureSmartyInstance()->fetch($this->_configureTpl);
+ }
+
+ /**
+ * Returns the DashletGenericChart::_seedBean object. Designed to allow lazy loading the object
+ * when it's needed.
+ *
+ * @return object
+ */
+ protected function getSeedBean()
+ {
+ if ( !($this->_seedBean instanceof SugarBean) )
+ $this->_seedBean = SugarModule::get($this->_seedName)->loadBean();
+
+ return $this->_seedBean;
+ }
+
+ /**
+ * Returns the built query read to feed into SugarChart::getData()
+ *
+ * @return string SQL query
+ */
+ protected function constructQuery()
+ {
+ return '';
+ }
+
+ /**
+ * Returns the array of group by parameters for SugarChart::$group_by
+ *
+ * @return string SQL query
+ */
+ protected function constructGroupBy()
+ {
+ return array();
+ }
+
+ /**
+ * Displays the Dashlet, must call process() prior to calling this
+ *
+ * @return string HTML that displays Dashlet
+ */
+ public function display()
+ {
+ return parent::display() . $this->processAutoRefresh();
+ }
+
+ /**
+ * Processes and displays the auto refresh code for the dashlet
+ *
+ * @param int $dashletOffset
+ * @return string HTML code
+ */
+ protected function processAutoRefresh($dashletOffset = 0)
+ {
+ global $sugar_config;
+
+ if ( empty($dashletOffset) ) {
+ $dashletOffset = 0;
+ $module = $_REQUEST['module'];
+ if(isset($_REQUEST[$module.'2_'.strtoupper($this->getSeedBean()->object_name).'_offset'])) {
+ $dashletOffset = $_REQUEST[$module.'2_'.strtoupper($this->getSeedBean()->object_name).'_offset'];
+ }
+ }
+
+ if ( !$this->isRefreshable ) {
+ return '';
+ }
+ if ( !empty($sugar_config['dashlet_auto_refresh_min']) && $sugar_config['dashlet_auto_refresh_min'] == -1 ) {
+ return '';
+ }
+ $autoRefreshSS = new Sugar_Smarty();
+ $autoRefreshSS->assign('dashletOffset', $dashletOffset);
+ $autoRefreshSS->assign('dashletId', $this->id);
+ $autoRefreshSS->assign('strippedDashletId', str_replace("-","",$this->id)); //javascript doesn't like "-" in function names
+ if ( empty($this->autoRefresh) ) {
+ $this->autoRefresh = 0;
+ }
+ elseif ( !empty($sugar_config['dashlet_auto_refresh_min']) ) {
+ $this->autoRefresh = min($sugar_config['dashlet_auto_refresh_min'],$this->autoRefresh);
+ }
+ $autoRefreshSS->assign('dashletRefreshInterval', $this->autoRefresh * 1000);
+ $autoRefreshSS->assign('url', "predefined_chart");
+ $tpl = 'include/Dashlets/DashletGenericAutoRefresh.tpl';
+ if ( $_REQUEST['action'] == "DynamicAction" ) {
+ $tpl = 'include/Dashlets/DashletGenericAutoRefreshDynamic.tpl';
+ }
+
+ return $autoRefreshSS->fetch($tpl);
+ }
+}
diff --git a/include/Dashlets/DashletGenericChartConfigure.tpl b/include/Dashlets/DashletGenericChartConfigure.tpl
new file mode 100644
index 00000000..a3f08857
--- /dev/null
+++ b/include/Dashlets/DashletGenericChartConfigure.tpl
@@ -0,0 +1,95 @@
+{*
+
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+
+
+
+*}
+
+
+
\ No newline at end of file
diff --git a/include/Dashlets/DashletGenericConfigure.tpl b/include/Dashlets/DashletGenericConfigure.tpl
new file mode 100644
index 00000000..a8c672d0
--- /dev/null
+++ b/include/Dashlets/DashletGenericConfigure.tpl
@@ -0,0 +1,134 @@
+{*
+
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+
+
+
+*}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/include/Dashlets/DashletGenericDisplay.tpl b/include/Dashlets/DashletGenericDisplay.tpl
new file mode 100644
index 00000000..776182f5
--- /dev/null
+++ b/include/Dashlets/DashletGenericDisplay.tpl
@@ -0,0 +1,191 @@
+{*
+
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+
+
+
+*}
+
+
+
+
+
+ {foreach from=$displayColumns key=colHeader item=params}
+
+
+ {if $params.sortable|default:true}
+
{sugar_translate label=$params.label module=$pageData.bean.moduleDir}
+ {if $params.orderBy|default:$colHeader|lower == $pageData.ordering.orderBy}
+ {if $pageData.ordering.sortOrder == 'ASC'}
+ {capture assign="imageName"}arrow_down.{$arrowExt}{/capture}
+
+ {else}
+ {capture assign="imageName"}arrow_up.{$arrowExt}{/capture}
+
+ {/if}
+ {else}
+ {capture assign="imageName"}arrow.{$arrowExt}{/capture}
+
+ {/if}
+ {else}
+ {if !isset($params.noHeader) || $params.noHeader == false}
+ {sugar_translate label=$params.label module=$pageData.bean.moduleDir}
+ {/if}
+ {/if}
+
+
+ {/foreach}
+ {if !empty($quickViewLinks)}
+
+ {/if}
+
+
+ {foreach name=rowIteration from=$data key=id item=rowData}
+ {if $smarty.foreach.rowIteration.iteration is odd}
+ {assign var='_rowColor' value=$rowColor[0]}
+ {else}
+ {assign var='_rowColor' value=$rowColor[1]}
+ {/if}
+
+ {if $prerow}
+
+
+
+ {/if}
+ {counter start=0 name="colCounter" print=false assign="colCounter"}
+ {foreach from=$displayColumns key=col item=params}
+ {strip}
+
+ {if $col == 'NAME' || $params.bold}{/if}
+ {if $params.link && !$params.customCode}
+ <{$pageData.tag.$id[$params.ACLTag]|default:$pageData.tag.$id.MAIN} href='index.php?action={$params.action|default:'DetailView'}&module={if $params.dynamic_module}{$rowData[$params.dynamic_module]}{else}{$params.module|default:$pageData.bean.moduleDir}{/if}&record={$rowData[$params.id]|default:$rowData.ID}&offset={$pageData.offsets.current+$smarty.foreach.rowIteration.iteration}&stamp={$pageData.stamp}'>
+ {/if}
+ {if $params.customCode}
+ {sugar_evalcolumn_old var=$params.customCode rowData=$rowData}
+ {else}
+ {sugar_field parentFieldArray=$rowData vardef=$params displayType=ListView field=$col}
+ {/if}
+ {if empty($rowData.$col) && empty($params.customCode)} {/if}
+ {if $params.link && !$params.customCode}
+ {$pageData.tag.$id[$params.ACLTag]|default:$pageData.tag.$id.MAIN}>
+ {/if}
+ {if $col == 'NAME' || $params.bold} {/if}
+
+ {/strip}
+ {counter name="colCounter"}
+ {/foreach}
+ {if !empty($quickViewLinks)}
+
+ {if $pageData.access.edit}
+
+ {/if}
+ {if $pageData.access.view}
+
+ {/if}
+
+ {/if}
+
+ {foreachelse}
+
+
+ {$APP.LBL_NO_DATA}
+
+
+ {/foreach}
+
diff --git a/include/DetailView/DetailView.php b/include/DetailView/DetailView.php
new file mode 100644
index 00000000..80a81537
--- /dev/null
+++ b/include/DetailView/DetailView.php
@@ -0,0 +1,451 @@
+local_theme = $theme;
+ $this->local_app_strings =$app_strings;
+ }
+
+ function processSugarBean($html_varName, $seed, &$offset, $isfirstview=0) {
+ global $row_count, $sugar_config;
+
+ global $next_offset;
+ global $previous_offset;
+ global $list_view_row_count;
+ global $current_offset;
+ if (!empty($sugar_config['disable_vcr']) ) {
+ $seed->retrieve($_REQUEST['record']);
+ return $seed;
+ }
+ $isfirstview = 0;
+
+ $nav_history_set=false;
+ $nav_history_array=array();
+ $nav_offset='';
+ $nav_ids_visited=array();
+ $nav_stamp='';
+
+ //get the session variable DETAIL_NAV_HISTORY,
+ //the format of the variable stamp,offset, array of IDs visited.
+ $nav_history=$this->getLocalSessionVariable($html_varName, "DETAIL_NAV_HISTORY");
+ if (!empty($nav_history)) {
+ $nav_history_set=true;
+ $nav_history_array=explode(":",$nav_history);
+ $nav_stamp=$nav_history_array[0];
+ $nav_offset=$nav_history_array[1];
+ eval("\$nav_ids_visited= ".$nav_history_array[2].";");
+ }
+
+ //from list offset is there but $bNavHistorySet is false.
+ //from next,previous,start and end buttons offset and $bNavHistorySet is true.
+ //from tracker offset is not there but $bNavHistorySet may or may not exist.
+ if (isset($_REQUEST['offset']) && !empty($_REQUEST['offset'])) {
+ //get offset values.
+ $offset = $_REQUEST['offset'];
+ if($offset < 0){
+ $offset = 0;
+ }
+ //if the stamp has changed, ignore the offset and navigate to the record.
+ //use case, search, navigate to detail, copy URL, search again, paste URL.
+ if (!$this->isRequestFromListView($html_varName)) {
+ $result = $seed->retrieve($_REQUEST['record']);
+ return $result;
+ }
+
+ if ($nav_history_set) {
+ if (isset($nav_ids_visited[$offset])) {
+ unset($nav_ids_visited[$offset]);
+ }
+ }
+
+ } else {
+ if ($nav_history_set) {
+ //try to locate the ID in the nav_history array.
+
+ $key = array_search($_REQUEST['record'], $nav_ids_visited);
+ if ($key === false) {
+ //do not show the VCR buttons.
+
+ $result = $seed->retrieve($_REQUEST['record']);
+ return $result;
+ }
+ $offset=$key;
+ $_REQUEST['offset'] = $offset;
+ $_GET['offset'] = $offset;
+ $_POST['offset'] = $offset;
+
+ $_REQUEST['stamp'] = $nav_stamp;
+ $_GET['stamp'] = $nav_stamp;
+ $_POST['stamp'] = $nav_stamp;
+ if (isset($nav_ids_visited[$offset])) {
+ unset($nav_ids_visited[$offset]);
+ }
+
+ } else {
+ if(!empty($seed->id))return $seed;
+
+ $result = $seed->retrieve($_REQUEST['record']);
+ return $result;
+ }
+ }
+
+ //Check if this is the first time we have viewed this record
+ $var = $this->getLocalSessionVariable($html_varName, "IS_FIRST_VIEW");
+ if(!isset($var) || !$var){
+ $isFirstView = true;
+ }
+ else{
+ $isFirstView = false;
+ }
+ //indicate that this is not the first time anymore
+ $this->setLocalSessionVariable($html_varName, "IS_FIRST_VIEW", false);
+
+ // All 3 databases require this because the limit query does a > db_offset comparision.
+ $db_offset=$offset-1;
+
+ $this->populateQueryWhere($isFirstView, $html_varName);
+ if(ACLController::requireOwner($seed->module_dir, 'view')) {
+ global $current_user;
+ $seed->getOwnerWhere($current_user->id);
+ if(!empty($this->query_where)) {
+ $this->query_where .= ' AND ';
+ }
+ $this->query_where .= $seed->getOwnerWhere($current_user->id);
+ }
+
+ $order = $this->getLocalSessionVariable($seed->module_dir.'2_'.$html_varName, "ORDER_BY");
+ $orderBy = '';
+ if(!empty($order['orderBy']))
+ $orderBy = $order['orderBy'];
+ if(!empty($orderBy) && !empty($order['direction']))
+ $orderBy .= ' ' . $order['direction'];
+
+ $this->query_orderby = $seed->process_order_by($orderBy,null);
+ $current_offset = $_REQUEST['offset'] -1;
+ $response = $seed->process_detail_query(SugarVCR::retrieve($seed->module_dir), 0, -1, -1, '', $current_offset);
+ //$response = $seed->get_detail(, $this->query_where, $db_offset);
+ $object = $response['bean'];
+ $row_count = $response['row_count'];
+ $next_offset = $response['next_offset'];
+ $previous_offset = $response['previous_offset'];
+ $list_view_row_count = $row_count;
+ $this->setListViewRowCount($row_count);
+
+ //if the retrieved id is not same as the request ID then hide the VCR buttons.
+ if (empty($object->id)) {
+ $this->no_record_found=true;
+ }
+ if (empty($_REQUEST['InDetailNav']) and strcmp($_REQUEST['record'],$object->id)!=0) {
+ $this->offset_key_mismatch=true;
+ }
+ if ($this->no_record_found or $this->offset_key_mismatch ) {
+ if ($nav_history_set) {
+ $this->return_to_list_only=true;
+ }
+ $result = $seed->retrieve($_REQUEST['record']);
+ return $result;
+ }
+
+ //update the request with correct value for the record attribute.
+ //need only when using the VCR buttuoms. This is a workaround need to fix the values
+ //set in the VCR links.
+ $_REQUEST['record'] = $object->id;
+ $_GET['record'] = $object->id;
+ $_POST['record'] = $object->id;
+
+ //set nav_history.
+ if (empty($nav_stamp)) {
+ $nav_stamp=$_GET['stamp'];
+ }
+ if (empty($nav_offset)) {
+ $nav_offset=$offset;
+ }
+ //store a maximum of 20 entries in the nav_ids_visited array.
+ //remove the oldest entry when this limit is reached.
+ if (count($nav_ids_visited) >= 20) {
+ reset($nav_ids_visited);
+ unset($nav_ids_visited[key($nav_ids_visited)]);
+ }
+ $nav_ids_visited[$offset]=$object->id;
+ $nav_history=sprintf("%s:%s:%s",$nav_stamp,$nav_offset,var_export($nav_ids_visited,true));
+ $this->setLocalSessionVariable($html_varName, "DETAIL_NAV_HISTORY",$nav_history);
+
+ return $object;
+ }
+
+ function populateQueryWhere($isfirstview, $html_varName){
+ if($isfirstview){
+ $this->query_where = $this->getVariableFromSession($_REQUEST['module'], 'QUERY_WHERE');
+
+ //this is a fail safe, in case the old ListView is still in use
+ if(empty($this->query_where)){
+ $this->query_where = $this->getLocalSessionVariable($html_varName, "QUERY_WHERE");
+ }
+ //SETTING QUERY FOR LATER USE
+ $this->setSessionVariable("QUERY_DETAIL", "where", $this->query_where);
+ }
+ else{
+ $this->query_where = $this->getSessionVariable("QUERY_DETAIL", "where");
+ }
+ }
+
+ function processListNavigation( &$xtpl, $html_varName, $current_offset, $display_audit_link = false){
+ global $export_module, $sugar_config, $current_user;
+ //intialize audit_link
+ $audit_link = '';
+
+ $row_count = $this->getListViewRowCount();
+
+ if($display_audit_link && (!isset($sugar_config['disc_client']) || $sugar_config['disc_client'] == false))
+ {
+ //Audit link
+ $popup_request_data = array(
+ 'call_back_function' => 'set_return',
+ 'form_name' => 'EditView',
+ 'field_to_name_array' => array(),
+ );
+ $json = getJSONobj();
+ $encoded_popup_request_data = $json->encode($popup_request_data);
+ $audit_link = "".$this->local_app_strings['LNK_VIEW_CHANGE_LOG']." ";
+ }
+
+ $html_text = "";
+ $pre_html_text = "";
+ $pre_html_text .= " \n";
+ $showVCRControl = true;
+ if(isset($sugar_config['disable_vcr'])) {
+ $showVCRControl = !$sugar_config['disable_vcr'];
+ }
+ if ( $showVCRControl && $html_text != "" )
+ $xtpl->assign("PAGINATION",$pre_html_text.$html_text.$post_html_text);
+ }
+
+
+ function set_base_URL($html_varName) {
+
+ if(!isset($this->base_URL)){
+
+ $this->base_URL = $_SERVER['PHP_SELF'];
+ if(empty($this->base_URL)){
+ $this->base_URL = 'index.php';
+ }
+
+ /*fixes an issue with
+ deletes when doing a search*/
+ foreach($_GET as $name=>$value){
+ if(!empty($value)){
+ if($name != $this->getSessionVariableName($html_varName,"ORDER_BY") && $name != "offset" && substr_count($name, "ORDER_BY")==0 && $name!="isfirstview"){
+ if (is_array($value)) {
+ foreach($value as $valuename=>$valuevalue){
+ $this->base_URL .= "&{$name}[]=".$valuevalue;
+ }
+ } else {
+ if(substr_count( $this->base_URL, '?') > 0){
+ $this->base_URL .= "&$name=$value";
+ }else{
+ $this->base_URL .= "?$name=$value";
+ }
+ }
+ }
+ }
+ }
+
+ if($_SERVER['REQUEST_METHOD'] == 'POST'){
+ $this->base_URL .= '?';
+ if(isset($_REQUEST['action'])) $this->base_URL .= '&action='.$_REQUEST['action'];
+ if(isset($_REQUEST['record'])) $this->base_URL .= '&record='.$_REQUEST['record'];
+ if(isset($_REQUEST['module'])) $this->base_URL .= '&module='.$_REQUEST['module'];
+ }
+ $this->base_URL .= "&offset=";
+ }
+ }
+ function setListViewRowCount($count)
+ {
+ $this->list_row_count = $count;
+ }
+
+ function getListViewRowCount()
+ {
+ return $this->list_row_count;
+ }
+
+ /* This method will return in all of these cases: When selecting any of the VCR buttons (start,prev,next or last)
+ * and navigating from list to detail for the first time.
+ * if false in this case: the user changes the list query (which generates a new stamp) and pastes a URL
+ * from a previously navigated item.
+ */
+ function isRequestFromListView($html_varName)
+ {
+ $varList = $this->getLocalSessionVariable($html_varName, "FROM_LIST_VIEW");
+ if(isset($_GET['stamp']) && isset($varList) && $varList == $_GET['stamp']){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ /**
+ * Return a variable from the session. uses the new ListView session data. Hence the '2'
+ *
+ * @param unknown_type $name - the name of the variable to set in the session
+ * @param unknown_type $value - the value of the variable to set
+ */
+ function getVariableFromSession($name, $value){
+ if(isset($_SESSION[$name."2_".$value])){
+ return $_SESSION[$name."2_".$value];
+ }
+ else{
+ return "";
+ }
+ }
+
+ }
+?>
\ No newline at end of file
diff --git a/include/DetailView/DetailView.tpl b/include/DetailView/DetailView.tpl
new file mode 100644
index 00000000..be65ab0f
--- /dev/null
+++ b/include/DetailView/DetailView.tpl
@@ -0,0 +1,175 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+{{include file=$headerTpl}}
+{sugar_include include=$includes}
+
+ {{if $useTabs}}
+ {* Generate the Tab headers *}
+ {{counter name="tabCount" start=-1 print=false assign="tabCount"}}
+
+ {{/if}}
+
+{{* Loop through all top level panels first *}}
+{{counter name="panelCount" print=false start=0 assign="panelCount"}}
+{{foreach name=section from=$sectionPanels key=label item=panel}}
+{{assign var='panel_id' value=$panelCount}}
+
+{counter name="panelFieldCount" start=0 print=false assign="panelFieldCount"}
+{{* Print out the panel title if one exists*}}
+
+{{* Check to see if the panel variable is an array, if not, we'll attempt an include with type param php *}}
+{{* See function.sugar_include.php *}}
+{{if !is_array($panel)}}
+ {sugar_include type='php' file='{{$panel}}'}
+{{else}}
+
+ {{if !empty($label) && !is_int($label) && $label != 'DEFAULT' && !$useTabs}}
+
{sugar_translate label='{{$label}}' module='{{$module}}'}
+ {{/if}}
+ {{* Print out the table data *}}
+
+
+
+
+ {{foreach name=rowIteration from=$panel key=row item=rowData}}
+ {counter name="fieldsUsed" start=0 print=false assign="fieldsUsed"}
+ {counter name="fieldsHidden" start=0 print=false assign="fieldsHidden"}
+ {capture name="tr" assign="tableRow"}
+
+ {{assign var='columnsInRow' value=$rowData|@count}}
+ {{assign var='columnsUsed' value=0}}
+ {{foreach name=colIteration from=$rowData key=col item=colData}}
+ {{if !empty($colData.field.hideIf)}}
+ {if !({{$colData.field.hideIf}}) }
+ {{/if}}
+ {counter name="fieldsUsed"}
+
+ {{if !empty($colData.field.name)}}
+ {if !$fields.{{$colData.field.name}}.hidden}
+ {{/if}}
+ {{if isset($colData.field.customLabel)}}
+ {{$colData.field.customLabel}}
+ {{elseif isset($colData.field.label) && strpos($colData.field.label, '$')}}
+ {capture name="label" assign="label"}{{$colData.field.label}}{/capture}
+ {$label|strip_semicolon}:
+ {{elseif isset($colData.field.label)}}
+ {capture name="label" assign="label"}{sugar_translate label='{{$colData.field.label}}' module='{{$module}}'}{/capture}
+ {$label|strip_semicolon}:
+ {{elseif isset($fields[$colData.field.name])}}
+ {capture name="label" assign="label"}{sugar_translate label='{{$fields[$colData.field.name].vname}}' module='{{$module}}'}{/capture}
+ {$label|strip_semicolon}:
+ {{else}}
+
+ {{/if}}
+ {{if isset($colData.field.popupHelp) || isset($fields[$colData.field.name]) && isset($fields[$colData.field.name].popupHelp) }}
+ {{if isset($colData.field.popupHelp) }}
+ {capture name="popupText" assign="popupText"}{sugar_translate label="{{$colData.field.popupHelp}}" module='{{$module}}'}{/capture}
+ {{elseif isset($fields[$colData.field.name].popupHelp)}}
+ {capture name="popupText" assign="popupText"}{sugar_translate label="{{$fields[$colData.field.name].popupHelp}}" module='{{$module}}'}{/capture}
+ {{/if}}
+ {overlib_includes}
+ {sugar_help text=$popupText WIDTH=400}
+ {{/if}}
+ {{if !empty($colData.field.name)}}
+ {/if}
+ {{/if}}
+
+
+ {{if !empty($colData.field.name)}}
+ {if !$fields.{{$colData.field.name}}.hidden}
+ {{/if}}
+ {{if $colData.field.customCode || $colData.field.assign}}
+ {counter name="panelFieldCount"}
+ {{sugar_evalcolumn var=$colData.field colData=$colData}}
+ {{elseif $fields[$colData.field.name] && !empty($colData.field.fields) }}
+ {{foreach from=$colData.field.fields item=subField}}
+ {{if $fields[$subField]}}
+ {counter name="panelFieldCount"}
+ {{sugar_field parentFieldArray='fields' tabindex=$tabIndex vardef=$fields[$subField] displayType='DetailView'}}
+ {{else}}
+ {counter name="panelFieldCount"}
+ {{$subField}}
+ {{/if}}
+ {{/foreach}}
+ {{elseif $fields[$colData.field.name]}}
+ {counter name="panelFieldCount"}
+ {{sugar_field parentFieldArray='fields' vardef=$fields[$colData.field.name] displayType='DetailView' displayParams=$colData.field.displayParams typeOverride=$colData.field.type}}
+ {{/if}}
+ {{if !empty($colData.field.name)}}
+ {/if}
+ {{/if}}
+
+ {{if !empty($colData.field.hideIf)}}
+ {else}
+
+
+ {/if}
+ {{/if}}
+ {{/foreach}}
+
+ {/capture}
+ {if $fieldsUsed > 0 && $fieldsUsed != $fieldsHidden}
+ {$tableRow}
+ {/if}
+ {{/foreach}}
+
+{{/if}}
+
+{if $panelFieldCount == 0}
+
+
+{/if}
+{{/foreach}}
+
+{{include file=$footerTpl}}
+{{if $useTabs}}
+
+
+{{/if}}
\ No newline at end of file
diff --git a/include/DetailView/DetailView2.php b/include/DetailView/DetailView2.php
new file mode 100644
index 00000000..b2792aba
--- /dev/null
+++ b/include/DetailView/DetailView2.php
@@ -0,0 +1,104 @@
+th = new TemplateHandler();
+ $this->th->ss =& $this->ss;
+ $this->focus = $focus;
+ $this->tpl = $tpl;
+ $this->module = $module;
+ $this->metadataFile = $metadataFile;
+ if(isset($GLOBALS['sugar_config']['disable_vcr'])) {
+ $this->showVCRControl = !$GLOBALS['sugar_config']['disable_vcr'];
+ }
+ if(!empty($this->metadataFile) && file_exists($this->metadataFile)){
+ require_once($this->metadataFile);
+ }else {
+ //If file doesn't exist we create a best guess
+ if(!file_exists("modules/$this->module/metadata/detailviewdefs.php") &&
+ file_exists("modules/$this->module/DetailView.html")) {
+ global $dictionary;
+ $htmlFile = "modules/" . $this->module . "/DetailView.html";
+ $parser = new DetailViewMetaParser();
+ if(!file_exists('modules/'.$this->module.'/metadata')) {
+ sugar_mkdir('modules/'.$this->module.'/metadata');
+ }
+ $fp = sugar_fopen('modules/'.$this->module.'/metadata/detailviewdefs.php', 'w');
+ fwrite($fp, $parser->parse($htmlFile, $dictionary[$focus->object_name]['fields'], $this->module));
+ fclose($fp);
+ }
+
+ //Flag an error... we couldn't create the best guess meta-data file
+ if(!file_exists("modules/$this->module/metadata/detailviewdefs.php")) {
+ global $app_strings;
+ $error = str_replace("[file]", "modules/$this->module/metadata/detailviewdefs.php", $app_strings['ERR_CANNOT_CREATE_METADATA_FILE']);
+ $GLOBALS['log']->fatal($error);
+ echo $error;
+ die();
+ }
+ require_once("modules/$this->module/metadata/detailviewdefs.php");
+ }
+
+ $this->defs = $viewdefs[$this->module][$this->view];
+ }
+
+}
+?>
\ No newline at end of file
diff --git a/include/DetailView/footer.tpl b/include/DetailView/footer.tpl
new file mode 100644
index 00000000..821df87b
--- /dev/null
+++ b/include/DetailView/footer.tpl
@@ -0,0 +1,38 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+
\ No newline at end of file
diff --git a/include/DetailView/header.tpl b/include/DetailView/header.tpl
new file mode 100644
index 00000000..c431d90e
--- /dev/null
+++ b/include/DetailView/header.tpl
@@ -0,0 +1,119 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+{{* Add the preForm code if it is defined (used for vcards) *}}
+{{if $preForm}}
+ {{$preForm}}
+{{/if}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{if isset($form.hidden)}}
+{{foreach from=$form.hidden item=field}}
+{{$field}}
+{{/foreach}}
+{{/if}}
+
+{{if !isset($form.buttons)}}
+{{sugar_button module="$module" id="EDIT" view="$view"}}
+{{sugar_button module="$module" id="DUPLICATE" view="EditView"}}
+{{sugar_button module="$module" id="DELETE" view="$view"}}
+{{else}}
+ {{counter assign="num_buttons" start=0 print=false}}
+ {{foreach from=$form.buttons key=val item=button}}
+ {{if !is_array($button) && in_array($button, $built_in_buttons)}}
+ {{counter print=false}}
+ {{sugar_button module="$module" id="$button" view="EditView"}}
+ {{/if}}
+ {{/foreach}}
+ {{if isset($closeFormBeforeCustomButtons)}}
+
+
+ {{/if}}
+ {{if count($form.buttons) > $num_buttons}}
+ {{foreach from=$form.buttons key=val item=button}}
+ {{if is_array($button) && $button.customCode}}
+ {{if isset($closeFormBeforeCustomButtons)}}
+
+ {{/if}}
+ {{sugar_button module="$module" id="$button" view="EditView"}}
+ {{if isset($closeFormBeforeCustomButtons)}}
+
+ {{/if}}
+ {{/if}}
+ {{/foreach}}
+ {{/if}}
+{{/if}}
+{{if !isset($closeFormBeforeCustomButtons)}}
+
+
+{{/if}}
+{{if empty($form.hideAudit) || !$form.hideAudit}}
+
+{{sugar_button module="$module" id="Audit" view="EditView"}}
+
+{{/if}}
+{$ADMIN_EDIT}
+ {{if $panelCount == 0}}
+ {{* Render tag for VCR control if SHOW_VCR_CONTROL is true *}}
+ {{if $SHOW_VCR_CONTROL}}
+ {$PAGINATION}
+ {{/if}}
+ {{counter name="panelCount" print=false}}
+ {{/if}}
+
+{{* Add $form.links if they are defined *}}
+{{if !empty($form) && isset($form.links)}}
+
+
+ {{foreach from=$form.links item=link}}
+ {{$link}}
+ {{/foreach}}
+
+{{/if}}
+
+
\ No newline at end of file
diff --git a/include/EditView/EditView.php b/include/EditView/EditView.php
new file mode 100644
index 00000000..050912bf
--- /dev/null
+++ b/include/EditView/EditView.php
@@ -0,0 +1,96 @@
+module = $module;
+ $this->template = $template;
+ $this->ss = new Sugar_Smarty();
+ }
+
+ /**
+ * Processes / setups the template
+ * assigns all things to the template like mod_srings and app_strings
+ *
+ */
+ function process() {
+ global $current_language, $app_strings, $sugar_version, $sugar_config, $timedate, $theme;;
+ $module_strings = return_module_language($current_language, $this->module);
+
+ $this->ss->assign('SUGAR_VERSION', $sugar_version);
+ $this->ss->assign('JS_CUSTOM_VERSION', $sugar_config['js_custom_version']);
+ $this->ss->assign('THEME', $theme);
+ $this->ss->assign('APP', $app_strings);
+ $this->ss->assign('MOD', $module_strings);
+ }
+
+
+ /**
+ * Displays the template
+ *
+ * @return string HTML of parsed template
+ */
+ function display() {
+ return $this->ss->fetch($this->template);
+ }
+
+}
+?>
\ No newline at end of file
diff --git a/include/EditView/EditView.tpl b/include/EditView/EditView.tpl
new file mode 100644
index 00000000..5711beb0
--- /dev/null
+++ b/include/EditView/EditView.tpl
@@ -0,0 +1,215 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+{{include file=$headerTpl}}
+{sugar_include include=$includes}
+
+
+
+ {{if $useTabs}}
+ {* Generate the Tab headers *}
+ {{counter name="tabCount" start=-1 print=false assign="tabCount"}}
+
+ {{/if}}
+
+{{* Loop through all top level panels first *}}
+{{counter name="panelCount" start=-1 print=false assign="panelCount"}}
+
+{{foreach name=section from=$sectionPanels key=label item=panel}}
+{{counter name="panelCount" print=false}}
+
+{{* Print out the table data *}}
+{{if $label == 'DEFAULT'}}
+
+{{else}}
+
+{{/if}}
+
+{counter name="panelFieldCount" start=0 print=false assign="panelFieldCount"}
+{{* Check to see if the panel variable is an array, if not, we'll attempt an include with type param php *}}
+{{* See function.sugar_include.php *}}
+{{if !is_array($panel)}}
+ {sugar_include type='php' file='{{$panel}}'}
+{{else}}
+
+
+
+{{/if}}
+
+
+{if $panelFieldCount == 0}
+
+
+{/if}
+{{/foreach}}
+
+{{include file=$footerTpl}}
+{$overlibStuff}
+{{if $useTabs}}
+
+
+{{/if}}
+
diff --git a/include/EditView/EditView2.php b/include/EditView/EditView2.php
new file mode 100644
index 00000000..c438eaf1
--- /dev/null
+++ b/include/EditView/EditView2.php
@@ -0,0 +1,716 @@
+th = new TemplateHandler();
+ $this->th->ss =& $this->ss;
+ $this->tpl = $tpl;
+ $this->module = $module;
+ $this->focus = $focus;
+
+ //this logic checks if the focus has an id and if it does not then it will create a new instance of the focus bean
+ //but in convert lead we do not want to create a new instance and do not want to populate id.
+ if($createFocus)
+ {
+ $this->createFocus();
+ }
+ if(empty($GLOBALS['sugar_config']['showDetailData'])) {
+ $this->showDetailData = false;
+ }
+ $this->metadataFile = $metadataFile;
+
+ if(isset($GLOBALS['sugar_config']['disable_vcr'])) {
+ $this->showVCRControl = !$GLOBALS['sugar_config']['disable_vcr'];
+ }
+ if(!empty($this->metadataFile) && file_exists($this->metadataFile)){
+ include($this->metadataFile);
+ }else {
+ //If file doesn't exist we create a best guess
+ if(!file_exists("modules/$this->module/metadata/editviewdefs.php") &&
+ file_exists("modules/$this->module/EditView.html")) {
+ require_once('include/SugarFields/Parsers/EditViewMetaParser.php');
+ global $dictionary;
+ $htmlFile = "modules/" . $this->module . "/EditView.html";
+ $parser = new EditViewMetaParser();
+ if(!file_exists('modules/'.$this->module.'/metadata')) {
+ sugar_mkdir('modules/'.$this->module.'/metadata');
+ }
+ $fp = sugar_fopen('modules/'.$this->module.'/metadata/editviewdefs.php', 'w');
+ fwrite($fp, $parser->parse($htmlFile, $dictionary[$focus->object_name]['fields'], $this->module));
+ fclose($fp);
+ }
+
+ //Flag an error... we couldn't create the best guess meta-data file
+ if(!file_exists("modules/$this->module/metadata/editviewdefs.php")) {
+ global $app_strings;
+ $error = str_replace("[file]", "modules/$this->module/metadata/editviewdefs.php", $app_strings['ERR_CANNOT_CREATE_METADATA_FILE']);
+ $GLOBALS['log']->fatal($error);
+ echo $error;
+ die();
+ }
+ require_once("modules/$this->module/metadata/editviewdefs.php");
+ }
+
+ $this->defs = $viewdefs[$this->module][$this->view];
+ $this->isDuplicate = isset($_REQUEST['isDuplicate']) && $_REQUEST['isDuplicate'] == 'true' && $this->focus->aclAccess('edit');
+ }
+
+ function createFocus()
+ {
+ global $beanList, $beanFiles;
+
+ if(empty($beanList[$this->module]))return;
+ if(!$this->focus ){
+ $bean = $beanList[$this->module];
+ require_once($beanFiles[$bean]);
+ $obj = new $bean();
+ $this->focus = $obj;
+ }
+
+ //If there is no idea, assume we are creating a new instance
+ //and call the fill_in_additional_detail_fields where initialization
+ //code has been moved to
+ if(empty($this->focus->id)) {
+ global $current_user;
+ $this->focus->fill_in_additional_detail_fields();
+ $this->focus->assigned_user_id = $current_user->id;
+ }
+ }
+
+ function populateBean()
+ {
+ if(!empty($_REQUEST['record']) && $this->populateBean) {
+ global $beanList;
+ $bean = $beanList[$this->module];
+ $obj = new $bean();
+ $this->focus = $obj->retrieve($_REQUEST['record']);
+ } else {
+ $GLOBALS['log']->debug("Unable to populate bean, no record parameter found");
+ }
+ }
+
+ /**
+ * enableFormatting
+ * This method is used to manually turn on/off the field formatting
+ * @param $format boolean value to turn on/off field formatting
+ */
+ function enableFormatting(
+ $format = true
+ )
+ {
+ $this->formatFields = $format;
+ }
+
+
+ function requiredFirst()
+ {
+ $panels = array('required'=>array());
+ $reqCol = -1;
+ $reqRow = 0;
+ foreach($this->defs['panels'] as $key=>$p){
+
+ foreach($p as $row=>$rowDef) {
+ foreach($rowDef as $col => $colDef) {
+ $field = (is_array($p[$row][$col])) ? $p[$row][$col]['name'] : $p[$row][$col];
+ if((!empty($this->focus->field_defs[$field])
+ && !empty($this->focus->field_defs[$field]['required']))
+ || ( !empty($p[$row][$col]['displayParams']['required']) )) {
+ $reqCol++;
+ if($reqCol == $this->defs['templateMeta']['maxColumns']) {
+ $reqCol = -1;
+ $reqRow++;
+ }
+ $panels['required'][$reqRow][$reqCol] = $p[$row][$col];
+ }else{
+ $panels[$key][$row][$col] = $p[$row][$col];
+ }
+
+ } //foreach
+ } //foreach
+
+
+ } //foreach
+ $this->defs['panels'] = $panels;
+ }
+
+ function render()
+ {
+ $totalWidth = 0;
+ foreach($this->defs['templateMeta']['widths'] as $col => $def) {
+ foreach($def as $k => $value) $totalWidth += $value;
+ }
+ // calculate widths
+ foreach($this->defs['templateMeta']['widths'] as $col => $def) {
+ foreach($def as $k => $value)
+ $this->defs['templateMeta']['widths'][$col][$k] = round($value / ($totalWidth / 100), 2);
+ }
+
+ $this->sectionPanels = array();
+ $this->sectionLabels = array();
+ if(!empty($this->defs['panels']) && count($this->defs['panels']) > 0) {
+ $keys = array_keys($this->defs['panels']);
+ if(is_numeric($keys[0])) {
+ $defaultPanel = $this->defs['panels'];
+ unset($this->defs['panels']); //blow away current value
+ $this->defs['panels'][''] = $defaultPanel;
+ }
+ }
+ if($this->view == 'EditView' && !empty($GLOBALS['sugar_config']['forms']['requireFirst'])){
+ $this->requiredFirst();
+ }
+
+ $maxColumns = isset($this->defs['templateMeta']['maxColumns']) ? $this->defs['templateMeta']['maxColumns'] : 2;
+ $panelCount = 0;
+ static $itemCount = 100; //Start the generated tab indexes at 100 so they don't step on custom ones.
+
+ /* loop all the panels */
+ foreach($this->defs['panels'] as $key=>$p)
+ {
+ $panel = array();
+
+ if(!is_array($this->defs['panels'][$key])) {
+ $this->sectionPanels[strtoupper($key)] = $p;
+ } else {
+
+ foreach($p as $row=>$rowDef) {
+ $columnsInRows = count($rowDef);
+ $columnsUsed = 0;
+ foreach($rowDef as $col => $colDef) {
+ $panel[$row][$col] = is_array($p[$row][$col]) ? array('field' => $p[$row][$col]) : array('field' => array('name'=>$p[$row][$col]));
+ $panel[$row][$col]['field']['tabindex'] = (isset($p[$row][$col]['tabindex']) && is_numeric($p[$row][$col]['tabindex'])) ? $p[$row][$col]['tabindex'] : $itemCount;
+
+ if($columnsInRows < $maxColumns) {
+ if($col == $columnsInRows - 1) {
+ $panel[$row][$col]['colspan'] = 2 * $maxColumns - ($columnsUsed + 1);
+ } else {
+ $panel[$row][$col]['colspan'] = floor(($maxColumns * 2 - $columnsInRows) / $columnsInRows);
+ $columnsUsed = $panel[$row][$col]['colspan'];
+ }
+ }
+
+ //Set address types to have colspan value of 2 if colspan is not already defined
+ if(is_array($colDef) && !empty($colDef['hideLabel']) && !isset($panel[$row][$col]['colspan'])) {
+ $panel[$row][$col]['colspan'] = 2;
+ }
+
+ $itemCount++;
+
+ } //foreach
+ } //foreach
+
+ // Panel alignment will be off if the panel doesn't have a row with the max columns
+ // It will not be aligned to the other panels so we fill out the columns in the last row
+ $addFiller = true;
+ foreach($panel as $row) {
+ if(count($row) == $this->defs['templateMeta']['maxColumns']) {
+ $addFiller = false;
+ break;
+ }
+ }
+
+ if($addFiller) {
+ $rowCount = count($panel);
+ $filler = count($panel[$rowCount-1]);
+ while($filler < $this->defs['templateMeta']['maxColumns']) {
+ $panel[$rowCount - 1][$filler++] = array('field'=>array('name'=>''));
+ } //while
+ }
+
+
+ $this->sectionPanels[strtoupper($key)] = $panel;
+ }
+
+
+ $panelCount++;
+ } //foreach
+ }
+
+ function process(
+ $checkFormName = false,
+ $formName = ''
+ )
+ {
+ global $mod_strings, $sugar_config, $app_strings, $app_list_strings;
+
+ //the retrieve already did this work;
+ //$this->focus->fill_in_relationship_fields();
+
+ if(!$this->th->checkTemplate($this->module, $this->view, $checkFormName, $formName)){
+ $this->render();
+ }
+ if(isset($_REQUEST['offset'])) {
+ $this->offset = $_REQUEST['offset'] - 1;
+ } //if
+ if($this->showVCRControl) {
+ $this->th->ss->assign('PAGINATION', SugarVCR::menu($this->module, $this->offset, $this->focus->is_AuditEnabled(), ($this->view == 'EditView')));
+ } //if
+ if(isset($_REQUEST['return_module'])) $this->returnModule = $_REQUEST['return_module'];
+ if(isset($_REQUEST['return_action'])) $this->returnAction = $_REQUEST['return_action'];
+ if(isset($_REQUEST['return_id'])) $this->returnId = $_REQUEST['return_id'];
+ if(isset($_REQUEST['return_relationship'])) $this->returnRelationship = $_REQUEST['return_relationship'];
+ if(isset($_REQUEST['return_name'])) $this->returnName = $this->getValueFromRequest($_REQUEST, 'return_name' ) ;
+
+ // handle Create $module then Cancel
+ if (empty($this->returnId)) {
+ $this->returnAction = 'index';
+ }
+
+ $is_owner = $this->focus->isOwner($GLOBALS['current_user']->id);
+
+ $this->fieldDefs = array();
+ if($this->focus){
+
+ global $current_user;
+
+ /*if(empty($this->focus->assigned_user_id) ){
+ $this->focus->assigned_user_id = $current_user->id;
+ }*/
+
+ if(!empty($this->focus->assigned_user_id)) {
+
+ $this->focus->assigned_user_name = get_assigned_user_name($this->focus->assigned_user_id);
+ }
+ foreach($this->focus->toArray() as $name => $value) {
+
+ $valueFormatted = false;
+ //if($this->focus->field_defs[$name]['type']=='link')continue;
+
+ if (!empty($this->fieldDefs[$name]) && !empty($this->fieldDefs[$name]['value']))
+ $this->fieldDefs[$name] = array_merge($this->focus->field_defs[$name] , $this->fieldDefs[$name] ) ;
+ else
+ $this->fieldDefs[$name] = $this->focus->field_defs[$name];
+
+
+ foreach(array("formula", "default", "comments", "help") as $toEscape)
+ {
+ if (!empty($this->fieldDefs[$name][$toEscape])) {
+ $this->fieldDefs[$name][$toEscape] = htmlentities($this->fieldDefs[$name][$toEscape], ENT_QUOTES, 'UTF-8');
+ }
+ }
+
+ if(isset($this->fieldDefs[$name]['options']) && isset($app_list_strings[$this->fieldDefs[$name]['options']])) {
+ $this->fieldDefs[$name]['options'] = $app_list_strings[$this->fieldDefs[$name]['options']]; // fill in enums
+ } //if
+
+ if(isset($this->fieldDefs[$name]['function'])) {
+ $function = $this->fieldDefs[$name]['function'];
+ if(is_array($function) && isset($function['name'])){
+ $function = $this->fieldDefs[$name]['function']['name'];
+ }else{
+ $function = $this->fieldDefs[$name]['function'];
+ }
+ if(!empty($this->fieldDefs[$name]['function']['returns']) && $this->fieldDefs[$name]['function']['returns'] == 'html'){
+ if(!empty($this->fieldDefs[$name]['function']['include'])){
+ require_once($this->fieldDefs[$name]['function']['include']);
+ }
+ $value = $function($this->focus, $name, $value, $this->view);
+ $valueFormatted = true;
+ }else{
+ $this->fieldDefs[$name]['options'] = $function($this->focus, $name, $value, $this->view);
+ }
+ }
+
+ if(isset($this->fieldDefs[$name]['type']) && $this->fieldDefs[$name]['type'] == 'function' && isset($this->fieldDefs[$name]['function_name'])){
+ $value = $this->callFunction($this->fieldDefs[$name]);
+ $valueFormatted = true;
+ }
+
+ if(!$valueFormatted) {
+ // $this->focus->format_field($this->focus->field_defs[$name]);
+ $value = isset($this->focus->$name) ? $this->focus->$name : '';
+ }
+
+ if (empty($this->fieldDefs[$name]['value']))
+ {
+ $this->fieldDefs[$name]['value'] = $value;
+ }
+
+
+ //This code is used for QuickCreates that go to Full Form view
+ if($this->populateBean && empty($this->focus->id) && (isset($this->fieldDefs[$name]['function']['returns']) ? $this->fieldDefs[$name]['function']['returns'] != 'html' : true) && isset($_REQUEST[$name])) {
+ $this->fieldDefs[$name]['value'] = $this->getValueFromRequest($_REQUEST, $name);
+ } //if
+
+ /*
+ * Populate any relate fields that are linked by a relationship to the calling module.
+ * Clicking the create button on a subpanel for example will populate three values in the $_REQUEST:
+ * 1. return_module => the name of the calling module
+ * 2. return_id => the id of the record in the calling module that the user was viewing and that should be associated with this new record
+ * 3. return_name => the display value of the return_id record - the value to show in any relate field in this EditView
+ * Only do if this fieldDef does not already have a value; if it does it will have been explicitly set, and that should overrule this less specific mechanism
+ */
+ if (isset($this->returnModule) && isset($this->returnName) && empty($this->focus->id) && empty($this->fieldDefs['name']['value']) )
+ {
+ if ( ($this->focus->field_defs[$name]['type'] == 'relate') && isset($this->focus->field_defs[$name][ 'module' ]) && $this->focus->field_defs[$name][ 'module' ] == $this->returnModule )
+ {
+ if (isset( $this->fieldDefs[$name]['id_name'])
+ && !empty($this->returnRelationship)
+ && isset($this->focus->field_defs[$this->fieldDefs[$name]['id_name']]['relationship'])
+ && ($this->returnRelationship == $this->focus->field_defs[$this->fieldDefs[$name]['id_name']]['relationship']))
+ {
+ $this->fieldDefs[$name]['value'] = $this->returnName ;
+ // set the hidden id field for this relate field to the correct value i.e., return_id
+ $this->fieldDefs[$this->fieldDefs[$name]['id_name']]['value'] = $this->returnId ;
+ }
+ }
+ }
+
+ } //foreach
+
+ } //if
+
+ if(isset($this->focus->additional_meta_fields)) {
+ $this->fieldDefs = array_merge($this->fieldDefs, $this->focus->additional_meta_fields);
+ }
+
+ if($this->isDuplicate) {
+ foreach($this->fieldDefs as $name=>$defs) {
+ if(!empty($defs['auto_increment'])) {
+ $this->fieldDefs[$name]['value'] = '';
+ }
+ }
+ }
+ }
+
+ /**
+ * display
+ * This method makes the Smarty variable assignments and then displays the
+ * generated view.
+ * @param $showTitle boolean value indicating whether or not to show a title on the resulting page
+ * @param $ajaxSave boolean value indicating whether or not the operation is an Ajax save request
+ * @return HTML display for view as String
+ */
+ function display(
+ $showTitle = true,
+ $ajaxSave = false
+ )
+ {
+ global $mod_strings, $sugar_config, $app_strings, $app_list_strings, $theme, $current_user;
+
+
+ if(isset($this->defs['templateMeta']['javascript'])) {
+ if(is_array($this->defs['templateMeta']['javascript'])) {
+ $this->th->ss->assign('externalJSFile', 'modules/' . $this->module . '/metadata/editvewdefs.js');
+ } else {
+ $this->th->ss->assign('scriptBlocks', $this->defs['templateMeta']['javascript']);
+ }
+ }
+
+ $this->th->ss->assign('id', $this->fieldDefs['id']['value']);
+ $this->th->ss->assign('offset', $this->offset + 1);
+ $this->th->ss->assign('APP', $app_strings);
+ $this->th->ss->assign('MOD', $mod_strings);
+ $this->th->ss->assign('fields', $this->fieldDefs);
+ $this->th->ss->assign('sectionPanels', $this->sectionPanels);
+ $this->th->ss->assign('returnModule', $this->returnModule);
+ $this->th->ss->assign('returnAction', $this->returnAction);
+ $this->th->ss->assign('returnId', $this->returnId);
+ $this->th->ss->assign('isDuplicate', $this->isDuplicate);
+ $this->th->ss->assign('def', $this->defs);
+ $this->th->ss->assign('useTabs', isset($this->defs['templateMeta']['useTabs']) ? $this->defs['templateMeta']['useTabs'] : false);
+ $this->th->ss->assign('maxColumns', isset($this->defs['templateMeta']['maxColumns']) ? $this->defs['templateMeta']['maxColumns'] : 2);
+ $this->th->ss->assign('module', $this->module);
+ $this->th->ss->assign('headerTpl', isset($this->defs['templateMeta']['form']['headerTpl']) ? $this->defs['templateMeta']['form']['headerTpl'] : 'include/' . $this->view . '/header.tpl');
+ $this->th->ss->assign('footerTpl', isset($this->defs['templateMeta']['form']['footerTpl']) ? $this->defs['templateMeta']['form']['footerTpl'] : 'include/' . $this->view . '/footer.tpl');
+ $this->th->ss->assign('current_user', $current_user);
+ $this->th->ss->assign('bean', $this->focus);
+ $this->th->ss->assign('isAuditEnabled', $this->focus->is_AuditEnabled());
+ $this->th->ss->assign('gridline',$current_user->getPreference('gridline') == 'on' ? '1' : '0');
+
+ global $js_custom_version;
+ global $sugar_version;
+ $this->th->ss->assign('SUGAR_VERSION', $sugar_version);
+ $this->th->ss->assign('JS_CUSTOM_VERSION', $js_custom_version);
+
+ //this is used for multiple forms on one page
+ if ( !empty($this->formName) ) {
+ $form_id = $this->formName;
+ $form_name = $this->formName;
+ }
+ else {
+ $form_id = $this->view;
+ $form_name = $this->view;
+ }
+ if($ajaxSave && empty($this->formName)){
+ $form_id = 'form_'.$this->view .'_'.$this->module;
+ $form_name = $form_id;
+ $this->view = $form_name;
+ //$this->defs['templateMeta']['form']['buttons'] = array();
+ //$this->defs['templateMeta']['form']['buttons']['ajax_save'] = array('id' => 'AjaxSave', 'customCode'=>'
');
+ }
+
+ $form_name = $form_name == "QuickCreate" ? "QuickCreate_{$this->module}" : $form_name;
+ $form_id = $form_id == "QuickCreate" ? "QuickCreate_{$this->module}" : $form_id;
+
+ if(isset($this->defs['templateMeta']['preForm'])) {
+ $this->th->ss->assign('preForm', $this->defs['templateMeta']['preForm']);
+ } //if
+ if(isset($this->defs['templateMeta']['form']['closeFormBeforeCustomButtons'])) {
+ $this->th->ss->assign('closeFormBeforeCustomButtons', $this->defs['templateMeta']['form']['closeFormBeforeCustomButtons']);
+ }
+ if(isset($this->defs['templateMeta']['form']['enctype'])) {
+ $this->th->ss->assign('enctype', 'enctype="'.$this->defs['templateMeta']['form']['enctype'].'"');
+ }
+ //for SugarFieldImage, we must set form enctype to "multipart/form-data"
+ foreach($this->fieldDefs as $field){
+ if(isset($field['type']) && $field['type'] == 'image'){
+ $this->th->ss->assign('enctype', 'enctype="multipart/form-data"');
+ break;
+ }
+ }
+ $this->th->ss->assign('showDetailData', $this->showDetailData);
+ $this->th->ss->assign('showSectionPanelsTitles', $this->showSectionPanelsTitles);
+ $this->th->ss->assign('form_id', $form_id);
+ $this->th->ss->assign('form_name', $form_name);
+ $this->th->ss->assign('set_focus_block', get_set_focus_js());
+
+ $this->th->ss->assign('form', isset($this->defs['templateMeta']['form']) ? $this->defs['templateMeta']['form'] : null);
+ $this->th->ss->assign('includes', isset($this->defs['templateMeta']['includes']) ? $this->defs['templateMeta']['includes'] : null);
+ $this->th->ss->assign('view', $this->view);
+
+ //Calculate time & date formatting (may need to calculate this depending on a setting)
+ global $timedate;
+ $this->th->ss->assign('CALENDAR_DATEFORMAT', $timedate->get_cal_date_format());
+ $this->th->ss->assign('USER_DATEFORMAT', $timedate->get_user_date_format());
+ $time_format = $timedate->get_user_time_format();
+ $this->th->ss->assign('TIME_FORMAT', $time_format);
+
+ $date_format = $timedate->get_cal_date_format();
+ $time_separator = ":";
+ if(preg_match('/\d+([^\d])\d+([^\d]*)/s', $time_format, $match)) {
+ $time_separator = $match[1];
+ }
+
+ // Create Smarty variables for the Calendar picker widget
+ $t23 = strpos($time_format, '23') !== false ? '%H' : '%I';
+ if(!isset($match[2]) || $match[2] == '') {
+ $this->th->ss->assign('CALENDAR_FORMAT', $date_format . ' ' . $t23 . $time_separator . "%M");
+ } else {
+ $pm = $match[2] == "pm" ? "%P" : "%p";
+ $this->th->ss->assign('CALENDAR_FORMAT', $date_format . ' ' . $t23 . $time_separator . "%M" . $pm);
+ }
+
+ $this->th->ss->assign('TIME_SEPARATOR', $time_separator);
+
+ $seps = get_number_seperators();
+ $this->th->ss->assign('NUM_GRP_SEP', $seps[0]);
+ $this->th->ss->assign('DEC_SEP', $seps[1]);
+
+ if($this->view == 'EditView') {
+ $height = $current_user->getPreference('text_editor_height');
+ $width = $current_user->getPreference('text_editor_width');
+ $height = isset($height) ? $height : '300px';
+ $width = isset($width) ? $width : '95%';
+ $this->th->ss->assign('RICH_TEXT_EDITOR_HEIGHT', $height);
+ $this->th->ss->assign('RICH_TEXT_EDITOR_WIDTH', $width);
+ } else {
+ $this->th->ss->assign('RICH_TEXT_EDITOR_HEIGHT', '100px');
+ $this->th->ss->assign('RICH_TEXT_EDITOR_WIDTH', '95%');
+ }
+
+
+ $this->th->ss->assign('SHOW_VCR_CONTROL', $this->showVCRControl);
+
+ //$str='';
+
+ $str = $this->showTitle($showTitle);
+
+ //Use the output filter to trim the whitespace
+ $this->th->ss->load_filter('output', 'trimwhitespace');
+ $str .= $this->th->displayTemplate($this->module, $form_name, $this->tpl, $ajaxSave, $this->defs);
+ return $str;
+ }
+
+ function insertJavascript(
+ $javascript
+ )
+ {
+ $this->ss->assign('javascript', $javascript);
+ }
+
+ function callFunction(
+ $vardef
+ )
+ {
+ $can_execute = true;
+ $execute_function = array();
+ $execute_params = array();
+ if(!empty($vardef['function_class'])){
+ $execute_function[] = $vardef['function_class'];
+ $execute_function[] = $vardef['function_name'];
+ }else{
+ $execute_function = $vardef['function_name'];
+ }
+ foreach($vardef['function_params'] as $param ){
+ if (empty($vardef['function_params_source']) or $vardef['function_params_source']=='parent'){
+ if(empty($this->focus->$param)){
+ $can_execute = false;
+ }else{
+ $execute_params[] = $this->focus->$param;
+ }
+ }else if ($vardef['function_params_source']=='this'){
+ if(empty($this->focus->$param)){
+ $can_execute = false;
+ }else{
+ $execute_params[] = $this->focus->$param;
+ }
+ }else{
+ $can_execute = false;
+ }
+
+ }
+ $value = '';
+ if($can_execute){
+ if(!empty($vardef['function_require'])){
+ require_once($vardef['function_require']);
+ }
+ $value = call_user_func_array($execute_function, $execute_params);
+ }
+ return $value;
+ }
+
+ /**
+ * getValueFromRequest
+ * This is a helper method to extract a value from the request
+ * Array. We do some special processing for fields that start
+ * with 'date_' by checking to see if they also include time
+ * and meridiem values
+ *
+ * @param request The request Array
+ * @param name The field name to extract value for
+ * @return String value for given name
+ */
+ function getValueFromRequest(
+ $request,
+ $name
+ )
+ {
+ //Special processing for date values (combine to one field)
+ if(preg_match('/^date_(.*)$/s', $name, $matches)) {
+ $d = $request[$name];
+
+ if(isset($request['time_' . $matches[1]])) {
+ $d .= ' ' . $request['time_' . $matches[1]];
+ if(isset($request[$matches[1] . '_meridiem'])) {
+ $d .= $request[$matches[1] . '_meridiem'];
+ }
+ } else {
+ if(isset($request['time_hour_' . $matches[1]]) &&
+ isset($request['time_minute_' . $matches[1]])) {
+ $d .= ' ' . $request['time_hour_' . $matches[1]] . ':' . $request['time_minute_' . $matches[1]];
+ }
+ if(isset($request['meridiem'])) {
+ $d .= $request['meridiem'];
+ }
+ }
+ return $d;
+ }
+
+ return $request[$name];
+ }
+
+ /**
+ * Allow Subviews to overwrite this method to show custom titles.
+ * Examples: Projects & Project Templates.
+ * params: $showTitle: boolean for backwards compatibility.
+ */
+ public function showTitle(
+ $showTitle = false
+ )
+ {
+ global $mod_strings, $app_strings;
+
+ if (is_null($this->viewObject))
+ if (!empty($GLOBALS['current_view']))
+ $this->viewObject = $GLOBALS['current_view'];
+ else
+ $this->viewObject = new SugarView();
+
+ if ($showTitle)
+ return $this->viewObject->getModuleTitle();
+
+ return '';
+ }
+}
\ No newline at end of file
diff --git a/include/EditView/PopupQuickCreate.php b/include/EditView/PopupQuickCreate.php
new file mode 100644
index 00000000..38351e8b
--- /dev/null
+++ b/include/EditView/PopupQuickCreate.php
@@ -0,0 +1,54 @@
+defaultProcess = false;
+ parent::SubpanelQuickCreate($module, $view, true);
+ $this->ev->defs['templateMeta']['form']['buttons'] = array('POPUPSAVE', 'POPUPCANCEL');
+ }
+
+ function process($module){
+ $form_name = 'form_QuickCreate_' . $module;
+ $this->ev->formName = $form_name;
+ $this->ev->process(true, $form_name);
+ return $this->ev->display(false, true);
+ }
+}
+?>
\ No newline at end of file
diff --git a/include/EditView/QuickCreate.php b/include/EditView/QuickCreate.php
new file mode 100644
index 00000000..fb03c37f
--- /dev/null
+++ b/include/EditView/QuickCreate.php
@@ -0,0 +1,77 @@
+ss->assign('ASSIGNED_USER_ID', $current_user->id);
+
+ $this->ss->assign('REQUEST', array_merge($_GET, $_POST));
+ $this->ss->assign('CALENDAR_LANG', "en");
+
+ $date_format = $timedate->get_cal_date_format();
+ $this->ss->assign('USER_DATEFORMAT', '('. $timedate->get_user_date_format().')');
+ $this->ss->assign('CALENDAR_DATEFORMAT', $date_format);
+
+ $time_format = $timedate->get_user_time_format();
+ $time_separator = ":";
+ if(preg_match('/\d+([^\d])\d+([^\d]*)/s', $time_format, $match)) {
+ $time_separator = $match[1];
+ }
+ $t23 = strpos($time_format, '23') !== false ? '%H' : '%I';
+ if(!isset($match[2]) || $match[2] == '') {
+ $this->ss->assign('CALENDAR_FORMAT', $date_format . ' ' . $t23 . $time_separator . "%M");
+ } else {
+ $pm = $match[2] == "pm" ? "%P" : "%p";
+ $this->ss->assign('CALENDAR_FORMAT', $date_format . ' ' . $t23 . $time_separator . "%M" . $pm);
+ }
+
+
+ }
+}
+?>
\ No newline at end of file
diff --git a/include/EditView/QuickCreate.tpl b/include/EditView/QuickCreate.tpl
new file mode 100644
index 00000000..1acebaa3
--- /dev/null
+++ b/include/EditView/QuickCreate.tpl
@@ -0,0 +1,38 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+{{include file="/include/EditView/EditView.tpl"}}
diff --git a/include/EditView/SubpanelQuickCreate.php b/include/EditView/SubpanelQuickCreate.php
new file mode 100644
index 00000000..9680091a
--- /dev/null
+++ b/include/EditView/SubpanelQuickCreate.php
@@ -0,0 +1,121 @@
+ev = new EditView();
+ $this->ev->view = $view;
+ $this->ev->ss = new Sugar_Smarty();
+ //$_REQUEST['return_action'] = 'SubPanelViewer';
+ $this->ev->setup($module, null, $source);
+
+ $this->ev->defs['templateMeta']['form']['headerTpl'] = 'include/EditView/header.tpl';
+ $this->ev->defs['templateMeta']['form']['footerTpl'] = 'include/EditView/footer.tpl';
+ $this->ev->defs['templateMeta']['form']['buttons'] = array('SUBPANELSAVE', 'SUBPANELCANCEL', 'SUBPANELFULLFORM');
+
+
+
+ $viewEditSource = 'modules/'.$module.'/views/view.edit.php';
+ if (file_exists('custom/'. $viewEditSource)) {
+ $viewEditSource = 'custom/'. $viewEditSource;
+ }
+
+ if(file_exists($viewEditSource) && !$proccessOverride) {
+ include($viewEditSource);
+ $c = $module . 'ViewEdit';
+
+ if(class_exists($c)) {
+ $view = new $c;
+ if($view->useForSubpanel) {
+ $this->defaultProcess = false;
+
+ //Check if we shold use the module's QuickCreate.tpl file
+ if($view->useModuleQuickCreateTemplate && file_exists('modules/'.$module.'/tpls/QuickCreate.tpl')) {
+ $this->ev->defs['templateMeta']['form']['headerTpl'] = 'modules/'.$module.'/tpls/QuickCreate.tpl';
+ }
+
+ $view->ev = & $this->ev;
+ $view->ss = & $this->ev->ss;
+ $class = $GLOBALS['beanList'][$module];
+ if(!empty($GLOBALS['beanFiles'][$class])){
+ require_once($GLOBALS['beanFiles'][$class]);
+ $bean = new $class();
+ $view->bean = $bean;
+ }
+ $this->ev->formName = 'form_Subpanel'.$this->ev->view .'_'.$module;
+ $view->showTitle = false; // Do not show title since this is for subpanel
+ $view->display();
+ }
+ }
+ } //if
+
+ if($this->defaultProcess && !$proccessOverride) {
+ $this->process($module);
+ }
+ }
+
+ function process($module){
+ $form_name = 'form_Subpanel'.$this->ev->view .'_'.$module;
+ $this->ev->formName = $form_name;
+ $this->ev->process(true, $form_name);
+ echo $this->ev->display(false, true);
+ }
+}
+?>
\ No newline at end of file
diff --git a/include/EditView/SugarVCR.php b/include/EditView/SugarVCR.php
new file mode 100644
index 00000000..01309dd7
--- /dev/null
+++ b/include/EditView/SugarVCR.php
@@ -0,0 +1,187 @@
+ 1) ? $ids[$offset-1] : '';
+ $menu['CURRENT'] = $ids[$offset];
+ $menu['NEXT'] = !empty($ids[$offset+1]) ? $ids[$offset+1] : '';
+ }
+ return $menu;
+ }
+
+ function menu($module, $offset, $isAuditEnabled, $saveAndContinue = false ){
+ $html_text = "";
+ if($offset < 0) {
+ $offset = 0;
+ }
+ //this check if require in cases when you visit the edit view before visiting that modules list view.
+ //you can do this easily either from home or activies or sitemap.
+ $stored_vcr_query=SugarVCR::retrieve($module);
+ if(!empty($_REQUEST['record']) and !empty($stored_vcr_query) and isset($_REQUEST['offset']) and (empty($_REQUEST['isDuplicate']) or $_REQUEST['isDuplicate'] == 'false')){ // bug 15893 - only show VCR if called as an element in a set of records
+ //syncing with display offset;
+ $offset++;
+ $action = (!empty($_REQUEST['action']) ? $_REQUEST['action'] : 'EditView');
+ //$html_text .= "";
+ }
+ return $html_text;
+ }
+
+ function record($module, $offset){
+ $GLOBALS['log']->debug('SUGARVCR is recording more records');
+ $start = max(0, $offset - VCRSTART);
+ $index = $start;
+ $db = DBManagerFactory::getInstance();
+
+ $result = $db->limitQuery(SugarVCR::retrieve($module),$start,($offset+VCREND),false);
+ $index++;
+
+ $ids = array();
+ while(($row = $db->fetchByAssoc($result)) != null){
+ $ids[$index] = $row['id'];
+ $index++;
+ }
+ //now that we have the array of ids, store this in the session
+ $_SESSION[$module.'QUERY_ARRAY'] = $ids;
+ return $ids;
+ }
+
+ function recordIDs($module, $rids, $offset, $totalCount){
+ $index = $offset;
+ $index++;
+ $ids = array();
+ foreach($rids as $id){
+ $ids[$index] = $id;
+ $index++;
+ }
+ //now that we have the array of ids, store this in the session
+ $_SESSION[$module.'QUERY_ARRAY'] = $ids;
+ $_SESSION[$module.'total'] = $totalCount;
+ }
+
+ function erase($module){
+ unset($_SESSION[$module. 'QUERY_ARRAY']);
+ }
+
+ }
+?>
diff --git a/include/EditView/footer.tpl b/include/EditView/footer.tpl
new file mode 100644
index 00000000..5be507c0
--- /dev/null
+++ b/include/EditView/footer.tpl
@@ -0,0 +1,64 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+{{if empty($form.button_location) || $form.button_location == 'bottom'}}
+
+{{if !empty($form) && !empty($form.buttons)}}
+ {{foreach from=$form.buttons key=val item=button}}
+ {{sugar_button module="$module" id="$button" view="$view"}}
+ {{/foreach}}
+{{else}}
+{{sugar_button module="$module" id="SAVE" view="$view" location="FOOTER"}}
+{{sugar_button module="$module" id="CANCEL" view="$view" location="FOOTER"}}
+{{/if}}
+{{if empty($form.hideAudit) || !$form.hideAudit}}
+{{sugar_button module="$module" id="Audit" view="$view"}}
+{{/if}}
+
+{{/if}}
+
+{{if $externalJSFile}}
+require_once("'".$externalJSFile."'");
+{{/if}}
+
+{$set_focus_block}
+
+{{if isset($scriptBlocks)}}
+
+{{$scriptBlocks}}
+
+{{/if}}
diff --git a/include/EditView/header.tpl b/include/EditView/header.tpl
new file mode 100644
index 00000000..8b16fbd2
--- /dev/null
+++ b/include/EditView/header.tpl
@@ -0,0 +1,91 @@
+{*
+/*********************************************************************************
+ * SugarCRM is a customer relationship management program developed by
+ * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License version 3 as published by the
+ * Free Software Foundation with the addition of the following permission added
+ * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
+ * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
+ * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with
+ * this program; if not, see http://www.gnu.org/licenses or write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
+ * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU Affero General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "Powered by
+ * SugarCRM" logo. If the display of the logo is not reasonably feasible for
+ * technical reasons, the Appropriate Legal Notices must display the words
+ * "Powered by SugarCRM".
+ ********************************************************************************/
+
+*}
+
+
+
+
+
+
+{if isset($smarty.request.isDuplicate) && $smarty.request.isDuplicate eq "true"}
+
+
+
+{else}
+
+{/if}
+
+
+
+
+
+
+
+{if !empty($smarty.request.return_module) || !empty($smarty.request.relate_to)}
+
+
+{/if}
+
+{{if isset($form.hidden)}}
+{{foreach from=$form.hidden item=field}}
+{{$field}}
+{{/foreach}}
+{{/if}}
+{{if empty($form.button_location) || $form.button_location == 'top'}}
+{{if !empty($form) && !empty($form.buttons)}}
+ {{foreach from=$form.buttons key=val item=button}}
+ {{sugar_button module="$module" id="$button" view="$view"}}
+ {{/foreach}}
+{{else}}
+{{sugar_button module="$module" id="SAVE" view="$view" location="HEADER"}}
+{{sugar_button module="$module" id="CANCEL" view="$view" location="HEADER"}}
+{{/if}}
+{{if empty($form.hideAudit) || !$form.hideAudit}}
+{{sugar_button module="$module" id="Audit" view="$view"}}
+{{/if}}
+{{/if}}
+
+{{$ADMIN_EDIT}}
+{{if $panelCount == 0}}
+ {{* Render tag for VCR control if SHOW_VCR_CONTROL is true *}}
+ {{if $SHOW_VCR_CONTROL}}
+ {$PAGINATION}
+ {{/if}}
+{{/if}}
+
+
+
\ No newline at end of file
diff --git a/include/GroupedTabs/GroupedTabStructure.php b/include/GroupedTabs/GroupedTabStructure.php
new file mode 100644
index 00000000..9ecc18a6
--- /dev/null
+++ b/include/GroupedTabs/GroupedTabStructure.php
@@ -0,0 +1,149 @@
+ $subModules)
+ {
+ $tabStructure[$mainTab]['modules'] = array_merge($tabStructure[$mainTab]['modules'], $subModules);
+ }
+ }
+ else
+ {
+ $tabStructure =& $GLOBALS['tabStructure'];
+ }
+
+ $retStruct = array();
+ $mlhUsed = array();
+ //the invisible list should be merged if activities is set to be hidden
+ if(in_array('Activities', $modList)){
+ $modList = array_merge($modList,$modInvisListActivities);
+ }
+
+ //Add any iFrame tabs to the 'other' group.
+ $moduleExtraMenu = array();
+ if(!should_hide_iframes()) {
+ $iFrame = new iFrame();
+ $frames = $iFrame->lookup_frames('tab');
+ foreach($frames as $key => $values){
+ $moduleExtraMenu[$key] = $values;
+ }
+ } else if(isset($modList['iFrames'])) {
+ unset($modList['iFrames']);
+ }
+
+ $modList = array_merge($modList,$moduleExtraMenu);
+
+ /* Only return modules which exists in the modList */
+ foreach($tabStructure as $mainTab => $subModules)
+ {
+ //Ensure even empty groups are returned
+ if($labelAsKey){
+ $retStruct[$subModules['label']]['modules'] = array();
+ }else{
+ $retStruct[$app_strings[$subModules['label']]]['modules']= array();
+ }
+
+ foreach($subModules['modules'] as $key => $subModule)
+ {
+ /* Perform a case-insensitive in_array check
+ * and mark whichever module matched as used.
+ */
+ foreach($modList as $module)
+ {
+ if(is_string($module) && strcasecmp($subModule, $module) === 0)
+ {
+ if($labelAsKey){
+ $retStruct[$subModules['label']]['modules'][$module] = $app_list_strings['moduleList'][$module];
+ }else{
+ $retStruct[$app_strings[$subModules['label']]]['modules'][$module] = $app_list_strings['moduleList'][$module];
+ }
+ $mlhUsed[$module] = true;
+ break;
+ }
+ }
+ }
+ //remove the group tabs if it has no sub modules under it
+ if($labelAsKey){
+ if (empty($retStruct[$subModules['label']]['modules'])){
+ unset($retStruct[$subModules['label']]);
+ }
+ }else{
+ if (empty($retStruct[$app_strings[$subModules['label']]]['modules'])){
+ unset($retStruct[$app_strings[$subModules['label']]]);
+ }
+ }
+ }
+
+// _pp($retStruct);
+ return $retStruct;
+ }
+}
+
+?>
diff --git a/include/HTTP_WebDAV_Server/README b/include/HTTP_WebDAV_Server/README
new file mode 100644
index 00000000..9847b261
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/README
@@ -0,0 +1,10 @@
+This code depends on code introduced into the developement branch for
+PHP 4.3, so it will not run with PHP releases before 4.3.0
+
+preliminary documentation is available in the dav.txt file,
+although it is currently a little outdated ...
+
+Server/Filesystem.php contains a sample implementation for a simple
+file server (including property and lock info storage in a mySQL
+database, see db/Fileserver.sql). This sample should give you a good
+clue about how to use this class for your own purpose.
diff --git a/include/HTTP_WebDAV_Server/Server.php b/include/HTTP_WebDAV_Server/Server.php
new file mode 100644
index 00000000..b3d46e7d
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/Server.php
@@ -0,0 +1,1873 @@
+ |
+// | Christian Stocker |
+// +----------------------------------------------------------------------+
+//
+
+//
+require_once "include/HTTP_WebDAV_Server/Tools/_parse_propfind.php";
+require_once "include/HTTP_WebDAV_Server/Tools/_parse_proppatch.php";
+require_once "include/HTTP_WebDAV_Server/Tools/_parse_lockinfo.php";
+
+
+
+/**
+ * Virtual base class for implementing WebDAV servers
+ *
+ * WebDAV server base class, needs to be extended to do useful work
+ *
+ * @package HTTP_WebDAV_Server
+ * @author Hartmut Holzgraefe
+ * @version 0.99.1dev
+ */
+class HTTP_WebDAV_Server
+{
+ // {{{ Member Variables
+
+ /**
+ * URI path for this request
+ *
+ * @var string
+ */
+ var $path;
+
+ /**
+ * Realm string to be used in authentification popups
+ *
+ * @var string
+ */
+ var $http_auth_realm = "PHP WebDAV";
+
+ /**
+ * String to be used in "X-Dav-Powered-By" header
+ *
+ * @var string
+ */
+ var $dav_powered_by = "";
+
+ /**
+ * Remember parsed If: (RFC2518/9.4) header conditions
+ *
+ * @var array
+ */
+ var $_if_header_uris = array();
+
+ /**
+ * HTTP response status/message
+ *
+ * @var string
+ */
+ var $_http_status = "200 OK";
+
+ /**
+ * encoding of property values passed in
+ *
+ * @var string
+ */
+ var $_prop_encoding = "utf-8";
+
+ // }}}
+
+ // {{{ Constructor
+
+ /**
+ * Constructor
+ *
+ * @param void
+ */
+ function HTTP_WebDAV_Server()
+ {
+ // PHP messages destroy XML output -> switch them off
+ ini_set("display_errors", 0);
+ }
+
+ // }}}
+
+ // {{{ ServeRequest()
+ /**
+ * Serve WebDAV HTTP request
+ *
+ * dispatch WebDAV HTTP request to the apropriate method handler
+ *
+ * @param void
+ * @return void
+ */
+ function ServeRequest()
+ {
+ // identify ourselves
+ if (empty($this->dav_powered_by)) {
+ header("X-Dav-Powered-By: PHP class: ".get_class($this));
+ } else {
+ header("X-Dav-Powered-By: ".$this->dav_powered_by );
+ }
+
+ // check authentication
+ if (!$this->_check_auth()) {
+ $this->http_status('401 Unauthorized');
+
+ // RFC2518 says we must use Digest instead of Basic
+ // but Microsoft Clients do not support Digest
+ // and we don't support NTLM and Kerberos
+ // so we are stuck with Basic here
+ header('WWW-Authenticate: Basic realm="'.($this->http_auth_realm).'"');
+
+ return;
+ }
+
+ // check
+ if(! $this->_check_if_header_conditions()) {
+ $this->http_status("412 Precondition failed");
+ return;
+ }
+
+ // set path
+ $this->path = $this->_urldecode(!empty($_SERVER["PATH_INFO"]) ? $_SERVER["PATH_INFO"] : "/");
+ if(ini_get("magic_quotes_gpc")) {
+ $this->path = stripslashes($this->path);
+ }
+
+
+ // detect requested method names
+ $method = strtolower($_SERVER["REQUEST_METHOD"]);
+ $wrapper = "http_".$method;
+
+ // activate HEAD emulation by GET if no HEAD method found
+ if ($method == "head" && !method_exists($this, "head")) {
+ $method = "get";
+ }
+
+ if (method_exists($this, $wrapper) && ($method == "options" || method_exists($this, $method))) {
+ $this->$wrapper(); // call method by name
+ } else { // method not found/implemented
+ if ($_SERVER["REQUEST_METHOD"] == "LOCK") {
+ $this->http_status("412 Precondition failed");
+ } else {
+ $this->http_status("405 Method not allowed");
+ header("Allow: ".join(", ", $this->_allow())); // tell client what's allowed
+ }
+ }
+ }
+
+ // }}}
+
+ // {{{ abstract WebDAV methods
+
+ // {{{ GET()
+ /**
+ * GET implementation
+ *
+ * overload this method to retrieve resources from your server
+ *
+ *
+ *
+ * @abstract
+ * @param array &$params Array of input and output parameters
+ * input
+ * output
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function GET(&$params)
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // {{{ PUT()
+ /**
+ * PUT implementation
+ *
+ * PUT implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function PUT()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // {{{ COPY()
+
+ /**
+ * COPY implementation
+ *
+ * COPY implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function COPY()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // {{{ MOVE()
+
+ /**
+ * MOVE implementation
+ *
+ * MOVE implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function MOVE()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // {{{ DELETE()
+
+ /**
+ * DELETE implementation
+ *
+ * DELETE implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function DELETE()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+ // }}}
+
+ // {{{ PROPFIND()
+
+ /**
+ * PROPFIND implementation
+ *
+ * PROPFIND implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function PROPFIND()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // {{{ PROPPATCH()
+
+ /**
+ * PROPPATCH implementation
+ *
+ * PROPPATCH implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function PROPPATCH()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+ // }}}
+
+ // {{{ LOCK()
+
+ /**
+ * LOCK implementation
+ *
+ * LOCK implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function LOCK()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+ // }}}
+
+ // {{{ UNLOCK()
+
+ /**
+ * UNLOCK implementation
+ *
+ * UNLOCK implementation
+ *
+ * @abstract
+ * @param array &$params
+ * @returns int HTTP-Statuscode
+ */
+
+ /* abstract
+ function UNLOCK()
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+ // }}}
+
+ // }}}
+
+ // {{{ other abstract methods
+
+ // {{{ check_auth()
+
+ /**
+ * check authentication
+ *
+ * overload this method to retrieve and confirm authentication information
+ *
+ * @abstract
+ * @param string type Authentication type, e.g. "basic" or "digest"
+ * @param string username Transmitted username
+ * @param string passwort Transmitted password
+ * @returns bool Authentication status
+ */
+
+ /* abstract
+ function checkAuth($type, $username, $password)
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // {{{ checklock()
+
+ /**
+ * check lock status for a resource
+ *
+ * overload this method to return shared and exclusive locks
+ * active for this resource
+ *
+ * @abstract
+ * @param string resource Resource path to check
+ * @returns array An array of lock entries each consisting
+ * of 'type' ('shared'/'exclusive'), 'token' and 'timeout'
+ */
+
+ /* abstract
+ function checklock($resource)
+ {
+ // dummy entry for PHPDoc
+ }
+ */
+
+ // }}}
+
+ // }}}
+
+ // {{{ WebDAV HTTP method wrappers
+
+ // {{{ http_OPTIONS()
+
+ /**
+ * OPTIONS method handler
+ *
+ * The OPTIONS method handler creates a valid OPTIONS reply
+ * including Dav: and Allowed: heaers
+ * based on the implemented methods found in the actual instance
+ *
+ * @param void
+ * @return void
+ */
+ function http_OPTIONS()
+ {
+ // Microsoft clients default to the Frontpage protocol
+ // unless we tell them to use WebDAV
+ header("MS-Author-Via: DAV");
+
+ // get allowed methods
+ $allow = $this->_allow();
+
+ // dav header
+ $dav = array(1); // assume we are always dav class 1 compliant
+ if (isset($allow['LOCK'])) {
+ $dav[] = 2; // dav class 2 requires that locking is supported
+ }
+
+ // tell clients what we found
+ $this->http_status("200 OK");
+ header("DAV: " .join("," , $dav));
+ header("Allow: ".join(", ", $allow));
+ }
+
+ // }}}
+
+
+ // {{{ http_PROPFIND()
+
+ /**
+ * PROPFIND method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_PROPFIND()
+ {
+ $options = Array();
+ $options["path"] = $this->path;
+
+ // search depth from header (default is "infinity)
+ if (isset($_SERVER['HTTP_DEPTH'])) {
+ $options["depth"] = $_SERVER["HTTP_DEPTH"];
+ } else {
+ $options["depth"] = "infinity";
+ }
+
+ // analyze request payload
+ $propinfo = new _parse_propfind("php://input");
+ if (!$propinfo->success) {
+ $this->http_status("400 Error");
+ return;
+ }
+ $options['props'] = $propinfo->props;
+
+ // call user handler
+ if (!$this->propfind($options, $files)) {
+ $this->http_status("404 Not Found");
+ return;
+ }
+
+ // collect namespaces here
+ $ns_hash = array();
+
+ // Microsoft Clients need this special namespace for date and time values
+ $ns_defs = "xmlns:ns0=\"urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/\"";
+
+ // now we loop over all returned file entries
+ foreach($files["files"] as $filekey => $file) {
+
+ // nothing to do if no properties were returend for a file
+ if (!isset($file["props"]) || !is_array($file["props"])) {
+ continue;
+ }
+
+ // now loop over all returned properties
+ foreach($file["props"] as $key => $prop) {
+ // as a convenience feature we do not require that user handlers
+ // restrict returned properties to the requested ones
+ // here we strip all unrequested entries out of the response
+
+ switch($options['props']) {
+ case "all":
+ // nothing to remove
+ break;
+
+ case "names":
+ // only the names of all existing properties were requested
+ // so we remove all values
+ unset($files["files"][$filekey]["props"][$key]["val"]);
+ break;
+
+ default:
+ $found = false;
+
+ // search property name in requested properties
+ foreach((array)$options["props"] as $reqprop) {
+ if ( $reqprop["name"] == $prop["name"]
+ && $reqprop["xmlns"] == $prop["ns"]) {
+ $found = true;
+ break;
+ }
+ }
+
+ // unset property and continue with next one if not found/requested
+ if (!$found) {
+ $files["files"][$filekey]["props"][$key]="";
+ continue(2);
+ }
+ break;
+ }
+
+ // namespace handling
+ if (empty($prop["ns"])) continue; // no namespace
+ $ns = $prop["ns"];
+ if ($ns == "DAV:") continue; // default namespace
+ if (isset($ns_hash[$ns])) continue; // already known
+
+ // register namespace
+ $ns_name = "ns".(count($ns_hash) + 1);
+ $ns_hash[$ns] = $ns_name;
+ $ns_defs .= " xmlns:$ns_name=\"$ns\"";
+ }
+
+ // we also need to add empty entries for properties that were requested
+ // but for which no values where returned by the user handler
+ if (is_array($options['props'])) {
+ foreach($options["props"] as $reqprop) {
+ if($reqprop['name']=="") continue; // skip empty entries
+
+ $found = false;
+
+ // check if property exists in result
+ foreach($file["props"] as $prop) {
+ if ( $reqprop["name"] == $prop["name"]
+ && $reqprop["xmlns"] == $prop["ns"]) {
+ $found = true;
+ break;
+ }
+ }
+
+ if (!$found) {
+ if($reqprop["xmlns"]==="DAV:" && $reqprop["name"]==="lockdiscovery") {
+ // lockdiscovery is handled by the base class
+ $files["files"][$filekey]["props"][]
+ = $this->mkprop("DAV:",
+ "lockdiscovery" ,
+ $this->lockdiscovery($files["files"][$filekey]['path']));
+ } else {
+ // add empty value for this property
+ $files["files"][$filekey]["noprops"][] =
+ $this->mkprop($reqprop["xmlns"], $reqprop["name"], "");
+
+ // register property namespace if not known yet
+ if ($reqprop["xmlns"] != "DAV:" && !isset($ns_hash[$reqprop["xmlns"]])) {
+ $ns_name = "ns".(count($ns_hash) + 1);
+ $ns_hash[$reqprop["xmlns"]] = $ns_name;
+ $ns_defs .= " xmlns:$ns_name=\"$reqprop[xmlns]\"";
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // now we generate the reply header ...
+ $this->http_status("207 Multi-Status");
+ header('Content-Type: text/xml; charset="utf-8"');
+
+ // ... and payload
+ echo "\n";
+ echo "\n";
+
+ foreach($files["files"] as $file) {
+ // ignore empty or incomplete entries
+ if(!is_array($file) || empty($file) || !isset($file["path"])) continue;
+ $path = $file['path'];
+ if(!is_string($path) || $path==="") continue;
+
+ echo " \n";
+
+ $href = (@$_SERVER["HTTPS"] === "on" ? "https:" : "http:");
+ $href.= "//".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
+ $href.= $path;
+ //TODO make sure collection resource pathes end in a trailing slash
+
+ echo " $href \n";
+
+ // report all found properties and their values (if any)
+ if (isset($file["props"]) && is_array($file["props"])) {
+ echo " \n";
+ echo " \n";
+
+ foreach($file["props"] as $key => $prop) {
+
+ if (!is_array($prop)) continue;
+ if (!isset($prop["name"])) continue;
+
+ if (!isset($prop["val"]) || $prop["val"] === "" || $prop["val"] === false) {
+ // empty properties (cannot use empty() for check as "0" is a legal value here)
+ if($prop["ns"]=="DAV:") {
+ echo " \n";
+ } else if(!empty($prop["ns"])) {
+ echo " <".$ns_hash[$prop["ns"]].":$prop[name]/>\n";
+ } else {
+ echo " <$prop[name] xmlns=\"\"/>";
+ }
+ } else if ($prop["ns"] == "DAV:") {
+ // some WebDAV properties need special treatment
+ switch ($prop["name"]) {
+ case "creationdate":
+ echo " "
+ . gmdate("Y-m-d\\TH:i:s\\Z",$prop['val'])
+ . " \n";
+ break;
+ case "getlastmodified":
+ echo " "
+ . TimeDate::httptime($prop['val'])
+ . " \n";
+ break;
+ case "resourcetype":
+ echo " \n";
+ break;
+ case "supportedlock":
+ echo " $prop[val] \n";
+ break;
+ case "lockdiscovery":
+ echo " \n";
+ echo $prop["val"];
+ echo " \n";
+ break;
+ default:
+ echo " "
+ . $this->_prop_encode(htmlspecialchars($prop['val']))
+ . " \n";
+ break;
+ }
+ } else {
+ // properties from namespaces != "DAV:" or without any namespace
+ if ($prop["ns"]) {
+ echo " <" . $ns_hash[$prop["ns"]] . ":$prop[name]>"
+ . $this->_prop_encode(htmlspecialchars($prop['val']))
+ . "" . $ns_hash[$prop["ns"]] . ":$prop[name]>\n";
+ } else {
+ echo " <$prop[name] xmlns=\"\">"
+ . $this->_prop_encode(htmlspecialchars($prop['val']))
+ . "$prop[name]>\n";
+ }
+ }
+ }
+
+ echo " \n";
+ echo " HTTP/1.1 200 OK \n";
+ echo " \n";
+ }
+
+ // now report all properties requested bot not found
+ if (isset($file["noprops"])) {
+ echo " \n";
+ echo " \n";
+
+ foreach($file["noprops"] as $key => $prop) {
+ if ($prop["ns"] == "DAV:") {
+ echo " \n";
+ } else if ($prop["ns"] == "") {
+ echo " <$prop[name] xmlns=\"\"/>\n";
+ } else {
+ echo " <" . $ns_hash[$prop["ns"]] . ":$prop[name]/>\n";
+ }
+ }
+
+ echo " \n";
+ echo " HTTP/1.1 404 Not Found \n";
+ echo " \n";
+ }
+
+ echo " \n";
+ }
+
+ echo " \n";
+ }
+
+
+ // }}}
+
+ // {{{ http_PROPPATCH()
+
+ /**
+ * PROPPATCH method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_PROPPATCH()
+ {
+ if($this->_check_lock_status($this->path)) {
+ $options = Array();
+ $options["path"] = $this->path;
+
+ $propinfo = new _parse_proppatch("php://input");
+
+ if (!$propinfo->success) {
+ $this->http_status("400 Error");
+ return;
+ }
+
+ $options['props'] = $propinfo->props;
+
+ $responsedescr = $this->proppatch($options);
+
+ $this->http_status("207 Multi-Status");
+ header('Content-Type: text/xml; charset="utf-8"');
+
+ echo "\n";
+
+ echo "\n";
+ echo " \n";
+ echo " ".$this->_urlencode($_SERVER["SCRIPT_NAME"].$this->path)." \n";
+
+ foreach($options["props"] as $prop) {
+ echo " \n";
+ echo " <$prop[name] xmlns=\"$prop[ns]\"/> \n";
+ echo " HTTP/1.1 $prop[status] \n";
+ echo " \n";
+ }
+
+ if ($responsedescr) {
+ echo " ".
+ $this->_prop_encode(htmlspecialchars($responsedescr)).
+ " \n";
+ }
+
+ echo " \n";
+ echo " \n";
+ } else {
+ $this->http_status("423 Locked");
+ }
+ }
+
+ // }}}
+
+
+ // {{{ http_MKCOL()
+
+ /**
+ * MKCOL method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_MKCOL()
+ {
+ $options = Array();
+ $options["path"] = $this->path;
+
+ $stat = $this->mkcol($options);
+
+ $this->http_status($stat);
+ }
+
+ // }}}
+
+
+ // {{{ http_GET()
+
+ /**
+ * GET method handler
+ *
+ * @param void
+ * @returns void
+ */
+ function http_GET()
+ {
+ // TODO check for invalid stream
+ $options = Array();
+ $options["path"] = $this->path;
+
+ $this->_get_ranges($options);
+
+ if (true === ($status = $this->get($options))) {
+ if (!headers_sent()) {
+ $status = "200 OK";
+
+ if (!isset($options['mimetype'])) {
+ $options['mimetype'] = "application/octet-stream";
+ }
+ header("Content-type: $options[mimetype]");
+
+ if (isset($options['mtime'])) {
+ header("Last-modified: ".TimeDate::httpTime());
+ }
+
+ if (isset($options['stream'])) {
+ // GET handler returned a stream
+ if (!empty($options['ranges']) && (0===fseek($options['stream'], 0, SEEK_SET))) {
+ // partial request and stream is seekable
+
+ if (count($options['ranges']) === 1) {
+ $range = $options['ranges'][0];
+
+ if (isset($range['start'])) {
+ fseek($options['stream'], $range['start'], SEEK_SET);
+ if (feof($options['stream'])) {
+ http_status("416 Requested range not satisfiable");
+ exit;
+ }
+
+ if (isset($range['end'])) {
+ $size = $range['end']-$range['start']+1;
+ http_status("206 partial");
+ header("Content-length: $size");
+ header("Content-range: $range[start]-$range[end]/"
+ . (isset($options['size']) ? $options['size'] : "*"));
+ while ($size && !feof($options['stream'])) {
+ $buffer = fread($options['stream'], 4096);
+ $size -= strlen($buffer);
+ echo $buffer;
+ }
+ } else {
+ http_status("206 partial");
+ if (isset($options['size'])) {
+ header("Content-length: ".($options['size'] - $range['start']));
+ header("Content-range: $start-$end/"
+ . (isset($options['size']) ? $options['size'] : "*"));
+ }
+ fpassthru($options['stream']);
+ }
+ } else {
+ header("Content-length: ".$range['last']);
+ fseek($options['stream'], -$range['last'], SEEK_END);
+ fpassthru($options['stream']);
+ }
+ } else {
+ $this->_multipart_byterange_header(); // init multipart
+ foreach ($options['ranges'] as $range) {
+ // TODO what if size unknown? 500?
+ if (isset($range['start'])) {
+ $from = $range['start'];
+ $to = !empty($range['end']) ? $range['end'] : $options['size']-1;
+ } else {
+ $from = $options['size'] - $range['last']-1;
+ $to = $options['size'] -1;
+ }
+ $total = isset($options['size']) ? $options['size'] : "*";
+ $size = $to - $from + 1;
+ $this->_multipart_byterange_header($options['mimetype'], $from, $to, $total);
+
+
+ fseek($options['stream'], $start, SEEK_SET);
+ while ($size && !feof($options['stream'])) {
+ $buffer = fread($options['stream'], 4096);
+ $size -= strlen($buffer);
+ echo $buffer;
+ }
+ }
+ $this->_multipart_byterange_header(); // end multipart
+ }
+ } else {
+ // normal request or stream isn't seekable, return full content
+ if (isset($options['size'])) {
+ header("Content-length: ".$options['size']);
+ }
+ fpassthru($options['stream']);
+ return; // no more headers
+ }
+ } elseif (isset($options['data'])) {
+ if (is_array($options['data'])) {
+ // reply to partial request
+ } else {
+ header("Content-length: ".strlen($options['data']));
+ echo $options['data'];
+ }
+ }
+ }
+ }
+
+ if (false === $status) {
+ $this->http_status("404 not found");
+ }
+
+ $this->http_status("$status");
+ }
+
+
+ /**
+ * parse HTTP Range: header
+ *
+ * @param array options array to store result in
+ * @return void
+ */
+ function _get_ranges(&$options)
+ {
+ // process Range: header if present
+ if (isset($_SERVER['HTTP_RANGE'])) {
+
+ // we only support standard "bytes" range specifications for now
+ if (preg_match("/bytes[[:space:]]*=[[:space:]]*(.+)/", $_SERVER['HTTP_RANGE'], $matches)) {
+ $options["ranges"] = array();
+
+ // ranges are comma separated
+ foreach (explode(",", $matches[1]) as $range) {
+ // ranges are either from-to pairs or just end positions
+ list($start, $end) = explode("-", $range);
+ $options["ranges"][] = ($start==="")
+ ? array("last"=>$end)
+ : array("start"=>$start, "end"=>$end);
+ }
+ }
+ }
+ }
+
+ /**
+ * generate separator headers for multipart response
+ *
+ * first and last call happen without parameters to generate
+ * the initial header and closing sequence, all calls inbetween
+ * require content mimetype, start and end byte position and
+ * optionaly the total byte length of the requested resource
+ *
+ * @param string mimetype
+ * @param int start byte position
+ * @param int end byte position
+ * @param int total resource byte size
+ */
+ function _multipart_byterange_header($mimetype = false, $from = false, $to=false, $total=false)
+ {
+ if ($mimetype === false) {
+ if (!isset($this->multipart_separator)) {
+ // initial
+
+ // a little naive, this sequence *might* be part of the content
+ // but it's really not likely and rather expensive to check
+ $this->multipart_separator = "SEPARATOR_".md5(microtime());
+
+ // generate HTTP header
+ header("Content-type: multipart/byteranges; boundary=".$this->multipart_separator);
+ } else {
+ // final
+
+ // generate closing multipart sequence
+ echo "\n--{$this->multipart_separator}--";
+ }
+ } else {
+ // generate separator and header for next part
+ echo "\n--{$this->multipart_separator}\n";
+ echo "Content-type: $mimetype\n";
+ echo "Content-range: $from-$to/". ($total === false ? "*" : $total);
+ echo "\n\n";
+ }
+ }
+
+
+
+ // }}}
+
+ // {{{ http_HEAD()
+
+ /**
+ * HEAD method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_HEAD()
+ {
+ $status = false;
+ $options = Array();
+ $options["path"] = $this->path;
+
+ if (method_exists($this, "HEAD")) {
+ $status = $this->head($options);
+ } else if (method_exists($this, "GET")) {
+ ob_start();
+ $status = $this->GET($options);
+ ob_end_clean();
+ }
+
+ if($status===true) $status = "200 OK";
+ if($status===false) $status = "404 Not found";
+
+ $this->http_status($status);
+ }
+
+ // }}}
+
+ // {{{ http_PUT()
+
+ /**
+ * PUT method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_PUT()
+ {
+ if ($this->_check_lock_status($this->path)) {
+ $options = Array();
+ $options["path"] = $this->path;
+ $options["content_length"] = $_SERVER["CONTENT_LENGTH"];
+
+ // get the Content-type
+ if (isset($_SERVER["CONTENT_TYPE"])) {
+ // for now we do not support any sort of multipart requests
+ if (!strncmp($_SERVER["CONTENT_TYPE"], "multipart/", 10)) {
+ $this->http_status("501 not implemented");
+ echo "The service does not support mulipart PUT requests";
+ return;
+ }
+ $options["content_type"] = $_SERVER["CONTENT_TYPE"];
+ } else {
+ // default content type if none given
+ $options["content_type"] = "application/octet-stream";
+ }
+
+ /* RFC 2616 2.6 says: "The recipient of the entity MUST NOT
+ ignore any Content-* (e.g. Content-Range) headers that it
+ does not understand or implement and MUST return a 501
+ (Not Implemented) response in such cases."
+ */
+ foreach ($_SERVER as $key => $val) {
+ if (strncmp($key, "HTTP_CONTENT", 11)) continue;
+ switch ($key) {
+ case 'HTTP_CONTENT_ENCODING': // RFC 2616 14.11
+ // TODO support this if ext/zlib filters are available
+ $this->http_status("501 not implemented");
+ echo "The service does not support '$val' content encoding";
+ return;
+
+ case 'HTTP_CONTENT_LANGUAGE': // RFC 2616 14.12
+ // we assume it is not critical if this one is ignored
+ // in the actual PUT implementation ...
+ $options["content_language"] = $value;
+ break;
+
+ case 'HTTP_CONTENT_LOCATION': // RFC 2616 14.14
+ /* The meaning of the Content-Location header in PUT
+ or POST requests is undefined; servers are free
+ to ignore it in those cases. */
+ break;
+
+ case 'HTTP_CONTENT_RANGE': // RFC 2616 14.16
+ // single byte range requests are supported
+ // the header format is also specified in RFC 2616 14.16
+ // TODO we have to ensure that implementations support this or send 501 instead
+ if (!preg_match('@bytes\s+(\d+)-(\d+)/((\d+)|\*)@', $value, $matches)) {
+ $this->http_status("400 bad request");
+ echo "The service does only support single byte ranges";
+ return;
+ }
+
+ $range = array("start"=>$matches[1], "end"=>$matches[2]);
+ if (is_numeric($matches[3])) {
+ $range["total_length"] = $matches[3];
+ }
+ $option["ranges"][] = $range;
+
+ // TODO make sure the implementation supports partial PUT
+ // this has to be done in advance to avoid data being overwritten
+ // on implementations that do not support this ...
+ break;
+
+ case 'HTTP_CONTENT_MD5': // RFC 2616 14.15
+ // TODO: maybe we can just pretend here?
+ $this->http_status("501 not implemented");
+ echo "The service does not support content MD5 checksum verification";
+ return;
+
+ default:
+ // any other unknown Content-* headers
+ $this->http_status("501 not implemented");
+ echo "The service does not support '$key'";
+ return;
+ }
+ }
+
+ $options["stream"] = fopen("php://input", "r");
+
+ $stat = $this->PUT($options);
+
+ if (is_resource($stat) && get_resource_type($stat) == "stream") {
+ $stream = $stat;
+ if (!empty($options["ranges"])) {
+ // TODO multipart support is missing (see also above)
+ // TODO error checking
+ $stat = fseek($stream, $range[0]["start"], SEEK_SET);
+ fwrite($stream, fread($options["stream"], $range[0]["end"]-$range[0]["start"]+1));
+ } else {
+ while (!feof($options["stream"])) {
+ fwrite($stream, fread($options["stream"], 4096));
+ }
+ }
+ fclose($stream);
+
+ $stat = $options["new"] ? "201 Created" : "204 No Content";
+ }
+
+ $this->http_status($stat);
+ } else {
+ $this->http_status("423 Locked");
+ }
+ }
+
+ // }}}
+
+
+ // {{{ http_DELETE()
+
+ /**
+ * DELETE method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_DELETE()
+ {
+ // check RFC 2518 Section 9.2, last paragraph
+ if (isset($_SERVER["HTTP_DEPTH"])) {
+ if ($_SERVER["HTTP_DEPTH"] != "infinity") {
+ $this->http_status("400 Bad Request");
+ return;
+ }
+ }
+
+ // check lock status
+ if ($this->_check_lock_status($this->path)) {
+ // ok, proceed
+ $options = Array();
+ $options["path"] = $this->path;
+
+ $stat = $this->delete($options);
+
+ $this->http_status($stat);
+ } else {
+ // sorry, its locked
+ $this->http_status("423 Locked");
+ }
+ }
+
+ // }}}
+
+ // {{{ http_COPY()
+
+ /**
+ * COPY method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_COPY()
+ {
+ // no need to check source lock status here
+ // destination lock status is always checked by the helper method
+ $this->_copymove("copy");
+ }
+
+ // }}}
+
+ // {{{ http_MOVE()
+
+ /**
+ * MOVE method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_MOVE()
+ {
+ if ($this->_check_lock_status($this->path)) {
+ // destination lock status is always checked by the helper method
+ $this->_copymove("move");
+ } else {
+ $this->http_status("423 Locked");
+ }
+ }
+
+ // }}}
+
+
+ // {{{ http_LOCK()
+
+ /**
+ * LOCK method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_LOCK()
+ {
+ $options = Array();
+ $options["path"] = $this->path;
+
+ if (isset($_SERVER['HTTP_DEPTH'])) {
+ $options["depth"] = $_SERVER["HTTP_DEPTH"];
+ } else {
+ $options["depth"] = "infinity";
+ }
+
+ if (isset($_SERVER["HTTP_TIMEOUT"])) {
+ $options["timeout"] = explode(",", $_SERVER["HTTP_TIMEOUT"]);
+ }
+
+ if(empty($_SERVER['CONTENT_LENGTH']) && !empty($_SERVER['HTTP_IF'])) {
+ // check if locking is possible
+ if(!$this->_check_lock_status($this->path)) {
+ $this->http_status("423 Locked");
+ return;
+ }
+
+ // refresh lock
+ $options["update"] = substr($_SERVER['HTTP_IF'], 2, -2);
+ $stat = $this->lock($options);
+ } else {
+ // extract lock request information from request XML payload
+ $lockinfo = new _parse_lockinfo("php://input");
+ if (!$lockinfo->success) {
+ $this->http_status("400 bad request");
+ }
+
+ // check if locking is possible
+ if(!$this->_check_lock_status($this->path, $lockinfo->lockscope === "shared")) {
+ $this->http_status("423 Locked");
+ return;
+ }
+
+ // new lock
+ $options["scope"] = $lockinfo->lockscope;
+ $options["type"] = $lockinfo->locktype;
+ $options["owner"] = $lockinfo->owner;
+
+ $options["locktoken"] = $this->_new_locktoken();
+
+ $stat = $this->lock($options);
+ }
+
+ if(is_bool($stat)) {
+ $http_stat = $stat ? "200 OK" : "423 Locked";
+ } else {
+ $http_stat = $stat;
+ }
+
+ $this->http_status($http_stat);
+
+ if ($http_stat{0} == 2) { // 2xx states are ok
+ if($options["timeout"]) {
+ // more than a million is considered an absolute timestamp
+ // less is more likely a relative value
+ if($options["timeout"]>1000000) {
+ $timeout = "Second-".($options['timeout']-time());
+ } else {
+ $timeout = "Second-$options[timeout]";
+ }
+ } else {
+ $timeout = "Infinite";
+ }
+
+ header('Content-Type: text/xml; charset="utf-8"');
+ header("Lock-Token: <$options[locktoken]>");
+ echo "\n";
+ echo "\n";
+ echo " \n";
+ echo " \n";
+ echo " \n";
+ echo " \n";
+ echo " $options[depth] \n";
+ echo " $options[owner] \n";
+ echo " $timeout \n";
+ echo " $options[locktoken] \n";
+ echo " \n";
+ echo " \n";
+ echo " \n\n";
+ }
+ }
+
+
+ // }}}
+
+ // {{{ http_UNLOCK()
+
+ /**
+ * UNLOCK method handler
+ *
+ * @param void
+ * @return void
+ */
+ function http_UNLOCK()
+ {
+ $options = Array();
+ $options["path"] = $this->path;
+
+ if (isset($_SERVER['HTTP_DEPTH'])) {
+ $options["depth"] = $_SERVER["HTTP_DEPTH"];
+ } else {
+ $options["depth"] = "infinity";
+ }
+
+ // strip surrounding <>
+ $options["token"] = substr(trim($_SERVER["HTTP_LOCK_TOKEN"]), 1, -1);
+
+ // call user method
+ $stat = $this->unlock($options);
+
+ $this->http_status($stat);
+ }
+
+ // }}}
+
+ // }}}
+
+ // {{{ _copymove()
+
+ function _copymove($what)
+ {
+ $options = Array();
+ $options["path"] = $this->path;
+
+ if (isset($_SERVER["HTTP_DEPTH"])) {
+ $options["depth"] = $_SERVER["HTTP_DEPTH"];
+ } else {
+ $options["depth"] = "infinity";
+ }
+
+ extract(parse_url($_SERVER["HTTP_DESTINATION"]));
+ $http_host = $host;
+ if (isset($port) && $port != 80)
+ $http_host.= ":$port";
+
+ list($http_header_host,$http_header_port) = explode(":",$_SERVER["HTTP_HOST"]);
+ if (isset($http_header_port) && $http_header_port != 80) {
+ $http_header_host .= ":".$http_header_port;
+ }
+
+ if ($http_host == $http_header_host &&
+ !strncmp($_SERVER["SCRIPT_NAME"], $path,
+ strlen($_SERVER["SCRIPT_NAME"]))) {
+ $options["dest"] = substr($path, strlen($_SERVER["SCRIPT_NAME"]));
+ if (!$this->_check_lock_status($options["dest"])) {
+ $this->http_status("423 Locked");
+ return;
+ }
+
+ } else {
+ $options["dest_url"] = $_SERVER["HTTP_DESTINATION"];
+ }
+
+ // see RFC 2518 Sections 9.6, 8.8.4 and 8.9.3
+ if (isset($_SERVER["HTTP_OVERWRITE"])) {
+ $options["overwrite"] = $_SERVER["HTTP_OVERWRITE"] == "T";
+ } else {
+ $options["overwrite"] = true;
+ }
+
+ $stat = $this->$what($options);
+ $this->http_status($stat);
+ }
+
+ // }}}
+
+ // {{{ _allow()
+
+ /**
+ * check for implemented HTTP methods
+ *
+ * @param void
+ * @return array something
+ */
+ function _allow()
+ {
+ // OPTIONS is always there
+ $allow = array("OPTIONS" =>"OPTIONS");
+
+ // all other METHODS need both a http_method() wrapper
+ // and a method() implementation
+ // the base class supplies wrappers only
+ foreach(get_class_methods($this) as $method) {
+ if (!strncmp("http_", $method, 5)) {
+ $method = strtoupper(substr($method, 5));
+ if (method_exists($this, $method)) {
+ $allow[$method] = $method;
+ }
+ }
+ }
+
+ // we can emulate a missing HEAD implemetation using GET
+ if (isset($allow["GET"]))
+ $allow["HEAD"] = "HEAD";
+
+ // no LOCK without checklok()
+ if (!method_exists($this, "checklock")) {
+ unset($allow["LOCK"]);
+ unset($allow["UNLOCK"]);
+ }
+
+ return $allow;
+ }
+
+ // }}}
+
+ /**
+ * helper for property element creation
+ *
+ * @param string XML namespace (optional)
+ * @param string property name
+ * @param string property value
+ * @return array property array
+ */
+ function mkprop()
+ {
+ $args = func_get_args();
+ if (count($args) == 3) {
+ return array("ns" => $args[0],
+ "name" => $args[1],
+ "val" => $args[2]);
+ } else {
+ return array("ns" => "DAV:",
+ "name" => $args[0],
+ "val" => $args[1]);
+ }
+ }
+
+ // {{{ _check_auth
+
+ /**
+ * check authentication if check is implemented
+ *
+ * @param void
+ * @return bool true if authentication succeded or not necessary
+ */
+ function _check_auth()
+ {
+ if (method_exists($this, "checkAuth")) {
+ // PEAR style method name
+ return $this->checkAuth(@$_SERVER["AUTH_TYPE"],
+ @$_SERVER["PHP_AUTH_USER"],
+ @$_SERVER["PHP_AUTH_PW"]);
+ } else if (method_exists($this, "check_auth")) {
+ // old (pre 1.0) method name
+ return $this->check_auth(@$_SERVER["AUTH_TYPE"],
+ @$_SERVER["PHP_AUTH_USER"],
+ @$_SERVER["PHP_AUTH_PW"]);
+ } else {
+ // no method found -> no authentication required
+ return true;
+ }
+ }
+
+ // }}}
+
+ // {{{ UUID stuff
+
+ /**
+ * generate Unique Universal IDentifier for lock token
+ *
+ * @param void
+ * @return string a new UUID
+ */
+ function _new_uuid()
+ {
+ // use uuid extension from PECL if available
+ if (function_exists("uuid_create")) {
+ return uuid_create();
+ }
+
+ // fallback
+ $uuid = md5(microtime().getmypid()); // this should be random enough for now
+
+ // set variant and version fields for 'true' random uuid
+ $uuid{12} = "4";
+ $n = 8 + (ord($uuid{16}) & 3);
+ $hex = "0123456789abcdef";
+ $uuid{16} = $hex{$n};
+
+ // return formated uuid
+ return substr($uuid, 0, 8)."-"
+ . substr($uuid, 8, 4)."-"
+ . substr($uuid, 12, 4)."-"
+ . substr($uuid, 16, 4)."-"
+ . substr($uuid, 20);
+ }
+
+ /**
+ * create a new opaque lock token as defined in RFC2518
+ *
+ * @param void
+ * @return string new RFC2518 opaque lock token
+ */
+ function _new_locktoken()
+ {
+ return "opaquelocktoken:".$this->_new_uuid();
+ }
+
+ // }}}
+
+ // {{{ WebDAV If: header parsing
+
+ /**
+ *
+ *
+ * @param string header string to parse
+ * @param int current parsing position
+ * @return array next token (type and value)
+ */
+ function _if_header_lexer($string, &$pos)
+ {
+ // skip whitespace
+ while (ctype_space($string{$pos})) {
+ ++$pos;
+ }
+
+ // already at end of string?
+ if (strlen($string) <= $pos) {
+ return false;
+ }
+
+ // get next character
+ $c = $string{$pos++};
+
+ // now it depends on what we found
+ switch ($c) {
+ case "<":
+ // URIs are enclosed in <...>
+ $pos2 = strpos($string, ">", $pos);
+ $uri = substr($string, $pos, $pos2 - $pos);
+ $pos = $pos2 + 1;
+ return array("URI", $uri);
+
+ case "[":
+ //Etags are enclosed in [...]
+ if ($string{$pos} == "W") {
+ $type = "ETAG_WEAK";
+ $pos += 2;
+ } else {
+ $type = "ETAG_STRONG";
+ }
+ $pos2 = strpos($string, "]", $pos);
+ $etag = substr($string, $pos + 1, $pos2 - $pos - 2);
+ $pos = $pos2 + 1;
+ return array($type, $etag);
+
+ case "N":
+ // "N" indicates negation
+ $pos += 2;
+ return array("NOT", "Not");
+
+ default:
+ // anything else is passed verbatim char by char
+ return array("CHAR", $c);
+ }
+ }
+
+ /**
+ * parse If: header
+ *
+ * @param string header string
+ * @return array URIs and their conditions
+ */
+ function _if_header_parser($str)
+ {
+ $pos = 0;
+ $len = strlen($str);
+
+ $uris = array();
+
+ // parser loop
+ while ($pos < $len) {
+ // get next token
+ $token = $this->_if_header_lexer($str, $pos);
+
+ // check for URI
+ if ($token[0] == "URI") {
+ $uri = $token[1]; // remember URI
+ $token = $this->_if_header_lexer($str, $pos); // get next token
+ } else {
+ $uri = "";
+ }
+
+ // sanity check
+ if ($token[0] != "CHAR" || $token[1] != "(") {
+ return false;
+ }
+
+ $list = array();
+ $level = 1;
+ $not = "";
+ while ($level) {
+ $token = $this->_if_header_lexer($str, $pos);
+ if ($token[0] == "NOT") {
+ $not = "!";
+ continue;
+ }
+ switch ($token[0]) {
+ case "CHAR":
+ switch ($token[1]) {
+ case "(":
+ $level++;
+ break;
+ case ")":
+ $level--;
+ break;
+ default:
+ return false;
+ }
+ break;
+
+ case "URI":
+ $list[] = $not."<$token[1]>";
+ break;
+
+ case "ETAG_WEAK":
+ $list[] = $not."[W/'$token[1]']>";
+ break;
+
+ case "ETAG_STRONG":
+ $list[] = $not."['$token[1]']>";
+ break;
+
+ default:
+ return false;
+ }
+ $not = "";
+ }
+
+ if (@is_array($uris[$uri])) {
+ $uris[$uri] = array_merge($uris[$uri],$list);
+ } else {
+ $uris[$uri] = $list;
+ }
+ }
+
+ return $uris;
+ }
+
+ /**
+ * check if conditions from "If:" headers are meat
+ *
+ * the "If:" header is an extension to HTTP/1.1
+ * defined in RFC 2518 section 9.4
+ *
+ * @param void
+ * @return void
+ */
+ function _check_if_header_conditions()
+ {
+ if (isset($_SERVER["HTTP_IF"])) {
+ $this->_if_header_uris =
+ $this->_if_header_parser($_SERVER["HTTP_IF"]);
+
+ foreach($this->_if_header_uris as $uri => $conditions) {
+ if ($uri == "") {
+ // default uri is the complete request uri
+ $uri = (@$_SERVER["HTTPS"] === "on" ? "https:" : "http:");
+ $uri.= "//$_SERVER[HTTP_HOST]$_SERVER[SCRIPT_NAME]$_SERVER[PATH_INFO]";
+ }
+ // all must match
+ $state = true;
+ foreach($conditions as $condition) {
+ // lock tokens may be free form (RFC2518 6.3)
+ // but if opaquelocktokens are used (RFC2518 6.4)
+ // we have to check the format (litmus tests this)
+ if (!strncmp($condition, "$/", $condition)) {
+ return false;
+ }
+ }
+ if (!$this->_check_uri_condition($uri, $condition)) {
+ $state = false;
+ break;
+ }
+ }
+
+ // any match is ok
+ if ($state == true) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Check a single URI condition parsed from an if-header
+ *
+ * Check a single URI condition parsed from an if-header
+ *
+ * @abstract
+ * @param string $uri URI to check
+ * @param string $condition Condition to check for this URI
+ * @returns bool Condition check result
+ */
+ function _check_uri_condition($uri, $condition)
+ {
+ // not really implemented here,
+ // implementations must override
+ return true;
+ }
+
+
+ /**
+ *
+ *
+ * @param string path of resource to check
+ * @param bool exclusive lock?
+ */
+ function _check_lock_status($path, $exclusive_only = false)
+ {
+ // FIXME depth -> ignored for now
+ if (method_exists($this, "checkLock")) {
+ // is locked?
+ $lock = $this->checkLock($path);
+
+ // ... and lock is not owned?
+ if (is_array($lock) && count($lock)) {
+ // FIXME doesn't check uri restrictions yet
+ if (!strstr($_SERVER["HTTP_IF"], $lock["token"])) {
+ if (!$exclusive_only || ($lock["scope"] !== "shared"))
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+
+ // }}}
+
+
+ /**
+ * Generate lockdiscovery reply from checklock() result
+ *
+ * @param string resource path to check
+ * @return string lockdiscovery response
+ */
+ function lockdiscovery($path)
+ {
+ // no lock support without checklock() method
+ if (!method_exists($this, "checklock")) {
+ return "";
+ }
+
+ // collect response here
+ $activelocks = "";
+
+ // get checklock() reply
+ $lock = $this->checklock($path);
+
+ // generate block for returned data
+ if (is_array($lock) && count($lock)) {
+ // check for 'timeout' or 'expires'
+ if (!empty($lock["expires"])) {
+ $timeout = "Second-".($lock["expires"] - time());
+ } else if (!empty($lock["timeout"])) {
+ $timeout = "Second-$lock[timeout]";
+ } else {
+ $timeout = "Infinite";
+ }
+
+ // genreate response block
+ $activelocks.= "
+
+
+
+ $lock[depth]
+ $lock[owner]
+ $timeout
+ $lock[token]
+
+ ";
+ }
+
+ // return generated response
+ return $activelocks;
+ }
+
+ /**
+ * set HTTP return status and mirror it in a private header
+ *
+ * @param string status code and message
+ * @return void
+ */
+ function http_status($status)
+ {
+ // simplified success case
+ if($status === true) {
+ $status = "200 OK";
+ }
+
+ // remember status
+ $this->_http_status = $status;
+
+ // generate HTTP status response
+ header("HTTP/1.1 $status");
+ header("X-WebDAV-Status: $status", true);
+ }
+
+ /**
+ * private minimalistic version of PHP urlencode()
+ *
+ * only blanks and XML special chars must be encoded here
+ * full urlencode() encoding confuses some clients ...
+ *
+ * @param string URL to encode
+ * @return string encoded URL
+ */
+ function _urlencode($url)
+ {
+ return strtr($url, array(" "=>"%20",
+ "&"=>"%26",
+ "<"=>"%3C",
+ ">"=>"%3E",
+ ));
+ }
+
+ /**
+ * private version of PHP urldecode
+ *
+ * not really needed but added for completenes
+ *
+ * @param string URL to decode
+ * @return string decoded URL
+ */
+ function _urldecode($path)
+ {
+ return urldecode($path);
+ }
+
+ /**
+ * UTF-8 encode property values if not already done so
+ *
+ * @param string text to encode
+ * @return string utf-8 encoded text
+ */
+ function _prop_encode($text)
+ {
+ switch (strtolower($this->_prop_encoding)) {
+ case "utf-8":
+ return $text;
+ case "iso-8859-1":
+ case "iso-8859-15":
+ case "latin-1":
+ default:
+ return utf8_encode($text);
+ }
+ }
+}
+
+ /*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+?>
diff --git a/include/HTTP_WebDAV_Server/Tools/_parse_lockinfo.php b/include/HTTP_WebDAV_Server/Tools/_parse_lockinfo.php
new file mode 100644
index 00000000..a04412c2
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/Tools/_parse_lockinfo.php
@@ -0,0 +1,237 @@
+ |
+// | Christian Stocker |
+// +----------------------------------------------------------------------+
+//
+
+//
+
+/**
+ * helper class for parsing LOCK request bodies
+ *
+ * @package HTTP_WebDAV_Server
+ * @author Hartmut Holzgraefe
+ * @version 0.99.1dev
+ */
+class _parse_lockinfo
+{
+ /**
+ * success state flag
+ *
+ * @var bool
+ * @access public
+ */
+ var $success = false;
+
+ /**
+ * lock type, currently only "write"
+ *
+ * @var string
+ * @access public
+ */
+ var $locktype = "";
+
+ /**
+ * lock scope, "shared" or "exclusive"
+ *
+ * @var string
+ * @access public
+ */
+ var $lockscope = "";
+
+ /**
+ * lock owner information
+ *
+ * @var string
+ * @access public
+ */
+ var $owner = "";
+
+ /**
+ * flag that is set during lock owner read
+ *
+ * @var bool
+ * @access private
+ */
+ var $collect_owner = false;
+
+ /**
+ * constructor
+ *
+ * @param string path of stream to read
+ * @access public
+ */
+ function _parse_lockinfo($path)
+ {
+ // we assume success unless problems occur
+ $this->success = true;
+
+ // remember if any input was parsed
+ $had_input = false;
+
+ // open stream
+ $f_in = fopen($path, "r");
+ if (!$f_in) {
+ $this->success = false;
+ return;
+ }
+
+ // create namespace aware parser
+ $xml_parser = xml_parser_create_ns("UTF-8", " ");
+
+ // set tag and data handlers
+ xml_set_element_handler($xml_parser,
+ array(&$this, "_startElement"),
+ array(&$this, "_endElement"));
+ xml_set_character_data_handler($xml_parser,
+ array(&$this, "_data"));
+
+ // we want a case sensitive parser
+ xml_parser_set_option($xml_parser,
+ XML_OPTION_CASE_FOLDING, false);
+
+ // parse input
+ while($this->success && !feof($f_in)) {
+ $line = fgets($f_in);
+ if (is_string($line)) {
+ $had_input = true;
+ $this->success &= xml_parse($xml_parser, $line, false);
+ }
+ }
+
+ // finish parsing
+ if($had_input) {
+ $this->success &= xml_parse($xml_parser, "", true);
+ }
+
+ // check if required tags where found
+ $this->success &= !empty($this->locktype);
+ $this->success &= !empty($this->lockscope);
+
+ // free parser resource
+ xml_parser_free($xml_parser);
+
+ // close input stream
+ fclose($f_in);
+ }
+
+
+ /**
+ * tag start handler
+ *
+ * @param resource parser
+ * @param string tag name
+ * @param array tag attributes
+ * @return void
+ * @access private
+ */
+ function _startElement($parser, $name, $attrs)
+ {
+ // namespace handling
+ if (strstr($name, " ")) {
+ list($ns, $tag) = explode(" ", $name);
+ } else {
+ $ns = "";
+ $tag = $name;
+ }
+
+
+ if ($this->collect_owner) {
+ // everything within the tag needs to be collected
+ $ns_short = "";
+ $ns_attr = "";
+ if ($ns) {
+ if ($ns == "DAV:") {
+ $ns_short = "D:";
+ } else {
+ $ns_attr = " xmlns='$ns'";
+ }
+ }
+ $this->owner .= "<$ns_short$tag$ns_attr>";
+ } else if ($ns == "DAV:") {
+ // parse only the essential tags
+ switch ($tag) {
+ case "write":
+ $this->locktype = $tag;
+ break;
+ case "exclusive":
+ case "shared":
+ $this->lockscope = $tag;
+ break;
+ case "owner":
+ $this->collect_owner = true;
+ break;
+ }
+ }
+ }
+
+ /**
+ * data handler
+ *
+ * @param resource parser
+ * @param string data
+ * @return void
+ * @access private
+ */
+ function _data($parser, $data)
+ {
+ // only the tag has data content
+ if ($this->collect_owner) {
+ $this->owner .= $data;
+ }
+ }
+
+ /**
+ * tag end handler
+ *
+ * @param resource parser
+ * @param string tag name
+ * @return void
+ * @access private
+ */
+ function _endElement($parser, $name)
+ {
+ // namespace handling
+ if (strstr($name, " ")) {
+ list($ns, $tag) = explode(" ", $name);
+ } else {
+ $ns = "";
+ $tag = $name;
+ }
+
+ // finished?
+ if (($ns == "DAV:") && ($tag == "owner")) {
+ $this->collect_owner = false;
+ }
+
+ // within we have to collect everything
+ if ($this->collect_owner) {
+ $ns_short = "";
+ $ns_attr = "";
+ if ($ns) {
+ if ($ns == "DAV:") {
+ $ns_short = "D:";
+ } else {
+ $ns_attr = " xmlns='$ns'";
+ }
+ }
+ $this->owner .= "$ns_short$tag$ns_attr>";
+ }
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/include/HTTP_WebDAV_Server/Tools/_parse_propfind.php b/include/HTTP_WebDAV_Server/Tools/_parse_propfind.php
new file mode 100644
index 00000000..2ce57706
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/Tools/_parse_propfind.php
@@ -0,0 +1,178 @@
+ |
+// | Christian Stocker |
+// +----------------------------------------------------------------------+
+//
+
+//
+
+/**
+ * helper class for parsing PROPFIND request bodies
+ *
+ * @package HTTP_WebDAV_Server
+ * @author Hartmut Holzgraefe
+ * @version 0.99.1dev
+ */
+class _parse_propfind
+{
+ /**
+ * success state flag
+ *
+ * @var bool
+ * @access public
+ */
+ var $success = false;
+
+ /**
+ * found properties are collected here
+ *
+ * @var array
+ * @access public
+ */
+ var $props = false;
+
+ /**
+ * internal tag nesting depth counter
+ *
+ * @var int
+ * @access private
+ */
+ var $depth = 0;
+
+
+ /**
+ * constructor
+ *
+ * @access public
+ */
+ function _parse_propfind($path)
+ {
+ // success state flag
+ $this->success = true;
+
+ // property storage array
+ $this->props = array();
+
+ // internal tag depth counter
+ $this->depth = 0;
+
+ // remember if any input was parsed
+ $had_input = false;
+
+ // open input stream
+ $f_in = fopen($path, "r");
+ if (!$f_in) {
+ $this->success = false;
+ return;
+ }
+
+ // create XML parser
+ $xml_parser = xml_parser_create_ns("UTF-8", " ");
+
+ // set tag and data handlers
+ xml_set_element_handler($xml_parser,
+ array(&$this, "_startElement"),
+ array(&$this, "_endElement"));
+
+ // we want a case sensitive parser
+ xml_parser_set_option($xml_parser,
+ XML_OPTION_CASE_FOLDING, false);
+
+
+ // parse input
+ while($this->success && !feof($f_in)) {
+ $line = fgets($f_in);
+ if (is_string($line)) {
+ $had_input = true;
+ $this->success &= xml_parse($xml_parser, $line, false);
+ }
+ }
+
+ // finish parsing
+ if($had_input) {
+ $this->success &= xml_parse($xml_parser, "", true);
+ }
+
+ // free parser
+ xml_parser_free($xml_parser);
+
+ // close input stream
+ fclose($f_in);
+
+ // if no input was parsed it was a request
+ if(!count($this->props)) $this->props = "all"; // default
+ }
+
+
+ /**
+ * start tag handler
+ *
+ * @access private
+ * @param resource parser
+ * @param string tag name
+ * @param array tag attributes
+ */
+ function _startElement($parser, $name, $attrs)
+ {
+ // name space handling
+ if (strstr($name, " ")) {
+ list($ns, $tag) = explode(" ", $name);
+ if ($ns == "")
+ $this->success = false;
+ } else {
+ $ns = "";
+ $tag = $name;
+ }
+
+ // special tags at level 1: and
+ if ($this->depth == 1) {
+ if ($tag == "allprop")
+ $this->props = "all";
+
+ if ($tag == "propname")
+ $this->props = "names";
+ }
+
+ // requested properties are found at level 2
+ if ($this->depth == 2) {
+ $prop = array("name" => $tag);
+ if ($ns)
+ $prop["xmlns"] = $ns;
+ $this->props[] = $prop;
+ }
+
+ // increment depth count
+ $this->depth++;
+ }
+
+
+ /**
+ * end tag handler
+ *
+ * @access private
+ * @param resource parser
+ * @param string tag name
+ */
+ function _endElement($parser, $name)
+ {
+ // here we only need to decrement the depth count
+ $this->depth--;
+ }
+}
+
+
+?>
\ No newline at end of file
diff --git a/include/HTTP_WebDAV_Server/Tools/_parse_proppatch.php b/include/HTTP_WebDAV_Server/Tools/_parse_proppatch.php
new file mode 100644
index 00000000..e441083b
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/Tools/_parse_proppatch.php
@@ -0,0 +1,214 @@
+ |
+// | Christian Stocker |
+// +----------------------------------------------------------------------+
+//
+
+//
+
+/**
+ * helper class for parsing PROPPATCH request bodies
+ *
+ * @package HTTP_WebDAV_Server
+ * @author Hartmut Holzgraefe
+ * @version 0.99.1dev
+ */
+class _parse_proppatch
+{
+ /**
+ *
+ *
+ * @var
+ * @access
+ */
+ var $success;
+
+ /**
+ *
+ *
+ * @var
+ * @access
+ */
+ var $props;
+
+ /**
+ *
+ *
+ * @var
+ * @access
+ */
+ var $depth;
+
+ /**
+ *
+ *
+ * @var
+ * @access
+ */
+ var $mode;
+
+ /**
+ *
+ *
+ * @var
+ * @access
+ */
+ var $current;
+
+ /**
+ * constructor
+ *
+ * @param string path of input stream
+ * @access public
+ */
+ function _parse_proppatch($path)
+ {
+ $this->success = true;
+
+ $this->depth = 0;
+ $this->props = array();
+ $had_input = false;
+
+ $f_in = fopen($path, "r");
+ if (!$f_in) {
+ $this->success = false;
+ return;
+ }
+
+ $xml_parser = xml_parser_create_ns("UTF-8", " ");
+
+ xml_set_element_handler($xml_parser,
+ array(&$this, "_startElement"),
+ array(&$this, "_endElement"));
+
+ xml_set_character_data_handler($xml_parser,
+ array(&$this, "_data"));
+
+ xml_parser_set_option($xml_parser,
+ XML_OPTION_CASE_FOLDING, false);
+
+ while($this->success && !feof($f_in)) {
+ $line = fgets($f_in);
+ if (is_string($line)) {
+ $had_input = true;
+ $this->success &= xml_parse($xml_parser, $line, false);
+ }
+ }
+
+ if($had_input) {
+ $this->success &= xml_parse($xml_parser, "", true);
+ }
+
+ xml_parser_free($xml_parser);
+
+ fclose($f_in);
+ }
+
+ /**
+ * tag start handler
+ *
+ * @param resource parser
+ * @param string tag name
+ * @param array tag attributes
+ * @return void
+ * @access private
+ */
+ function _startElement($parser, $name, $attrs)
+ {
+ if (strstr($name, " ")) {
+ list($ns, $tag) = explode(" ", $name);
+ if ($ns == "")
+ $this->success = false;
+ } else {
+ $ns = "";
+ $tag = $name;
+ }
+
+ if ($this->depth == 1) {
+ $this->mode = $tag;
+ }
+
+ if ($this->depth == 3) {
+ $prop = array("name" => $tag);
+ $this->current = array("name" => $tag, "ns" => $ns, "status"=> 200);
+ if ($this->mode == "set") {
+ $this->current["val"] = ""; // default set val
+ }
+ }
+
+ if ($this->depth >= 4) {
+ $this->current["val"] .= "<$tag";
+ foreach ($attr as $key => $val) {
+ $this->current["val"] .= ' '.$key.'="'.str_replace('"','"', $val).'"';
+ }
+ $this->current["val"] .= ">";
+ }
+
+
+
+ $this->depth++;
+ }
+
+ /**
+ * tag end handler
+ *
+ * @param resource parser
+ * @param string tag name
+ * @return void
+ * @access private
+ */
+ function _endElement($parser, $name)
+ {
+ if (strstr($name, " ")) {
+ list($ns, $tag) = explode(" ", $name);
+ if ($ns == "")
+ $this->success = false;
+ } else {
+ $ns = "";
+ $tag = $name;
+ }
+
+ $this->depth--;
+
+ if ($this->depth >= 4) {
+ $this->current["val"] .= "$tag>";
+ }
+
+ if ($this->depth == 3) {
+ if (isset($this->current)) {
+ $this->props[] = $this->current;
+ unset($this->current);
+ }
+ }
+ }
+
+ /**
+ * input data handler
+ *
+ * @param resource parser
+ * @param string data
+ * @return void
+ * @access private
+ */
+ function _data($parser, $data) {
+ if (isset($this->current)) {
+ $this->current["val"] .= $data;
+ }
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/include/HTTP_WebDAV_Server/dav.txt b/include/HTTP_WebDAV_Server/dav.txt
new file mode 100644
index 00000000..9e0b8299
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/dav.txt
@@ -0,0 +1,229 @@
+The HTTP_WebDAV_Server class provides a framwork for the
+implementation of customized WebDAV servers that can provide
+filesystem like access to almost any kind of hierachically stored
+data.
+
+The (abstract) server base class tries to encapsulate as much of
+the protocol details as possible. It takes care of the needed WebDAV
+header and XML payload parsing and generation (and knows about some
+of the problems with common clients and tries hard to work around
+them).
+
+WebDAV itself is an extension to the HTTP protocol. The HTTP
+specific parts of it are already taken care of by the web server. Any
+data needed by the server class is provided by the PHP SAPI interface
+of the server used.
+
+To create a working server from the base class you have to extend and
+add methods for the actual access, modification and access control of
+your own data.
+
+You may use the included HTTP_WebDAV_Server_Filesystem class as an
+example of how to create a working server. This sample implementation
+is used for testing the implementation of this package against the
+litmus WebDAV compliance test suite.
+(litmus is available on http://www.webdav.org/neon/litmus)
+
+The methods you can add in your extended class are mostly named after
+the WebDAV specific request methods (using upper case names). Methods
+you may implement are:
+
+* GET() get a resource from the server
+* HEAD() get resource headers only from the server
+* PUT() create or modify a resource on the server
+* COPY() copy a resource on the server
+* MOVE() move a resource on the server
+* DELETE() delete a resource on the server
+* MKCOL() create a new collection
+* PROPFIND() get property data for a resource
+* PROPPATCH() modify property data for a resource
+* LOCK() lock a resource
+* UNLOCK() unlock a locked resource
+* checklock() check whether a resource is locked
+* check_auth() check authentication
+
+You can think of WebDAV resources as files, collections as directories
+and properties as filesystem meta data (like size, creation date, ...).
+
+The base class is able identify which of the methods you have
+implemented and will create appropriate answers to OPTIONS requests
+that ask for the WebDAV standards compliance level and the allowed
+HTTP methods for you.
+
+For a minimal working test server you need to implement GET(), PUT()
+and PROPFIND() only.
+
+For a minimal (level 1) standards compliant server you also need to
+implement MKCOL(), DELETE(), and PROPPATCH(). The COPY(), MOVE() and
+HEAD() methods are emulated using GET(), PUT() and DELETE() if not
+implemented, but for performance reasons you should better implement
+them yourself.
+
+For a complete (level 2) RFC2518 compliand server you also have to
+provide locking support by implementing LOCK(), UNLOCK() and
+checklock().
+
+Authentication is not really part of the WebDAV specification and
+should be handled on the HTTP level. You can do so by means of, for
+example, .htaccess files or similar services provided by your web
+server. But you can also make use of the authentication features
+offered by PHP by implementing the check_auth() method.
+Using the check_auth() method you can create a dynamic interface
+to any authentication system protecting the data you want to serve.
+
+
+
+ the following reference information may be outdated and/or
+ incomplete ...
+
+
+bool PROPINFO($options, &$files)
+
+ options[path] - Resource-Path
+ options[depth] - Depth of search requested: "0", "1", or "infinity"
+ options[props] - "all", "names", or an arry of requested properties
+ each property array element is either a string
+ (which implies the default "DAV:" namespace) or
+ an array with the two elements "name" and "xmlns"
+ for the properties name and XML namespace
+
+ &$files - storage array for property results with the following elements:
+
+ "files" -> array of found properties forresources. elements are:
+
+ "path" -> path of the resource
+ "props" -> properties array
+ each property array element is either a string
+ (which implies the default "DAV:" namespace) or
+ an array with the two elements "name" and "xmlns"
+ for the properties name and XML namespace
+
+ you should at least support the following
+ list of properties from the "DAV:" namespave:
+
+ - resourcetype: "collection" oder ""
+ - creationdate: unix-timestamp
+ - getcontentlength: integer
+ - getlastmodified: unix-timestamp
+
+ You may want to add support for these "DAV:"
+ properties, too:
+
+ - getcontenttype: mime-type
+ - displayname: string
+
+ for a compliant server you also have to be
+ able to return any property from other
+ namespaces that has been stored using
+ PROPPATCH
+
+
+ return-value: true / false
+
+
+
+
+string MKCOL($option)
+
+ options[path] - path of the new collection to be created
+
+ return-value: string
+ HTTP status and status message, possible values are
+ * 201 Success
+ * 403 Forbidden
+ * 405 Method not allowed
+ * 409 Conflict
+ * 415 Unsupported media type
+ * 507 Insufficient Storage
+ (see also RFC2518 8.3.2)
+
+
+
+
+string GET(&$options)
+
+ $options['path'] - path to the requested resource
+ $options['ranges'] - optional array of range specifications for
+ partial access. range specs are arrays that
+ consist of either a 'start' and 'end' element
+ (where 'end' can be empty to indicate a request
+ up to the actual end of the resource) or a
+ 'last' element to access the last n bytes of
+ a resource without knowing its actual size in
+ advance
+
+ Return-value: true bei Erfolg, false wenn not found
+
+ (TODO: andere stati berücksichtigen)
+
+ Content-Type, Content-Length header müssen von der Methode selbst
+ erzeugt werden (TODO: outdated)
+
+
+
+
+string PUT($options)
+
+ options[path] - path to the requested resource
+ options[content_length] - size of request data in bytes
+ options[stream] - a PHP stream providing the input data
+
+ return-value: string
+ HTTP status, possible values are:
+ * 201 Created -> the resource did not exist before
+ and has been successfully created
+ * 204 No Content -> a previously existing resource has
+ successfully been modified
+ * 409 Conflict
+ ...
+
+
+
+
+string COPY($options)
+
+ options[path] - path to the resource to be copied
+ options[depth] - "0" or "infinity" (applies only to directories)
+ options[overwrite] - true / false
+ options[dest] - path to the destination resource if local
+ options[dest_url] - non-local destination path
+
+ return-value: string
+ HTTP status, see RFC2518 8.8.5
+
+
+
+
+
+string MOVE($options)
+
+ options[path] - path to the resource to be moved
+ options[overwrite] - true / false
+ options[dest] - path to the destination resource if local
+ options[dest_url] - non-local destination path
+
+ return-value: string
+ HTTP status, see RFC2518 8.9.4
+
+
+
+
+string DELETE($options)
+
+ options[path] - path to the resource to be removed
+
+ return-value: string
+ HTTP status, see RFC2518 8.6.2
+
+
+
+
+
+bool check_auth($type, $user, $passwd)
+
+ $type: HTTP-Auth type, i.A. "Basic"
+ $user: HTTP Username
+ $passwd: HTTP Passwort
+
+ return-value: true bei success, sonst false
+ (ToDo: array mit Auth-Type und Realm String zulassen bei fehler)
\ No newline at end of file
diff --git a/include/HTTP_WebDAV_Server/license.txt b/include/HTTP_WebDAV_Server/license.txt
new file mode 100644
index 00000000..6c1c1708
--- /dev/null
+++ b/include/HTTP_WebDAV_Server/license.txt
@@ -0,0 +1,68 @@
+--------------------------------------------------------------------
+ The PHP License, version 3.0
+Copyright (c) 1999 - 2006 The PHP Group. All rights reserved.
+--------------------------------------------------------------------
+
+Redistribution and use in source and binary forms, with or without
+modification, is permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ 3. The name "PHP" must not be used to endorse or promote products
+ derived from this software without prior written permission. For
+ written permission, please contact group@php.net.
+
+ 4. Products derived from this software may not be called "PHP", nor
+ may "PHP" appear in their name, without prior written permission
+ from group@php.net. You may indicate that your software works in
+ conjunction with PHP by saying "Foo for PHP" instead of calling
+ it "PHP Foo" or "phpfoo"
+
+ 5. The PHP Group may publish revised and/or new versions of the
+ license from time to time. Each version will be given a
+ distinguishing version number.
+ Once covered code has been published under a particular version
+ of the license, you may always continue to use it under the terms
+ of that version. You may also choose to use such covered code
+ under the terms of any subsequent version of the license
+ published by the PHP Group. No one other than the PHP Group has
+ the right to modify the terms applicable to covered code created
+ under this License.
+
+ 6. Redistributions of any form whatsoever must retain the following
+ acknowledgment:
+ "This product includes PHP, freely available from
+ ".
+
+THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
+ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
+DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--------------------------------------------------------------------
+
+This software consists of voluntary contributions made by many
+individuals on behalf of the PHP Group.
+
+The PHP Group can be contacted via Email at group@php.net.
+
+For more information on the PHP Group and the PHP project,
+please see .
+
+This product includes the Zend Engine, freely available at
+.
diff --git a/include/JSON.js b/include/JSON.js
new file mode 100644
index 00000000..ccb8d254
--- /dev/null
+++ b/include/JSON.js
@@ -0,0 +1,44 @@
+/*
+ Copyright (c) 2005 JSON.org
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The Software shall be used for Good, not Evil.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ json.js
+
+ The global object JSON contains two methods.
+
+ JSON.stringify(value) takes a JavaScript value and produces a JSON text.
+ The value must not be cyclical.
+
+ JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
+ return false if there is an error.
+
+ 2008-10-10: New regular expressions copied in from the new json2.js file on http://json.org (released into the public domain), work better on Safari and IE for more complicated datasets
+ */
+var JSON=function(){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={array:function(x){var a=['['],b,f,i,l=x.length,v;for(i=0;ifatal("*** SECURITY: received asynchronous call with invalid ['asychronous_key'] value. Possible CSRF attack.");
+ return '';
+ }
+
+ return $meta['jsonObject'];
+ }
+
+ return json_decode($string,true);
+ }
+
+ /**
+ * @deprecated use JSON::encode() instead
+ */
+ public static function encodeReal($string)
+ {
+ return self::encode($string);
+ }
+
+ /**
+ * @deprecated use JSON::decode() instead
+ */
+ public static function decodeReal($string)
+ {
+ return self::decode($string);
+ }
+}
diff --git a/include/ListView/ListView.php b/include/ListView/ListView.php
new file mode 100644
index 00000000..102d14f8
--- /dev/null
+++ b/include/ListView/ListView.php
@@ -0,0 +1,1757 @@
+data_array = $value;
+}
+
+function processListViewMulti($seed, $xTemplateSection, $html_varName) {
+
+ $this->shouldProcess = true;
+
+ echo "";
+ $this->processListViewTwo($seed, $xTemplateSection, $html_varName);
+
+ echo "".translate('LBL_CHECKALL')." - ".translate('LBL_CLEARALL')." ";
+ echo ' ';
+}
+
+
+function processListView($seed, $xTemplateSection, $html_varName)
+{
+ global $sugar_config;
+
+ $populateOnly = $this->ignorePopulateOnly ? FALSE : (!empty($sugar_config['save_query']) && $sugar_config['save_query'] == 'populate_only');
+ if(isset($seed->module_dir) && $populateOnly) {
+ if(empty($GLOBALS['displayListView']) && strcmp(strtolower($_REQUEST['action']), 'popup') != 0 && (!empty($_REQUEST['clear_query']) || $_REQUEST['module'] == $seed->module_dir && ((empty($_REQUEST['query']) || $_REQUEST['query'] == 'MSI')&& (empty($_SESSION['last_search_mod']) || $_SESSION['last_search_mod'] != $seed->module_dir)))) {
+ $_SESSION['last_search_mod'] = $_REQUEST['module'] ;
+ return;
+ }
+ }
+ if(strcmp(strtolower($_REQUEST['action']), 'popup') != 0){
+ $_SESSION['last_search_mod'] = $_REQUEST['module'] ;
+ }
+ //following session variable will track the detail view nvigation history.
+ //needs to the reset after each search.
+ $this->setLocalSessionVariable($html_varName,"DETAIL_NAV_HISTORY",false);
+
+ require_once('include/MassUpdate.php');
+ $mass = new MassUpdate();
+ $add_acl_javascript = false;
+ if(!isset($_REQUEST['action'])) {
+ $this->shouldProcess=false;
+ } else {
+ $this->shouldProcess = is_subclass_of($seed, "SugarBean")
+ && (($_REQUEST['action'] == 'index') || ('ListView' == substr($_REQUEST['action'],0,8)) /* cn: to include all ListViewXXX.php type views */)
+ && ($_REQUEST['module'] == $seed->module_dir);
+ }
+
+ //when processing a multi-select popup.
+ if($this->process_for_popups && $this->multi_select_popup) $this->shouldProcess =true;
+ //mass update turned off?
+ if(!$this->show_mass_update) $this->shouldProcess = false;
+ if(is_subclass_of($seed, "SugarBean")) {
+ if($seed->bean_implements('ACL')) {
+ if(!ACLController::checkAccess($seed->module_dir,'list',true)) {
+ if($_REQUEST['module'] != 'Home') {
+ ACLController::displayNoAccess();
+ }
+ return;
+ }
+ if(!ACLController::checkAccess($seed->module_dir,'export',true)) {
+ $sugar_config['disable_export']= true;
+ }
+
+ }
+ }
+
+ //force mass update form if requested.
+ if($this->force_mass_update) {
+ $this->shouldProcess = true;
+ }
+
+ if($this->shouldProcess) {
+ echo $mass->getDisplayMassUpdateForm(true, $this->multi_select_popup);
+ echo $mass->getMassUpdateFormHeader($this->multi_select_popup);
+ $mass->setSugarBean($seed);
+
+ //C.L. Fix for 10048, do not process handleMassUpdate for multi select popups
+ if(!$this->multi_select_popup) {
+ $mass->handleMassUpdate();
+ }
+ }
+
+ $this->processListViewTwo($seed,$xTemplateSection, $html_varName);
+
+ if($this->shouldProcess && empty($this->process_for_popups)) {
+ //echo "".translate('LBL_CLEARALL')." ";
+ // cn: preserves current functionality, exception is InboundEmail
+ if($this->show_mass_update_form) {
+ echo $mass->getMassUpdateForm();
+ }
+ if(!$this->keep_mass_update_form_open) {
+ echo $mass->endMassUpdateForm();
+ }
+ }
+}
+
+
+function process_dynamic_listview($source_module, $sugarbean,$subpanel_def)
+{
+ $this->source_module = $source_module;
+ $this->subpanel_module = $subpanel_def->name;
+ if(!isset($this->xTemplate))
+ $this->createXTemplate();
+
+ $html_var = $this->subpanel_module . "_CELL";
+
+ $list_data = $this->processUnionBeans($sugarbean,$subpanel_def, $html_var);
+
+ $list = $list_data['list'];
+ $parent_data = $list_data['parent_data'];
+
+ if($subpanel_def->isCollection()) {
+ $thepanel=$subpanel_def->get_header_panel_def();
+ } else {
+ $thepanel=$subpanel_def;
+ }
+
+
+
+ $this->process_dynamic_listview_header($thepanel->get_module_name(), $thepanel, $html_var);
+ $this->process_dynamic_listview_rows($list,$parent_data, 'dyn_list_view', $html_var,$subpanel_def);
+
+ if($this->display_header_and_footer)
+ {
+ $this->getAdditionalHeader();
+ if(!empty($this->header_title))
+ {
+ echo get_form_header($this->header_title, $this->header_text, false);
+ }
+ }
+
+ $this->xTemplate->out('dyn_list_view');
+
+ if(isset($_SESSION['validation']))
+ {
+ print base64_decode('PGEgaHJlZj0naHR0cDovL3d3dy5zdWdhcmNybS5jb20nPlBPV0VSRUQmbmJzcDtCWSZuYnNwO1NVR0FSQ1JNPC9hPg==');
+ }
+ if(isset($list_data['query'])) {
+ return ($list_data['query']);
+ }
+ }
+
+/**
+ * @return void
+ * @param unknown $data
+ * @param unknown $xTemplateSection
+ * @param unknown $html_varName
+ * @desc INTERNAL FUNCTION handles the rows
+ */
+ function process_dynamic_listview_rows($data,$parent_data, $xtemplateSection, $html_varName, $subpanel_def)
+ {
+ global $odd_bg;
+ global $even_bg;
+ global $hilite_bg;
+ global $click_bg;
+
+ $this->xTemplate->assign("BG_HILITE", $hilite_bg);
+ $this->xTemplate->assign('CHECKALL', " ");
+ //$this->xTemplate->assign("BG_CLICK", $click_bg);
+ $oddRow = true;
+ $count = 0;
+ reset($data);
+
+ //GETTING OFFSET
+ $offset = $this->getOffset($html_varName);
+ //$totaltime = 0;
+ $processed_ids = array();
+
+ $fill_additional_fields = array();
+ //Either retrieve the is_fill_in_additional_fields property from the lone
+ //subpanel or visit each subpanel's subpanels to retreive the is_fill_in_addition_fields
+ //property
+ $subpanel_list=array();
+ if($subpanel_def->isCollection()) {
+ $subpanel_list=$subpanel_def->sub_subpanels;
+ } else {
+ $subpanel_list[]= $subpanel_def;
+ }
+
+ foreach($subpanel_list as $this_subpanel)
+ {
+ if($this_subpanel->is_fill_in_additional_fields())
+ {
+ $fill_additional_fields[] = $this_subpanel->bean_name;
+ $fill_additional_fields[$this_subpanel->bean_name] = true;
+ }
+ }
+
+ if ( empty($data) ) {
+ $this->xTemplate->assign("ROW_COLOR", 'oddListRow');
+ $thepanel=$subpanel_def;
+ if($subpanel_def->isCollection())
+ $thepanel=$subpanel_def->get_header_panel_def();
+ $this->xTemplate->assign("COL_COUNT", count($thepanel->get_list_fields()));
+ $this->xTemplate->parse($xtemplateSection.".nodata");
+ }
+
+ while(list($aVal, $aItem) = each($data))
+ {
+ $aItem->check_date_relationships_load();
+ // TODO: expensive and needs to be removed and done better elsewhere
+
+ if(!empty($fill_additional_fields[$aItem->object_name])
+ || ($aItem->object_name == 'Case' && !empty($fill_additional_fields['aCase']))
+ )
+ {
+ $aItem->fill_in_additional_list_fields();
+ //$aItem->fill_in_additional_detail_fields();
+ }
+ //rrs bug: 25343
+ $aItem->call_custom_logic("process_record");
+
+ if(isset($parent_data[$aItem->id])) {
+
+ $aItem->parent_name = $parent_data[$aItem->id]['parent_name'];
+ if(!empty($parent_data[$aItem->id]['parent_name_owner'])) {
+ $aItem->parent_name_owner = $parent_data[$aItem->id]['parent_name_owner'];
+ $aItem->parent_name_mod = $parent_data[$aItem->id]['parent_name_mod'];
+ }}
+
+ $fields = $aItem->get_list_view_data();
+ if(isset($processed_ids[$aItem->id])) {
+ continue;
+
+ } else {
+ $processed_ids[$aItem->id] = 1;
+ }
+
+
+ //ADD OFFSET TO ARRAY
+ $fields['OFFSET'] = ($offset + $count + 1);
+
+ if($this->shouldProcess) {
+ if($aItem->ACLAccess('EditView')) {
+ $this->xTemplate->assign('PREROW', " ");
+ } else {
+ $this->xTemplate->assign('PREROW', '');
+
+ }
+ if($aItem->ACLAccess('DetailView')) {
+ $this->xTemplate->assign('TAG_NAME','a');
+ } else {
+ $this->xTemplate->assign('TAG_NAME','span');
+ }
+ $this->xTemplate->assign('CHECKALL', " ");
+ }
+
+ if($oddRow)
+ {
+ $ROW_COLOR = 'oddListRow';
+ $BG_COLOR = $odd_bg;
+ }
+ else
+ {
+ $ROW_COLOR = 'evenListRow';
+ $BG_COLOR = $even_bg;
+ }
+ $oddRow = !$oddRow;
+
+ $this->xTemplate->assign("ROW_COLOR", $ROW_COLOR);
+ $this->xTemplate->assign("BG_COLOR", $BG_COLOR);
+ $layout_manager = $this->getLayoutManager();
+ $layout_manager->setAttribute('context','List');
+ $layout_manager->setAttribute('image_path',$this->local_image_path);
+ $layout_manager->setAttribute('module_name', $subpanel_def->_instance_properties['module']);
+ if(!empty($this->child_focus))
+ $layout_manager->setAttribute('related_module_name',$this->child_focus->module_dir);
+
+ //AG$subpanel_data = $this->list_field_defs;
+ //$bla = array_pop($subpanel_data);
+ //select which sub-panel to display here, the decision will be made based on the type of
+ //the sub-panel and panel in the bean being processed.
+ if($subpanel_def->isCollection()) {
+ $thepanel=$subpanel_def->sub_subpanels[$aItem->panel_name];
+ } else {
+ $thepanel=$subpanel_def;
+ }
+ //get data source name
+ $linked_field=$thepanel->get_data_source_name();
+ $linked_field_set=$thepanel->get_data_source_name(true);
+ foreach($thepanel->get_list_fields() as $field_name=>$list_field)
+ {
+ //add linked field attribute to the array.
+ $list_field['linked_field']=$linked_field;
+ $list_field['linked_field_set']=$linked_field_set;
+
+ $usage = empty($list_field['usage']) ? '' : $list_field['usage'];
+ if($usage != 'query_only')
+ {
+ $list_field['name']=$field_name;
+
+ $module_field = $field_name.'_mod';
+ $owner_field = $field_name.'_owner';
+ if(!empty($aItem->$module_field)) {
+
+ $list_field['owner_id'] = $aItem->$owner_field;
+ $list_field['owner_module'] = $aItem->$module_field;
+
+ } else {
+ $list_field['owner_id'] = false;
+ $list_field['owner_module'] = false;
+ }
+ if(isset($list_field['alias'])) $list_field['name'] = $list_field['alias'];
+ else $list_field['name']=$field_name;
+ $list_field['fields'] = $fields;
+ $list_field['module'] = $aItem->module_dir;
+ $list_field['start_link_wrapper'] = $this->start_link_wrapper;
+ $list_field['end_link_wrapper'] = $this->end_link_wrapper;
+ $list_field['subpanel_id'] = $this->subpanel_id;
+ $list_field['DetailView'] = $aItem->ACLAccess('DetailView');
+ $list_field['ListView'] = $aItem->ACLAccess('ListView');
+ $list_field['EditView'] = $aItem->ACLAccess('EditView');
+ $list_field['Delete'] = $aItem->ACLAccess('Delete');
+ if ( isset($aItem->field_defs[strtolower($list_field['name'])])) {
+ require_once('include/SugarFields/SugarFieldHandler.php');
+ // We need to see if a sugar field exists for this field type first,
+ // if it doesn't, toss it at the old sugarWidgets. This is for
+ // backwards compatibilty and will be removed in a future release
+ $vardef = $aItem->field_defs[strtolower($list_field['name'])];
+ if ( isset($vardef['type']) ) {
+ $fieldType = isset($vardef['custom_type'])?$vardef['custom_type']:$vardef['type'];
+ $tmpField = SugarFieldHandler::getSugarField($fieldType,true);
+ } else {
+ $tmpField = NULL;
+ }
+
+ if ( $tmpField != NULL ) {
+ $widget_contents = SugarFieldHandler::displaySmarty($list_field['fields'],$vardef,'ListView',$list_field);
+ } else {
+ // No SugarField for this particular type
+ // Use the old, icky, SugarWidget for now
+ $widget_contents = $layout_manager->widgetDisplay($list_field);
+ }
+
+ if ( isset($list_field['widget_class']) && $list_field['widget_class'] == 'SubPanelDetailViewLink' ) {
+ // We need to call into the old SugarWidgets for the time being, so it can generate a proper link with all the various corner-cases handled
+ // So we'll populate the field data with the pre-rendered display for the field
+ $list_field['fields'][$field_name] = $widget_contents;
+ if('full_name' == $field_name){//bug #32465
+ $list_field['fields'][strtoupper($field_name)] = $widget_contents;
+ }
+ $widget_contents = $layout_manager->widgetDisplay($list_field);
+ } else if(isset($list_field['widget_class']) && $list_field['widget_class'] == 'SubPanelEmailLink' ) {
+ $widget_contents = $layout_manager->widgetDisplay($list_field);
+ }
+ } else {
+ // This handles the edit and remove buttons
+ $widget_contents = $layout_manager->widgetDisplay($list_field);
+ }
+ static $count;
+ if(!isset($count))$count = 0; else $count++;
+ $this->xTemplate->assign('CELL_COUNT', $count);
+ if ( empty($widget_contents) ) $widget_contents = ' ';
+ $this->xTemplate->assign('CELL', $widget_contents);
+ $this->xTemplate->parse($xtemplateSection.".row.cell");
+ }
+ }
+
+ $aItem->setupCustomFields($aItem->module_dir);
+ $aItem->custom_fields->populateAllXTPL($this->xTemplate, 'detail', $html_varName, $fields);
+
+ $count++;
+
+ $this->xTemplate->parse($xtemplateSection.".row");
+ }
+
+ $this->xTemplate->parse($xtemplateSection);
+}
+
+/**sets whether or not to display the xtemplate header and footer
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+function setDisplayHeaderAndFooter($bool) {
+ $this->display_header_and_footer = $bool;
+}
+
+/**initializes ListView
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function ListView() {
+
+
+ if(!$this->initialized) {
+ global $sugar_config;
+ $this->records_per_page = $sugar_config['list_max_entries_per_page'] + 0;
+ $this->initialized = true;
+ global $app_strings, $currentModule;
+ $this->local_theme = SugarThemeRegistry::current()->__toString();
+ $this->local_app_strings =$app_strings;
+ $this->local_image_path = SugarThemeRegistry::current()->getImagePath();
+ $this->local_current_module = $currentModule;
+ }
+}
+/**sets how many records should be displayed per page in the list view
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setRecordsPerPage($count) {
+ $this->records_per_page = $count;
+}
+/**sets the header title */
+ function setHeaderTitle($value) {
+ $this->header_title = $value;
+}
+/**sets the header text this is text thats appended to the header table and is usually used for the creation of buttons
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setHeaderText($value) {
+ $this->header_text = $value;
+}
+/**sets the path for the XTemplate HTML file to be used this is only needed to be set if you are allowing ListView to create the XTemplate
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setXTemplatePath($value) {
+ $this->xTemplatePath= $value;
+}
+
+/**this is a helper function for allowing ListView to create a new XTemplate it groups parameters that should be set into a single function
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function initNewXTemplate($XTemplatePath, $modString, $imagePath = null) {
+ $this->setXTemplatePath($XTemplatePath);
+ if(isset($modString))
+ $this->setModStrings($modString);
+ if(isset($imagePath))
+ $this->setImagePath($imagePath);
+}
+
+
+function getOrderBy($varName, $defaultOrderBy='', $force_sortorder='') {
+ $sortBy = $this->getSessionVariable($varName, "ORDER_BY") ;
+
+ if(empty($sortBy)) {
+ $this->setUserVariable($varName, "ORDER_BY", $defaultOrderBy);
+ $sortBy = $defaultOrderBy;
+ } else {
+ $this->setUserVariable($varName, "ORDER_BY", $sortBy);
+ }
+ if($sortBy == 'amount') {
+ $sortBy = 'amount*1';
+ }
+ if($sortBy == 'amount_usdollar') {
+ $sortBy = 'amount_usdollar*1';
+ }
+
+ $desc = $this->getSessionVariable($varName, $sortBy."S");
+
+ if(empty($desc))
+ $desc = false;
+ if(isset($_REQUEST[$this->getSessionVariableName($varName, "ORDER_BY")]))
+ $last = $this->getSessionVariable($varName, "OBL");
+ if(!empty($last) && $last == $sortBy) {
+ $desc = !$desc;
+ }else {
+ $this->setSessionVariable($varName, "OBL", $sortBy);
+ }
+ $this->setSessionVariable($varName, $sortBy."S", $desc);
+ if(!empty($sortBy)) {
+ if(empty($force_sortorder)) {
+ if(substr_count(strtolower($sortBy), ' desc') == 0 && substr_count(strtolower($sortBy), ' asc') == 0) {
+ if($desc) {
+ $this->query_orderby = $sortBy.' desc';
+ } else {
+ $this->query_orderby = $sortBy.' asc';
+ }
+ }
+
+ } else {
+ $this->query_orderby = $sortBy . ' ' . $force_sortorder;
+ }
+ }else {
+ $this->query_orderby = "";
+ }
+ $this->sortby = $sortBy;
+ return $this->query_orderby;
+
+}
+
+
+/**sets the parameters dealing with the db
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setQuery($where, $limit, $orderBy, $varName, $allowOrderByOveride=true) {
+ $this->query_where = $where;
+ if($this->getSessionVariable("query", "where") != $where) {
+ $this->query_where_has_changed = true;
+ $this->setSessionVariable("query", "where", $where);
+ }
+
+ $this->query_limit = $limit;
+ if(!$allowOrderByOveride) {
+ $this->query_orderby = $orderBy;
+ return;
+ }
+ $this->getOrderBy($varName, $orderBy);
+
+ $this->setLocalSessionVariable($varName, "QUERY_WHERE", $where);
+
+ //SETTING ORDER_BY FOR USE IN DETAILVIEW
+ $this->setLocalSessionVariable($varName, "ORDER_BY_DETAIL", $this->query_orderby);
+}
+
+function displayArrow() {
+
+}
+
+/**sets the theme used only use if it is different from the global
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setTheme($theme) {
+ $this->local_theme = $theme;
+ if(isset($this->xTemplate))$this->xTemplate->assign("THEME", $this->local_theme);
+}
+
+/**sets the AppStrings used only use if it is different from the global
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setAppStrings($app_strings) {
+ unset($this->local_app_strings);
+ $this->local_app_strings = $app_strings;
+ if(isset($this->xTemplate))$this->xTemplate->assign("APP", $this->local_app_strings);
+}
+
+/**sets the ModStrings used
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setModStrings($mod_strings) {
+ unset($this->local_module_strings);
+ $this->local_mod_strings = $mod_strings;
+ if(isset($this->xTemplate))$this->xTemplate->assign("MOD", $this->local_mod_strings);
+}
+
+/**sets the ImagePath used
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setImagePath($image_path) {
+ $this->local_image_path = $image_path;
+ if(empty($this->local_image_path)) {
+ $this->local_image_path = SugarThemeRegistry::get($this->local_theme)->getImagePath();
+ }
+ if(isset($this->xTemplate))$this->xTemplate->assign("IMAGE_PATH", $this->local_image_path);
+}
+
+/**sets the currentModule only use if this is different from the global
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setCurrentModule($currentModule) {
+ unset($this->local_current_module);
+ $this->local_current_module = $currentModule;
+ if(isset($this->xTemplate))$this->xTemplate->assign("MODULE_NAME", $this->local_current_module);
+}
+
+/**INTERNAL FUNCTION creates an XTemplate DO NOT CALL THIS THIS IS AN INTERNAL FUNCTION
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function createXTemplate() {
+ if(!isset($this->xTemplate)) {
+ if(isset($this->xTemplatePath)) {
+
+ $this->xTemplate = new XTemplate($this->xTemplatePath);
+ $this->xTemplate->assign("APP", $this->local_app_strings);
+ if(isset($this->local_mod_strings))$this->xTemplate->assign("MOD", $this->local_mod_strings);
+ $this->xTemplate->assign("THEME", $this->local_theme);
+ $this->xTemplate->assign("IMAGE_PATH", $this->local_image_path);
+ $this->xTemplate->assign("MODULE_NAME", $this->local_current_module);
+ } else {
+ $GLOBALS['log']->error("NO XTEMPLATEPATH DEFINED CANNOT CREATE XTEMPLATE");
+ }
+ }
+}
+
+/**sets the XTemplate telling ListView to use newXTemplate as its current XTemplate
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setXTemplate($newXTemplate) {
+ $this->xTemplate = $newXTemplate;
+}
+
+/**returns the XTemplate
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function getXTemplate() {
+ return $this->xTemplate;
+}
+
+/**assigns a name value pair to the XTemplate
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function xTemplateAssign($name, $value) {
+
+ if(!isset($this->xTemplate)) {
+ $this->createXTemplate();
+ }
+ $this->xTemplate->assign($name, $value);
+
+}
+
+/**INTERNAL FUNCTION returns the offset first checking the querey then checking the session if the where clause has changed from the last time it returns 0
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function getOffset($localVarName) {
+ if($this->query_where_has_changed || isset($GLOBALS['record_has_changed'])) {
+ $this->setSessionVariable($localVarName,"offset", 0);
+ }
+ $offset = $this->getSessionVariable($localVarName,"offset");
+ if(isset($offset)) {
+ return $offset;
+ }
+ return 0;
+}
+
+/**INTERNAL FUNCTION sets the offset in the session
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setOffset($localVarName, $value) {
+ $this->setSessionVariable($localVarName, "offset", $value);
+}
+
+/**INTERNAL FUNCTION sets a session variable
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function setSessionVariable($localVarName,$varName, $value) {
+ $_SESSION[$this->local_current_module."_".$localVarName."_".$varName] = $value;
+}
+
+function setUserVariable($localVarName,$varName, $value) {
+ if($this->is_dynamic || $localVarName == 'CELL')return;
+ global $current_user;
+ $current_user->setPreference($this->local_current_module."_".$localVarName."_".$varName, $value);
+}
+
+/**INTERNAL FUNCTION returns a session variable first checking the querey for it then checking the session
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________.
+*/
+ function getSessionVariable($localVarName,$varName) {
+ //Set any variables pass in through request first
+ if(isset($_REQUEST[$this->getSessionVariableName($localVarName, $varName)])) {
+ $this->setSessionVariable($localVarName,$varName,$_REQUEST[$this->getSessionVariableName($localVarName, $varName)]);
+ }
+
+ if(isset($_SESSION[$this->getSessionVariableName($localVarName, $varName)])) {
+ return $_SESSION[$this->getSessionVariableName($localVarName, $varName)];
+ }
+ return "";
+}
+
+function getUserVariable($localVarName, $varName) {
+ global $current_user;
+ if($this->is_dynamic || $localVarName == 'CELL')return;
+ if(isset($_REQUEST[$this->getSessionVariableName($localVarName, $varName)])) {
+
+ $this->setUserVariable($localVarName,$varName,$_REQUEST[$this->getSessionVariableName($localVarName, $varName)]);
+ }
+ return $current_user->getPreference($this->getSessionVariableName($localVarName, $varName));
+}
+
+
+
+
+
+ /**
+
+ * @return void
+ * @param unknown $localVarName
+ * @param unknown $varName
+ * @desc INTERNAL FUNCTION returns the session/query variable name
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________..
+ */
+ function getSessionVariableName($localVarName,$varName) {
+ return $this->local_current_module."_".$localVarName."_".$varName;
+ }
+
+ /**
+
+ * @return void
+ * @param unknown $seed
+ * @param unknown $xTemplateSection
+ * @param unknown $html_varName
+ * @desc INTERNAL FUNCTION Handles List Views using seeds that extend SugarBean
+ $XTemplateSection is the section in the XTemplate file that should be parsed usually main
+ $html_VarName is the variable name used in the XTemplateFile e.g. TASK
+ $seed is a seed that extends SugarBean
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc..
+ * All Rights Reserved..
+ * Contributor(s): ______________________________________..
+ */
+ function processSugarBean($xtemplateSection, $html_varName, $seed) {
+ global $list_view_row_count;
+
+ $current_offset = $this->getOffset($html_varName);
+ $response = array();
+
+ //ADDING VCR CONTROL
+ SugarVCR::erase($seed->module_dir);
+ $params = array();
+ //$filter = array('id', 'full_name');
+ $filter=array();
+ $ret_array = $seed->create_new_list_query($this->query_orderby, $this->query_where, $filter, $params, 0, '', true, $seed, true);
+ if(!is_array($params)) $params = array();
+ if(!isset($params['custom_select'])) $params['custom_select'] = '';
+ if(!isset($params['custom_from'])) $params['custom_from'] = '';
+ if(!isset($params['custom_where'])) $params['custom_where'] = '';
+ if(!isset($params['custom_order_by'])) $params['custom_order_by'] = '';
+ $main_query = $ret_array['select'] . $params['custom_select'] . $ret_array['from'] . $params['custom_from'] . $ret_array['where'] . $params['custom_where'] . $ret_array['order_by'] . $params['custom_order_by'];
+ SugarVCR::store($seed->module_dir, $main_query);
+ //ADDING VCR CONTROL
+
+ if(empty($this->related_field_name)) {
+ $response = $seed->get_list($this->query_orderby, $this->query_where, $current_offset, $this->query_limit);
+ } else {
+ $related_field_name = $this->related_field_name;
+ $response = $seed->get_related_list($this->child_focus,$related_field_name, $this->query_orderby,
+ $this->query_where, $current_offset, $this->query_limit);
+ }
+
+ $list = $response['list'];
+ $row_count = $response['row_count'];
+ $next_offset = $response['next_offset'];
+ $previous_offset = $response['previous_offset'];
+
+ if(!empty($response['current_offset'])) {
+ $current_offset = $response['current_offset'];
+ }
+
+ $list_view_row_count = $row_count;
+ $this->processListNavigation($xtemplateSection,$html_varName, $current_offset, $next_offset, $previous_offset, $row_count, null, null, empty($seed->column_fields) ? null : count($seed->column_fields));
+
+ return $list;
+ }
+
+ function processUnionBeans($sugarbean, $subpanel_def, $html_var = 'CELL') {
+
+ $last_detailview_record = $this->getSessionVariable("detailview", "record");
+ if(!empty($last_detailview_record) && $last_detailview_record != $sugarbean->id){
+ $GLOBALS['record_has_changed'] = true;
+ }
+ $this->setSessionVariable("detailview", "record", $sugarbean->id);
+
+ $current_offset = $this->getOffset($html_var);
+ $module = isset($_REQUEST['module']) ? $_REQUEST['module'] : '';
+ $response = array();
+
+ $this->sort_order = 'asc';
+ if(isset($_REQUEST['sort_order'])) {
+ $this->sort_order = $_REQUEST['sort_order'];
+ } else {
+ if(isset($subpanel_def->_instance_properties['sort_order'])) {
+ $sort_order = $subpanel_def->_instance_properties['sort_order'];
+ }
+
+ if(isset($_SESSION['last_sub' .$this->subpanel_module. '_order'])) {
+ // We swap the order when the request contains an offset (indicating a column sort issued);
+ // otherwise we do not sort. If we don't make this check, then the subpanel listview will
+ // swap ordering each time a new record is entered via quick create forms
+
+ if(isset($_REQUEST[$module. '_' . $html_var . '_offset'])) {
+ $this->sort_order = $_SESSION['last_sub' .$this->subpanel_module. '_order'] == 'asc' ? 'desc' : 'asc';
+ } else {
+ $this->sort_order = $_SESSION['last_sub' .$this->subpanel_module. '_order'];
+ }
+ }
+ elseif(isset($sort_order)) {
+ $this->sort_order = $sort_order;
+ }
+ }
+
+ if (isset($subpanel_def->_instance_properties['sort_by'])) {
+ $this->query_orderby = $subpanel_def->_instance_properties['sort_by'];
+ } else {
+ $this->query_orderby = 'id';
+ }
+
+ $this->getOrderBy($html_var,$this->query_orderby, $this->sort_order);
+
+ $_SESSION['last_sub' .$this->subpanel_module. '_order'] = $this->sort_order;
+ $_SESSION['last_sub' .$this->subpanel_module. '_url'] = $this->getBaseURL($html_var);
+
+ // Bug 8139 - Correct Subpanel sorting on 'name', when subpanel sorting default is 'last_name, first_name'
+ if (($this->sortby == 'name' || $this->sortby == 'last_name') &&
+ str_replace(' ', '', trim($subpanel_def->_instance_properties['sort_by'])) == 'last_name,first_name') {
+ $this->sortby = 'last_name '.$this->sort_order.', first_name ';
+ }
+
+ if(!empty($this->response)){
+ $response =& $this->response;
+ echo 'cached';
+ }else{
+ $response = SugarBean::get_union_related_list($sugarbean,$this->sortby, $this->sort_order, $this->query_where, $current_offset, -1,-1,$this->query_limit,$subpanel_def);
+ $this->response =& $response;
+ }
+ $list = $response['list'];
+ $row_count = $response['row_count'];
+ $next_offset = $response['next_offset'];
+ $previous_offset = $response['previous_offset'];
+ if(!empty($response['current_offset']))$current_offset = $response['current_offset'];
+ global $list_view_row_count;
+ $list_view_row_count = $row_count;
+ $this->processListNavigation('dyn_list_view', $html_var, $current_offset, $next_offset, $previous_offset, $row_count, $sugarbean,$subpanel_def);
+
+ return array('list'=>$list, 'parent_data'=>$response['parent_data'], 'query'=>$response['query']);
+ }
+
+ function getBaseURL($html_varName) {
+ static $cache = array();
+
+ if(!empty($cache[$html_varName]))return $cache[$html_varName];
+ $blockVariables = array('mass', 'uid', 'massupdate', 'delete', 'merge', 'selectCount','current_query_by_page');
+ if(!empty($this->base_URL)) {
+ return $this->base_URL;
+ }
+
+ $baseurl = $_SERVER['PHP_SELF'];
+ if(empty($baseurl)) {
+ $baseurl = 'index.php';
+ }
+
+ /*fixes an issue with deletes when doing a search*/
+ foreach(array_merge($_GET, $_POST) as $name=>$value) {
+ //echo ("$name = $value ");
+ if(!empty($value) && $name != 'sort_order' //&& $name != ListView::getSessionVariableName($html_varName,"ORDER_BY")
+ && $name != ListView::getSessionVariableName($html_varName,"offset")
+ /*&& substr_count($name, "ORDER_BY")==0*/ && !in_array($name, $blockVariables))
+ {
+ if(is_array($value)) {
+ foreach($value as $valuename=>$valuevalue) {
+ if(substr_count($baseurl, '?') > 0)
+ $baseurl .= "&{$name}[]=".$valuevalue;
+ else
+ $baseurl .= "?{$name}[]=".$valuevalue;
+ }
+ } else {
+ $value = urlencode($value);
+ if(substr_count($baseurl, '?') > 0) {
+ $baseurl .= "&$name=$value";
+ } else {
+ $baseurl .= "?$name=$value";
+ }
+ }
+ }
+ }
+
+
+ if($_SERVER['REQUEST_METHOD'] == 'POST') {
+ // at this point it is possible that the above foreach already executed resulting in double ?'s in the url
+ if(substr_count($baseurl, '?') == 0) {
+ $baseurl .= '?';
+ }
+ if(isset($_REQUEST['action'])) $baseurl.= '&action='.$_REQUEST['action'];
+ if(isset($_REQUEST['record'])) $baseurl .= '&record='.$_REQUEST['record'];
+ if(isset($_REQUEST['module'])) $baseurl .= '&module='.$_REQUEST['module'];
+ }
+
+ $baseurl .= "&".ListView::getSessionVariableName($html_varName,"offset")."=";
+ $cache[$html_varName] = $baseurl;
+ return $baseurl;
+ }
+ /**
+ * @return void
+ * @param unknown $data
+ * @param unknown $xTemplateSection
+ * @param unknown $html_varName
+ * @desc INTERNAL FUNCTION process the List Navigation
+ * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
+ * All Rights Reserved.
+ * Contributor(s): ______________________________________..
+ */
+ function processListNavigation($xtemplateSection, $html_varName, $current_offset, $next_offset, $previous_offset, $row_count, $sugarbean=null, $subpanel_def=null, $col_count = 20) {
+
+ global $export_module;
+ global $sugar_config;
+ global $current_user;
+ global $currentModule;
+
+ $start_record = $current_offset + 1;
+
+ if(!is_numeric($col_count))
+ $col_count = 20;
+
+ if($row_count == 0)
+ $start_record = 0;
+
+ $end_record = $start_record + $this->records_per_page;
+ // back up the the last page.
+ if($end_record > $row_count+1) {
+ $end_record = $row_count+1;
+ }
+ // Deterime the start location of the last page
+ if($row_count == 0)
+ $number_pages = 0;
+ else
+ $number_pages = floor(($row_count - 1) / $this->records_per_page);
+
+ $last_offset = $number_pages * $this->records_per_page;
+
+ if(empty($this->query_limit) || $this->query_limit > $this->records_per_page) {
+ $this->base_URL = $this->getBaseURL($html_varName);
+ $dynamic_url = '';
+
+ if($this->is_dynamic) {
+ $dynamic_url .='&'. $this->getSessionVariableName($html_varName,'ORDER_BY') . '='. $this->getSessionVariable($html_varName,'ORDER_BY').'&sort_order='.$this->sort_order.'&to_pdf=true&action=SubPanelViewer&subpanel=' . $this->subpanel_module;
+ }
+
+ $current_URL = $this->base_URL.$current_offset.$dynamic_url;
+ $start_URL = $this->base_URL."0".$dynamic_url;
+ $previous_URL = $this->base_URL.$previous_offset.$dynamic_url;
+ $next_URL = $this->base_URL.$next_offset.$dynamic_url;
+ $end_URL = $this->base_URL.'end'.$dynamic_url;
+
+ if(!empty($this->start_link_wrapper)) {
+ $current_URL = $this->start_link_wrapper.$current_URL.$this->end_link_wrapper;
+ $start_URL = $this->start_link_wrapper.$start_URL.$this->end_link_wrapper;
+ $previous_URL = $this->start_link_wrapper.$previous_URL.$this->end_link_wrapper;
+ $next_URL = $this->start_link_wrapper.$next_URL.$this->end_link_wrapper;
+ $end_URL = $this->start_link_wrapper.$end_URL.$this->end_link_wrapper;
+ }
+
+ $moduleString = "{$currentModule}_{$html_varName}_offset";
+ $moduleStringOrder = "{$currentModule}_{$html_varName}_ORDER_BY";
+ if($this->shouldProcess && !$this->multi_select_popup) {
+ // check the checkboxes onload
+ echo "\n";
+
+ $massUpdateRun = isset($_REQUEST['massupdate']) && $_REQUEST['massupdate'] == 'true';
+ $uids = empty($_REQUEST['uid']) || $massUpdateRun ? '' : $_REQUEST['uid'];
+ $select_entire_list = isset($_REQUEST['select_entire_list']) && !$massUpdateRun ? $_REQUEST['select_entire_list'] : 0;
+
+ echo "{$uids} \n" .
+ " \n".
+ " \n".
+ " \n";
+
+ }
+
+
+ $GLOBALS['log']->debug("Offsets: (start, previous, next, last)(0, $previous_offset, $next_offset, $last_offset)");
+
+ if(0 == $current_offset) {
+ $start_link = "".SugarThemeRegistry::current()->getImage("start_off","alt='".$this->local_app_strings['LNK_LIST_START']."' border='0' align='absmiddle'")." ";
+ $previous_link = "".SugarThemeRegistry::current()->getImage("previous_off","alt='".$this->local_app_strings['LNK_LIST_PREVIOUS']."' border='0' align='absmiddle'")." ";
+ } else {
+ if($this->multi_select_popup) {// nav links for multiselect popup, submit form to save checks.
+ $start_link = "".SugarThemeRegistry::current()->getImage("start","alt='".$this->local_app_strings['LNK_LIST_START']."' border='0' align='absmiddle'")." ";
+ $previous_link = "".SugarThemeRegistry::current()->getImage("previous","alt='".$this->local_app_strings['LNK_LIST_PREVIOUS']."' border='0' align='absmiddle'")." ";
+ } elseif($this->shouldProcess) {
+ $start_link = "".SugarThemeRegistry::current()->getImage("start","alt='".$this->local_app_strings['LNK_LIST_START']."' border='0' align='absmiddle'")." ";
+ $previous_link = "".SugarThemeRegistry::current()->getImage("previous","alt='".$this->local_app_strings['LNK_LIST_PREVIOUS']."' border='0' align='absmiddle'")." ";
+ } else {
+ $onClick = '';
+ if(0 != preg_match('/javascript.*/', $start_URL)){
+ $onClick = "\"$start_URL;\"";
+ }else{
+ $onClick ="'location.href=\"$start_URL\";'";
+ }
+ $start_link = "".SugarThemeRegistry::current()->getImage("start","alt='".$this->local_app_strings['LNK_LIST_START']."' border='0' align='absmiddle'")." ";
+
+ $onClick = '';
+ if(0 != preg_match('/javascript.*/', $previous_URL)){
+ $onClick = "\"$previous_URL;\"";
+ }else{
+ $onClick = "'location.href=\"$previous_URL\";'";
+ }
+ $previous_link = "".SugarThemeRegistry::current()->getImage("previous","alt='".$this->local_app_strings['LNK_LIST_PREVIOUS']."' border='0' align='absmiddle'")." ";
+ }
+ }
+
+ if($last_offset <= $current_offset) {
+ $end_link = "".SugarThemeRegistry::current()->getImage("end_off","alt='".$this->local_app_strings['LNK_LIST_END']."' border='0' align='absmiddle'")." ";
+ $next_link = "".SugarThemeRegistry::current()->getImage("next_off","alt='".$this->local_app_strings['LNK_LIST_NEXT']."' border='0' align='absmiddle'")." ";
+ } else {
+ if($this->multi_select_popup) { // nav links for multiselect popup, submit form to save checks.
+ $end_link = "".SugarThemeRegistry::current()->getImage("end","alt='".$this->local_app_strings['LNK_LIST_END']."' border='0' align='absmiddle'")." ";
+ if(!empty($sugar_config['disable_count_query'])) {
+ $end_link = '';
+ }
+ $next_link = "".SugarThemeRegistry::current()->getImage("next","alt='".$this->local_app_strings['LNK_LIST_NEXT']."' border='0' align='absmiddle'")." ";
+ } elseif($this->shouldProcess) {
+ $end_link = "".SugarThemeRegistry::current()->getImage("end","alt='".$this->local_app_strings['LNK_LIST_END']."' border='0' align='absmiddle'")." ";
+ $next_link = "".SugarThemeRegistry::current()->getImage("next","alt='".$this->local_app_strings['LNK_LIST_NEXT']."' border='0' align='absmiddle'")." ";
+ } else {
+ $onClick = '';
+ if(0 != preg_match('/javascript.*/', $next_URL)){
+ $onClick = "\"$next_URL;\"";
+ }else{
+ $onClick ="'location.href=\"$next_URL\";'";
+ }
+ $next_link = "".SugarThemeRegistry::current()->getImage("next","alt='".$this->local_app_strings['LNK_LIST_NEXT']."' border='0' align='absmiddle'")." ";
+
+ $onClick = '';
+ if(0 != preg_match('/javascript.*/', $end_URL)){
+ $onClick = "\"$end_URL;\"";
+ }else{
+ $onClick = "'location.href=\"$end_URL\";'";
+ }
+ $end_link = "".SugarThemeRegistry::current()->getImage("end","alt='".$this->local_app_strings['LNK_LIST_END']."' border='0' align='absmiddle'")." ";
+
+ }
+ }
+
+ $GLOBALS['log']->info("Offset (next, current, prev)($next_offset, $current_offset, $previous_offset)");
+ $GLOBALS['log']->info("Start/end records ($start_record, $end_record)");
+
+ $end_record = $end_record-1;
+
+ echo "";
+
+ if($this->show_select_menu) {
+ $select_link = "".$this->local_app_strings['LBL_LINK_SELECT']." "." ";
+ } else {
+ $select_link = " ";
+ }
+
+ // put overlib strings into functions to avoid backslash plague!
+ /*echo "";
+ */
+ //$export_link = "".SugarThemeRegistry::current()->getImage("export","alt='".$this->local_app_strings['LBL_EXPORT']."' border='0' align='absmiddle'")." ".$this->local_app_strings['LBL_EXPORT']." ";
+ $export_link = ' local_app_strings['LBL_LISTVIEW_NO_SELECTED'].'\')">';
+
+ if($this->show_delete_button) {
+ $delete_link = ' ';
+ } else {
+ $delete_link = ' ';
+ }
+
+ $admin = new Administration();
+ $admin->retrieveSettings('system');
+
+ $user_merge = $current_user->getPreference('mailmerge_on');
+ if($user_merge == 'on' && isset($admin->settings['system_mailmerge_on']) && $admin->settings['system_mailmerge_on']) {
+ echo "";
+ $merge_link = " | ".$this->local_app_strings['LBL_MAILMERGE']." ";
+ } else {
+ $merge_link = " ";
+ }
+
+ $selected_objects_span = " | {$this->local_app_strings['LBL_LISTVIEW_SELECTED_OBJECTS']} ";
+
+ if($_REQUEST['module'] == 'Home' || $this->local_current_module == 'Import'
+ || $this->show_export_button == false
+ || (!empty($sugar_config['disable_export']))
+ || (!empty($sugar_config['admin_export_only'])
+ && !(
+ is_admin($current_user)
+ || (ACLController::moduleSupportsACL($_REQUEST['module'])
+ && ACLAction::getUserAccessLevel($current_user->id,$_REQUEST['module'], 'access') == ACL_ALLOW_ENABLED
+ && (ACLAction::getUserAccessLevel($current_user->id, $_REQUEST['module'], 'admin') == ACL_ALLOW_ADMIN ||
+ ACLAction::getUserAccessLevel($current_user->id, $_REQUEST['module'], 'admin') == ACL_ALLOW_ADMIN_DEV)))))
+ {
+ if ($_REQUEST['module'] != 'InboundEmail' && $_REQUEST['module'] != 'EmailMan' && $_REQUEST['module'] != 'iFrames') {
+ $selected_objects_span = '';
+ }
+ $export_link = " ";
+ $merge_link = " ";
+ } elseif($_REQUEST['module'] != "Accounts" && $_REQUEST['module'] != "Cases" && $_REQUEST['module'] != "Contacts" && $_REQUEST['module'] != "Leads" && $_REQUEST['module'] != "Opportunities") {
+ $merge_link = " ";
+ }
+
+ if($this->show_paging == true) {
+ if(!empty($sugar_config['disable_count_query'])) {
+ if($row_count > $end_record) {
+ $row_count .= '+';
+ }
+ }
+
+ $html_text = '';
+ $html_text .= "