From 68b9a688b93f7ebc3a76c11850bb809178ab0470 Mon Sep 17 00:00:00 2001 From: John Mertic Date: Fri, 15 Jul 2011 12:11:34 -0400 Subject: [PATCH] Release 6.2.1 --- data/SugarBean.php | 4 +- files.md5 | 258 +++++++++--------- include/Dashlets/DashletGeneric.php | 47 +++- include/Dashlets/DashletGenericDisplay.tpl | 34 +-- include/ListView/ListViewNoMassUpdate.tpl | 12 +- include/ListView/ListViewSmarty.php | 4 +- .../MVC/Controller/entry_point_registry.php | 1 + include/MVC/SugarApplication.php | 2 +- include/MVC/View/SugarView.php | 3 + include/MVC/View/views/view.popup.php | 2 +- include/MassUpdate.php | 2 +- include/Popups/PopupSmarty.php | 12 +- include/QuickSearchDefaults.php | 29 -- include/SugarCache/SugarCache.php | 43 +++ include/SugarCharts/Jit/js/Jit/jit.js | 28 +- include/SugarCharts/Jit/js/mySugarCharts.js | 7 +- include/SugarCharts/Jit/js/sugarCharts.js | 27 +- include/SugarCharts/Jit/tpls/chart.tpl | 19 +- .../Fields/Collection/SugarFieldCollection.js | 4 +- .../Collection/ViewSugarFieldCollection.php | 7 +- .../SugarFields/Fields/File/SugarFieldFile.js | 4 +- .../Fields/File/SugarFieldFile.php | 27 +- .../SugarFields/Fields/Iframe/DetailView.tpl | 6 +- include/SugarObjects/VardefManager.php | 66 +++-- .../SugarObjects/templates/file/vardefs.php | 1 + .../SugarObjects/templates/person/Person.php | 22 +- include/TemplateHandler/TemplateHandler.php | 11 +- include/connectors/sources/default/source.php | 15 +- include/database/MysqliManager.php | 1 + include/dir_inc.php | 3 +- include/externalAPI/ExternalAPIFactory.php | 2 +- include/formbase.php | 23 +- include/generic/LayoutManager.php | 85 +++--- include/javascript/sugar_3.js | 4 +- include/javascript/sugar_grp1.js | 4 +- include/javascript/sugar_grp_emails.js | 4 +- include/javascript/sugar_grp_quickcomp.js | 4 +- include/language/en_us.lang.php | 5 +- include/utils.php | 50 +++- include/utils/mvc_utils.php | 2 +- include/utils/php_zip_utils.php | 6 + install/install_utils.php | 20 ++ install/performSetup.php | 4 + .../include/SugarCharts/Jit/js/Jit/jit.js | 199 ++++++++++++-- .../SugarCharts/Jit/js/mySugarCharts.js | 36 +-- .../include/SugarCharts/Jit/js/sugarCharts.js | 118 +++++++- .../Fields/Collection/SugarFieldCollection.js | 9 +- .../SugarFields/Fields/File/SugarFieldFile.js | 19 +- .../src_files/include/javascript/sugar_3.js | 3 +- modules/ACLActions/ACLAction.php | 2 +- modules/ACLRoles/DetailUserRole.php | 2 +- modules/ACLRoles/ListUsers.php | 2 +- modules/ACLRoles/views/view.list.php | 2 +- .../metadata/adminpaneldefs.php | 2 +- modules/Campaigns/TrackDetailView.php | 5 +- .../Connectors/InstallDefaultConnectors.php | 8 +- .../ext/rest/insideview/InsideView.en_us.tpl | 133 +++++++++ .../rest/insideview/InsideViewLogicHook.php | 209 ++++++++++++++ .../ext/rest/insideview/images/close.png | Bin 0 -> 1546 bytes .../ext/rest/insideview/images/insideview.png | Bin 0 -> 6350 bytes .../images/insideview_collapsed.png | Bin 0 -> 4931 bytes .../insideview/images/insideview_expanded.png | Bin 0 -> 4929 bytes .../ext/rest/insideview/images/video.png | Bin 0 -> 6422 bytes .../ext/rest/insideview/insideview.php | 105 +++++++ .../sources/ext/rest/insideview/mapping.php | 55 ++++ modules/Connectors/controller.php | 30 +- .../views/view.displayproperties.php | 9 +- .../Connectors/views/view.modifydisplay.php | 2 +- .../Connectors/views/view.modifymapping.php | 2 +- .../views/view.modifyproperties.php | 2 +- .../Connectors/views/view.modifysearch.php | 2 +- modules/Contacts/Contact.php | 8 +- modules/Contacts/metadata/detailviewdefs.php | 9 + .../Documents/metadata/subpanels/default.php | 10 + modules/DynamicFields/DynamicField.php | 21 +- modules/EmailMan/EmailImage.php | 63 +++++ modules/Emails/EmailUI.css | 2 + modules/Employees/controller.php | 2 +- modules/Employees/views/view.detail.php | 2 +- modules/Employees/views/view.list.php | 4 +- modules/Home/quicksearchQuery.php | 67 +---- modules/Import/views/view.step2.php | 4 + modules/Import/views/view.step4.php | 2 +- modules/InboundEmail/EditView.html | 2 +- modules/InboundEmail/EditView.php | 11 +- modules/InboundEmail/language/en_us.lang.php | 1 + .../ModuleBuilder/Module/StudioBrowser.php | 4 +- modules/ModuleBuilder/controller.php | 6 +- modules/ModuleBuilder/views/view.module.php | 12 +- .../ModuleBuilder/views/view.modulefields.php | 33 ++- modules/MySettings/StoreQuery.php | 4 +- modules/Prospects/Prospect.php | 34 +-- modules/SavedSearch/SavedSearch.php | 4 +- .../store/TrackerSessionsDatabaseStore.php | 6 + .../SugarMerge/EditViewMerge.php | 6 +- modules/UpgradeWizard/commit.php | 2 +- modules/UpgradeWizard/end.php | 13 +- modules/UpgradeWizard/preflight.php | 6 + modules/UpgradeWizard/silentUpgrade.php | 11 +- .../UpgradeWizard/silentUpgrade_dce_step1.php | 2 +- .../UpgradeWizard/silentUpgrade_dce_step2.php | 2 +- modules/UpgradeWizard/silentUpgrade_step1.php | 8 +- modules/UpgradeWizard/silentUpgrade_step2.php | 22 +- modules/UpgradeWizard/uw_utils.php | 58 +++- modules/Users/DetailView.php | 12 +- modules/Users/EditView.php | 6 +- modules/Users/Menu.php | 2 +- modules/Users/Save.php | 8 +- modules/Users/User.php | 199 +++++++++++++- .../authentication/SAMLAuthenticate/index.php | 7 +- .../SAMLAuthenticate/lib/onelogin/saml.php | 2 +- .../lib/onelogin/saml/authrequest.php | 48 +++- .../lib/onelogin/saml/response.php | 63 ++++- .../lib/onelogin/saml/settings.php | 32 ++- .../lib/onelogin/saml/xmlsec.php | 86 +++++- .../lib/xmlseclibs/xmlseclibs.php | 2 +- .../SAMLAuthenticate/settings.php | 33 ++- modules/Users/controller.php | 4 +- modules/Users/metadata/subpaneldefs.php | 2 +- modules/Users/reassignUserRecords.php | 3 +- modules/Users/views/view.list.php | 4 +- soap/SoapHelperFunctions.php | 23 ++ soap/SoapSugarUsers.php | 23 +- sugar_version.php | 8 +- tests/PHPUnit/ChangeLog.markdown | 7 + tests/PHPUnit/File/Iterator.php | 10 +- tests/PHPUnit/File/Iterator/Factory.php | 16 +- .../PHPUnit/Extensions/GroupTestSuite.php | 2 +- .../PHPUnit/Extensions/OutputTestCase.php | 2 +- .../PHPUnit/Extensions/PhptTestCase.php | 2 +- .../Extensions/PhptTestCase/Logger.php | 2 +- .../PHPUnit/Extensions/PhptTestSuite.php | 2 +- .../PHPUnit/Extensions/RepeatedTest.php | 2 +- .../PHPUnit/Extensions/Story/Given.php | 2 +- .../Extensions/Story/ResultPrinter.php | 2 +- .../Extensions/Story/ResultPrinter/HTML.php | 2 +- .../Extensions/Story/ResultPrinter/Text.php | 2 +- .../PHPUnit/Extensions/Story/Scenario.php | 2 +- .../PHPUnit/PHPUnit/Extensions/Story/Step.php | 2 +- .../PHPUnit/Extensions/Story/TestCase.php | 2 +- .../PHPUnit/PHPUnit/Extensions/Story/Then.php | 2 +- .../PHPUnit/PHPUnit/Extensions/Story/When.php | 2 +- .../PHPUnit/Extensions/TestDecorator.php | 2 +- .../PHPUnit/Extensions/TicketListener.php | 2 +- .../Extensions/TicketListener/GitHub.php | 2 +- .../Extensions/TicketListener/GoogleCode.php | 2 +- .../Extensions/TicketListener/Trac.php | 2 +- tests/PHPUnit/PHPUnit/Framework/Assert.php | 2 +- .../PHPUnit/Framework/Assert/Functions.php | 4 + .../PHPUnit/Framework/Assert/Functions.php.in | 44 +++ .../Framework/AssertionFailedError.php | 2 +- .../PHPUnit/Framework/ComparisonFailure.php | 2 +- .../Framework/ComparisonFailure/Array.php | 2 +- .../Framework/ComparisonFailure/Object.php | 2 +- .../Framework/ComparisonFailure/Scalar.php | 2 +- .../Framework/ComparisonFailure/String.php | 2 +- .../Framework/ComparisonFailure/Type.php | 2 +- .../PHPUnit/PHPUnit/Framework/Constraint.php | 2 +- .../PHPUnit/Framework/Constraint/And.php | 2 +- .../Framework/Constraint/ArrayHasKey.php | 2 +- .../Framework/Constraint/Attribute.php | 2 +- .../Constraint/ClassHasAttribute.php | 2 +- .../Constraint/ClassHasStaticAttribute.php | 2 +- .../Framework/Constraint/FileExists.php | 2 +- .../Framework/Constraint/GreaterThan.php | 2 +- .../Framework/Constraint/IsAnything.php | 2 +- .../PHPUnit/Framework/Constraint/IsEmpty.php | 2 +- .../PHPUnit/Framework/Constraint/IsEqual.php | 2 +- .../PHPUnit/Framework/Constraint/IsFalse.php | 2 +- .../Framework/Constraint/IsIdentical.php | 2 +- .../Framework/Constraint/IsInstanceOf.php | 2 +- .../PHPUnit/Framework/Constraint/IsNull.php | 2 +- .../PHPUnit/Framework/Constraint/IsTrue.php | 2 +- .../PHPUnit/Framework/Constraint/IsType.php | 2 +- .../PHPUnit/Framework/Constraint/LessThan.php | 2 +- .../PHPUnit/Framework/Constraint/Not.php | 2 +- .../Constraint/ObjectHasAttribute.php | 2 +- .../PHPUnit/Framework/Constraint/Or.php | 2 +- .../Framework/Constraint/PCREMatch.php | 2 +- .../Framework/Constraint/StringContains.php | 2 +- .../Framework/Constraint/StringEndsWith.php | 2 +- .../Framework/Constraint/StringMatches.php | 2 +- .../Framework/Constraint/StringStartsWith.php | 2 +- .../Constraint/TraversableContains.php | 2 +- .../Constraint/TraversableContainsOnly.php | 2 +- .../PHPUnit/Framework/Constraint/Xor.php | 2 +- tests/PHPUnit/PHPUnit/Framework/Error.php | 2 +- .../PHPUnit/Framework/Error/Notice.php | 2 +- .../PHPUnit/Framework/Error/Warning.php | 2 +- tests/PHPUnit/PHPUnit/Framework/Exception.php | 2 +- .../Framework/ExpectationFailedException.php | 2 +- .../PHPUnit/Framework/IncompleteTest.php | 2 +- .../PHPUnit/Framework/IncompleteTestError.php | 2 +- .../Framework/MockObject/Builder/Identity.php | 2 +- .../MockObject/Builder/InvocationMocker.php | 2 +- .../Framework/MockObject/Builder/Match.php | 2 +- .../MockObject/Builder/MethodNameMatch.php | 2 +- .../MockObject/Builder/Namespace.php | 2 +- .../MockObject/Builder/ParametersMatch.php | 2 +- .../Framework/MockObject/Builder/Stub.php | 2 +- .../Framework/MockObject/Generator.php | 28 +- .../Generator/mocked_class.tpl.dist | 2 +- .../Framework/MockObject/Invocation.php | 2 +- .../MockObject/Invocation/Object.php | 2 +- .../MockObject/Invocation/Static.php | 2 +- .../Framework/MockObject/InvocationMocker.php | 2 +- .../Framework/MockObject/Invokable.php | 2 +- .../PHPUnit/Framework/MockObject/Matcher.php | 2 +- .../MockObject/Matcher/AnyInvokedCount.php | 2 +- .../MockObject/Matcher/AnyParameters.php | 2 +- .../MockObject/Matcher/Invocation.php | 2 +- .../MockObject/Matcher/InvokedAtIndex.php | 2 +- .../MockObject/Matcher/InvokedAtLeastOnce.php | 2 +- .../MockObject/Matcher/InvokedCount.php | 2 +- .../MockObject/Matcher/InvokedRecorder.php | 2 +- .../MockObject/Matcher/MethodName.php | 2 +- .../MockObject/Matcher/Parameters.php | 2 +- .../Matcher/StatelessInvocation.php | 2 +- .../Framework/MockObject/MockObject.php | 2 +- .../PHPUnit/Framework/MockObject/Stub.php | 2 +- .../MockObject/Stub/ConsecutiveCalls.php | 2 +- .../Framework/MockObject/Stub/Exception.php | 2 +- .../MockObject/Stub/MatcherCollection.php | 2 +- .../Framework/MockObject/Stub/Return.php | 2 +- .../MockObject/Stub/ReturnArgument.php | 2 +- .../MockObject/Stub/ReturnCallback.php | 2 +- .../Framework/MockObject/Verifiable.php | 2 +- .../PHPUnit/Framework/SelfDescribing.php | 2 +- .../PHPUnit/PHPUnit/Framework/SkippedTest.php | 2 +- .../PHPUnit/Framework/SkippedTestError.php | 2 +- .../Framework/SkippedTestSuiteError.php | 2 +- .../PHPUnit/Framework/SyntheticError.php | 2 +- tests/PHPUnit/PHPUnit/Framework/Test.php | 2 +- tests/PHPUnit/PHPUnit/Framework/TestCase.php | 2 +- .../PHPUnit/PHPUnit/Framework/TestFailure.php | 2 +- .../PHPUnit/Framework/TestListener.php | 2 +- .../PHPUnit/PHPUnit/Framework/TestResult.php | 2 +- tests/PHPUnit/PHPUnit/Framework/TestSuite.php | 2 +- .../Framework/TestSuite/DataProvider.php | 2 +- tests/PHPUnit/PHPUnit/Framework/Warning.php | 2 +- .../PHPUnit/PHPUnit/Runner/BaseTestRunner.php | 2 +- .../Runner/IncludePathTestCollector.php | 2 +- .../Runner/StandardTestSuiteLoader.php | 2 +- .../PHPUnit/PHPUnit/Runner/TestCollector.php | 2 +- .../PHPUnit/Runner/TestSuiteLoader.php | 2 +- tests/PHPUnit/PHPUnit/Runner/Version.php | 6 +- tests/PHPUnit/PHPUnit/TextUI/Command.php | 2 +- .../PHPUnit/PHPUnit/TextUI/ResultPrinter.php | 2 +- tests/PHPUnit/PHPUnit/TextUI/TestRunner.php | 2 +- tests/PHPUnit/PHPUnit/Util/Class.php | 42 ++- tests/PHPUnit/PHPUnit/Util/Configuration.php | 2 +- .../PHPUnit/Util/DeprecatedFeature.php | 2 +- .../PHPUnit/Util/DeprecatedFeature/Logger.php | 2 +- tests/PHPUnit/PHPUnit/Util/Diff.php | 2 +- tests/PHPUnit/PHPUnit/Util/ErrorHandler.php | 2 +- tests/PHPUnit/PHPUnit/Util/File.php | 2 +- tests/PHPUnit/PHPUnit/Util/Fileloader.php | 2 +- tests/PHPUnit/PHPUnit/Util/Filesystem.php | 9 +- tests/PHPUnit/PHPUnit/Util/Filter.php | 2 +- tests/PHPUnit/PHPUnit/Util/Getopt.php | 2 +- tests/PHPUnit/PHPUnit/Util/GlobalState.php | 2 +- .../PHPUnit/Util/InvalidArgumentHelper.php | 2 +- tests/PHPUnit/PHPUnit/Util/Log/DBUS.php | 2 +- tests/PHPUnit/PHPUnit/Util/Log/JSON.php | 2 +- tests/PHPUnit/PHPUnit/Util/Log/JUnit.php | 2 +- tests/PHPUnit/PHPUnit/Util/Log/TAP.php | 2 +- tests/PHPUnit/PHPUnit/Util/Log/XHProf.php | 2 +- tests/PHPUnit/PHPUnit/Util/PHP.php | 2 +- tests/PHPUnit/PHPUnit/Util/PHP/Default.php | 2 +- tests/PHPUnit/PHPUnit/Util/PHP/Windows.php | 2 +- tests/PHPUnit/PHPUnit/Util/Printer.php | 2 +- tests/PHPUnit/PHPUnit/Util/Skeleton.php | 2 +- tests/PHPUnit/PHPUnit/Util/Skeleton/Class.php | 2 +- tests/PHPUnit/PHPUnit/Util/Skeleton/Test.php | 2 +- tests/PHPUnit/PHPUnit/Util/Test.php | 2 +- .../PHPUnit/Util/TestDox/NamePrettifier.php | 6 +- .../PHPUnit/Util/TestDox/ResultPrinter.php | 2 +- .../Util/TestDox/ResultPrinter/HTML.php | 2 +- .../Util/TestDox/ResultPrinter/Text.php | 2 +- .../PHPUnit/Util/TestSuiteIterator.php | 2 +- tests/PHPUnit/PHPUnit/Util/Type.php | 2 +- tests/PHPUnit/PHPUnit/Util/XML.php | 2 +- tests/SugarTestEmailUtilities.php | 4 +- tests/include/Popup/Bug44324Test.php | 83 ++++++ tests/include/SubPanel/Bug41738Test.php | 4 +- tests/include/SugarObjects/Bug32797Test.php | 104 +++++++ tests/modules/Documents/Bug43560Test.php | 12 +- tests/modules/DynamicFields/Bug34993Test.php | 173 ++++++++++++ tests/modules/Home/Bug43395Test.php | 65 +++++ .../Import/ImportFieldSanitizeTest.php | 8 +- tests/modules/Import/ImportMapTest.php | 4 +- tests/modules/Import/UsersLastImportTest.php | 10 +- .../ModuleBuilder/views/Bug44372Test.php | 58 ++++ tests/modules/SavedSearch/Bug44908Test.php | 65 +++++ tests/modules/UpgradeWizard/Bug44414Test.php | 99 +++++++ .../UpgradeWizard/SugarMerge/Bug44472Test.php | 126 +++++++++ .../modules/Cases/metadata/editviewdefs.php | 184 +++++++++++++ .../modules/Cases/metadata/editviewdefs.php | 100 +++++++ tests/modules/UpgradeWizard/UWUtilsTest.php | 5 + tests/service/RESTAPI4Test.php | 4 +- themes/default/css/print.css | 3 + themes/default/images/plug-in_Lotus.png | Bin 0 -> 3522 bytes 302 files changed, 3590 insertions(+), 867 deletions(-) create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/InsideView.en_us.tpl create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/images/close.png create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview.png create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_collapsed.png create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_expanded.png create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/images/video.png create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/insideview.php create mode 100644 modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php create mode 100644 modules/EmailMan/EmailImage.php create mode 100755 tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php.in create mode 100755 tests/include/Popup/Bug44324Test.php create mode 100755 tests/include/SugarObjects/Bug32797Test.php create mode 100755 tests/modules/DynamicFields/Bug34993Test.php create mode 100755 tests/modules/Home/Bug43395Test.php create mode 100755 tests/modules/ModuleBuilder/views/Bug44372Test.php create mode 100755 tests/modules/SavedSearch/Bug44908Test.php create mode 100755 tests/modules/UpgradeWizard/Bug44414Test.php create mode 100755 tests/modules/UpgradeWizard/SugarMerge/Bug44472Test.php create mode 100755 tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/custom/modules/Cases/metadata/editviewdefs.php create mode 100755 tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/oob/modules/Cases/metadata/editviewdefs.php create mode 100644 themes/default/images/plug-in_Lotus.png diff --git a/data/SugarBean.php b/data/SugarBean.php index dec274ca..3622d45d 100644 --- a/data/SugarBean.php +++ b/data/SugarBean.php @@ -5023,7 +5023,9 @@ function save_relationship_changes($is_update, $exclude=array()) 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; + if($current_user->isAdminForModule($this->getACLCategory())) { + return true; + } $not_set = false; if($is_owner == 'not_set') { diff --git a/files.md5 b/files.md5 index 8fc5e636..bba37b51 100644 --- a/files.md5 +++ b/files.md5 @@ -1,13 +1,13 @@ 'd3f150e4a5bed444763ebe8a81742a95', './.htaccess' => 'd41d8cd98f00b204e9800998ecf8427e', './config.php' => 'd41d8cd98f00b204e9800998ecf8427e', - './vcal_server.php' => 'c472160ffe5a5ef1e7059e936376c096', './vCard.php' => '32f72a62ace4e8d01456a7792ac554c3', './themes/default/js/style.js' => 'bba8e2c3565583b6d038349560659797', './themes/default/images/start_meeting_inline.png' => '64eff1bab8d34659c583ca84ce36dd2a', + './themes/default/images/plug-in_Lotus.png' => '8ba415f9e8ea352c76ed7deddbc1a653', './themes/default/images/join_meeting_inline.png' => 'edf7837b58451bbfb4e9e827d9a13a22', './themes/default/images/join_imeeting.gif' => 'efd4a8747417083048b1a256d1d715cd', './themes/default/images/create-record.gif' => '26aa1d757ecdaa1f886cd2bfb24eddd5', @@ -585,7 +585,7 @@ $md5_string = array ( './themes/default/images/Accounts.gif' => 'e081de07d0263b270d0d306642375901', './themes/default/css/wizard.css' => '4f828507b4421149a80bfc89ed818753', './themes/default/css/style.css' => 'd41d8cd98f00b204e9800998ecf8427e', - './themes/default/css/print.css' => '80e315af8867df5d57aeaa80d99ae432', + './themes/default/css/print.css' => '166d6dff04138c56325ff31e7eeecab0', './themes/default/css/deprecated.css' => '872d2ee2f45eb595825646cb39a82fab', './themes/default/css/chart.css' => '493edb0e181f685fd595c483d09012fb', './themes/Sugar5/tpls/header.tpl' => '26699f278acc189db3a348b939a97d24', @@ -1169,14 +1169,14 @@ $md5_string = array ( './themes/Sugar5/css/print.css' => '041ba7c460d78a693301c7061139af89', './themes/Sugar5/css/deprecated.css' => '872d2ee2f45eb595825646cb39a82fab', './themes/Sugar5/css/chart.css' => '493edb0e181f685fd595c483d09012fb', - './sugar_version.php' => '7e96a66839daf152cea83bca3a95551c', + './sugar_version.php' => 'e0f4077bbaa29cf439bd27bc79fd7c4c', './soap/SoapTypes.php' => 'f38a0ac79874c8a3e126d728bd05e00a', - './soap/SoapSugarUsers.php' => '9ec57f75884c6a1091c3db0f80e930ec', + './soap/SoapSugarUsers.php' => 'aec5ba181325721fa9e6da7e6a787687', './soap/SoapStudio.php' => '2f424bab502055acae4131df64465e0c', './soap/SoapRelationshipHelper.php' => '4d84e017ea0ebe080809c9099ab5ec30', './soap/SoapPortalUsers.php' => 'e333fe9ad228db47711d1f506b69f079', './soap/SoapPortalHelper.php' => '75ee76c6f6663e49b5c9a029412f7bed', - './soap/SoapHelperFunctions.php' => 'daafd6d172a4f92c495fade94a07c86e', + './soap/SoapHelperFunctions.php' => 'ecd540f7321209bf5ef7615fdf3277e5', './soap/SoapErrorDefinitions.php' => '33fda5814773de4025739ab9024f063a', './soap/SoapError.php' => 'b2759317cb609e41ffca9da3274b8142', './soap/SoapDeprecated.php' => '70d81bfc3a075073bf8a409d08e86f62', @@ -1224,6 +1224,7 @@ $md5_string = array ( './service/core/REST/SugarRest.php' => '7d4f007d66668ca9377fce1f34f94d27', './service/core/PHP5Soap.php' => '598eeeefcc5ed1276020bfe6fa7c4451', './service/core/NusoapSoap.php' => 'e533d700071eafffd2ebfd1e28b2b735', + './vcal_server.php' => 'c472160ffe5a5ef1e7059e936376c096', './robots.txt' => 'f71d20196d4caf35b6a670db8c70b03d', './removeme.php' => '750092ac2fec3ba2f04f0bff27bec33d', './pdf.php' => 'cc6788d5e02f50b1812ddb2ff3eb3703', @@ -1268,10 +1269,10 @@ $md5_string = array ( './modules/Users/User.js' => '241f1d3d0135f7ca698b062e0f13c2b8', './modules/Users/login.js' => 'ea80d72447ec3975a9e6d291d4a812cc', './modules/Users/views/view.wizard.php' => '835338a6bbf0fd03bd9827492cf19337', - './modules/Users/views/view.list.php' => 'b43005b6a3b1a53497cd92f40bcbe471', + './modules/Users/views/view.list.php' => '8bc5a879644c94372a52d240cb7ecb03', './modules/Users/vardefs.php' => 'fb892f832936653d5321bedcfb653507', './modules/Users/tpls/wizard.tpl' => 'd6c63ab8f30ad8c28b8b0ddbb0777803', - './modules/Users/reassignUserRecords.php' => 'ce1088a7951ad811a4ff5e4a16b50746', + './modules/Users/reassignUserRecords.php' => 'cd6548bd2a6d23217f065a4223071983', './modules/Users/password_utils.php' => '614d9ea87a83d7c210bbfe585908b870', './modules/Users/metadata/subpanels/default.php' => '8ccd5a2436c48f152588bd59e6c6bcb0', './modules/Users/metadata/subpanels/ForTeams.php' => '96a782f23790b32bfd101f7f5f86cb2a', @@ -1280,7 +1281,7 @@ $md5_string = array ( './modules/Users/metadata/subpanels/ForMeetings.php' => '8b16caaf5651904ee91c1b2d9dae19c6', './modules/Users/metadata/subpanels/ForEmails.php' => 'a077f9541d08415783d47899544574ce', './modules/Users/metadata/subpanels/ForCalls.php' => '624f240be051035ffdb0880a2d03c2a4', - './modules/Users/metadata/subpaneldefs.php' => '709186b6fdbadda9cababed057b7ef5d', + './modules/Users/metadata/subpaneldefs.php' => 'bc2749768f23c8680586862a4eb63aed', './modules/Users/metadata/searchdefs.php' => '6f1c14eecf7c3775bcd95ed5a1a110fa', './modules/Users/metadata/reassignScriptMetadata.php' => 'c3b8c884116a57082ac615416176b294', './modules/Users/metadata/popupdefs.php' => '0372e0370745358af86d41aef6451901', @@ -1290,18 +1291,18 @@ $md5_string = array ( './modules/Users/login.css' => '12d8483e8f6da8e1a95d54b1b50d0ec9', './modules/Users/language/en_us.lang.php' => '22a5e8386ce20959eb167d62aea2c2e0', './modules/Users/field_arrays.php' => '3c31038add3a77287e815bc5a7a7a609', - './modules/Users/controller.php' => '147401614d01bd9f2e408a52c59cee9e', + './modules/Users/controller.php' => '80b928a09b15d4c9df8904317880974f', './modules/Users/authentication/SugarAuthenticate/SugarAuthenticateUser.php' => '406f625eb707435e7710880c7aec779e', './modules/Users/authentication/SugarAuthenticate/SugarAuthenticate.php' => '5b0f31fa450a1be1a031902b60e0641d', - './modules/Users/authentication/SAMLAuthenticate/settings.php' => '871bd3ac7732d6172a0320d52b938420', - './modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php' => '05070f789165351c2946c679611fe44a', + './modules/Users/authentication/SAMLAuthenticate/settings.php' => '59100a0b5557c457b5b317014090086b', + './modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php' => '76623791faf895bcbbd016d9945e8c48', './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/lib/onelogin/saml/xmlsec.php' => '0804d079f7dd5b88a810d3b2f13b54a1', + './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php' => 'bf420ca408bb2c25ee04d6d24651306c', + './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php' => 'fe50684dde6449668ec090969855ed59', + './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php' => 'd7a4ffc11bed1fc0d0879199b4f43051', + './modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php' => '881ac527f24c2cd34b2565dcca59834a', + './modules/Users/authentication/SAMLAuthenticate/index.php' => 'ef9efccd250f104fc518337da1df0ac3', './modules/Users/authentication/SAMLAuthenticate/SAMLAuthenticateUser.php' => '1018414a0257107a46213d6b918e3e06', './modules/Users/authentication/SAMLAuthenticate/SAMLAuthenticate.php' => 'e00db2472c9854080c4e2cd3cca7d226', './modules/Users/authentication/LDAPAuthenticate/LDAPConfigs/default.php' => 'e5c699efd1987e53c13b82f30bc1a13e', @@ -1312,18 +1313,18 @@ $md5_string = array ( './modules/Users/authentication/AuthenticationController.php' => 'aaf8b1b02587242110c14e247fda5c1e', './modules/Users/UserSignatureEditView.html' => '892d745adb145d74bde512c71e30732c', './modules/Users/UserSignature.php' => '23592719467cc4e04be189c6fa2d30db', - './modules/Users/User.php' => 'bc338ef49103d7c67b66bbc3a0f80d54', + './modules/Users/User.php' => '2ea74cca9333c2d56c500ff768a71077', './modules/Users/SetTimezone.tpl' => 'f76851063b5129bcae41e7bef962636f', './modules/Users/SetTimezone.php' => '2fc96607e206886451fb5fe55f5526fd', './modules/Users/SaveTimezone.php' => 'c12559f852fb8d89a269814e808dadc5', './modules/Users/SaveSignature.php' => '2f8bfdb6f88dce867100a761366d0391', - './modules/Users/Save.php' => '05457e848e9ab2d56b2625e4ea785842', + './modules/Users/Save.php' => '0bce18dac108a3aa3518f5fcae8b9d0a', './modules/Users/Popup_picker.html' => '9726cf3ff17bd5765191666f6460dfa1', './modules/Users/Popup_Users_picker.html' => '67411ba406dc06c63dc1b9eca6e55eca', './modules/Users/PopupUsers.php' => '5da32a565d9639eb42ab47e2d3330c08', './modules/Users/PopupSignature.php' => 'd9c4749eea3254af4bbef1d83736309c', './modules/Users/PasswordRequirementBox.css' => '57efa45544952eead6155719254e03c1', - './modules/Users/Menu.php' => '4fbadfe11372f974fe015dcd7cd457df', + './modules/Users/Menu.php' => '6e9d3948eb98bae4194a0a6544834165', './modules/Users/Logout.php' => '5c819754b90e62e2f1739971144b01a6', './modules/Users/Login.php' => '18a89cfecf8e050a14f2586b05081548', './modules/Users/ListRoles.php' => '9833b76bd6bd4889285b4b4a6b933849', @@ -1331,9 +1332,9 @@ $md5_string = array ( './modules/Users/Forms.php' => '90b591c94157299485166b686f6a977d', './modules/Users/Error.php' => '62f9d5788e4663b84e030c4eaba3e8b3', './modules/Users/EditView.tpl' => '3f17c8379f1dedbd64b32e481cd56b9f', - './modules/Users/EditView.php' => '8b312e26c12b250d280b2fbc51640bab', + './modules/Users/EditView.php' => 'fc3a145f61c7b4c7dfcc3338672a2ae8', './modules/Users/DetailView.tpl' => '8606bcec7d757a75345aff8f8bf86a0a', - './modules/Users/DetailView.php' => '63dbf91d90bb3cb5b40bfb4002f46e3d', + './modules/Users/DetailView.php' => '3f8ee5e2c1c4f99e8e7ee01141f95cf5', './modules/Users/Changenewpassword.tpl' => '65a02130fbb6caabd2b662ca70bae9fd', './modules/Users/Changenewpassword.php' => '80cd1b05144aecdc382d9e50ec7efb1a', './modules/Users/ChangePassword.php' => 'e4161c571295ad4635ff66ff5e4cfc7b', @@ -1345,7 +1346,7 @@ $md5_string = array ( './modules/UserPreferences/controller.php' => '6022bf66d58876257bf96523b5c01953', './modules/UserPreferences/UserPreference.php' => '28ada4d1638677de694ec517fde20791', './modules/UpgradeWizard/upgradeWizard.js' => 'e2a4a2d4eec48a78c4c497e95d3b391b', - './modules/UpgradeWizard/uw_utils.php' => '4f3f9614e27e5416fa4cdc38ca425218', + './modules/UpgradeWizard/uw_utils.php' => 'c5ab7f8e6169c1f1d7a515a51932c8fa', './modules/UpgradeWizard/uw_main.tpl' => '898039c49451aefbef0bfdece6c43f3b', './modules/UpgradeWizard/uw_files.php' => '0b16b9d7181ac363d19aa43b8c50090b', './modules/UpgradeWizard/uw_emptyFunctions.php' => 'fc09ce5db1b1aacd792140ceadc9ccd2', @@ -1357,22 +1358,22 @@ $md5_string = array ( './modules/UpgradeWizard/systemCheckJson.php' => 'ff48d6c123ea4c15c6887b2fdd765be0', './modules/UpgradeWizard/systemCheck.php' => '8f3109befa71e411d4bf898bd684ddb9', './modules/UpgradeWizard/start.php' => '339714f45395246c6f2ed68dc6b3e9b8', - './modules/UpgradeWizard/silentUpgrade_step2.php' => 'a2953de599513c6804080408d4cd7266', - './modules/UpgradeWizard/silentUpgrade_step1.php' => '99e3088421c64c862d9b8b2b64c2a0cb', - './modules/UpgradeWizard/silentUpgrade_dce_step2.php' => '88d892134b9e6617c48ef91fdc9ea9e2', - './modules/UpgradeWizard/silentUpgrade_dce_step1.php' => 'ed4d1e69ff57f47e5646aeff91ef1dae', - './modules/UpgradeWizard/silentUpgrade.php' => '844751e09ff84620a7cfd82ae9b347ac', + './modules/UpgradeWizard/silentUpgrade_step2.php' => 'f1e4729f64aeb66fab829fe589400ece', + './modules/UpgradeWizard/silentUpgrade_step1.php' => '35ba042c4ac10a44b91f3e6a994f4bfe', + './modules/UpgradeWizard/silentUpgrade_dce_step2.php' => '40060f08c625546f424f15c82c884f1b', + './modules/UpgradeWizard/silentUpgrade_dce_step1.php' => '25784884d8a4b7babca2c8844f03e960', + './modules/UpgradeWizard/silentUpgrade.php' => 'a41bbf9eeead4b0cd6fe3ea9a219cc9e', './modules/UpgradeWizard/processing.gif' => 'd7c43fc19181ee59862601bfce100b41', './modules/UpgradeWizard/preflightJson.php' => '9d6c984b429ec12cd2ba47a34d899e35', - './modules/UpgradeWizard/preflight.php' => 'd27bb989840a31ce093e11b8a1d49d7a', + './modules/UpgradeWizard/preflight.php' => '3384b1b92620d67468618d29e61532e8', './modules/UpgradeWizard/populateColumns.php' => '7c58ba862c5391857d059e75051b5cec', './modules/UpgradeWizard/layouts.php' => '8b414946612a3ac003e246c5356d1e44', './modules/UpgradeWizard/language/en_us.lang.php' => 'e7d9e12a3a829548a3c1ed260bb14624', './modules/UpgradeWizard/index.php' => '0732f50b02de0f8f9cb0cf0893c4bf5a', - './modules/UpgradeWizard/end.php' => '820bc4d5b2457cec61da7afd8d72ef74', + './modules/UpgradeWizard/end.php' => '7650857e626b6fba0afd8114b5c46b2c', './modules/UpgradeWizard/deleteCache.php' => '2243700008a8b513b69f009e8c6dbcf8', './modules/UpgradeWizard/commitJson.php' => '3ac93b7343984a726d004499c53b315b', - './modules/UpgradeWizard/commit.php' => 'd89aa3460a04eb2bdafe98f5dd2c3400', + './modules/UpgradeWizard/commit.php' => 'b12af2d5c23fdf23379af2032a37a065', './modules/UpgradeWizard/cancel.php' => 'e0b5196ee60b18d6a2876b96f16eda74', './modules/UpgradeWizard/UploadFileCheck.php' => 'd4a88e3b6923cf3365fedbf501116dd6', './modules/UpgradeWizard/SugarMerge/SugarMerge.php' => 'ed5f03dd65e4a51843e22a9f79e3b930', @@ -1380,12 +1381,12 @@ $md5_string = array ( './modules/UpgradeWizard/SugarMerge/SearchMerge.php' => 'b099bdd2790206068e8995ef773f3965', './modules/UpgradeWizard/SugarMerge/QuickCreateMerge.php' => 'af1531fec4a61fb3834a3d4090319aa4', './modules/UpgradeWizard/SugarMerge/ListViewMerge.php' => 'a1f8b9f7837affdcda70f2224403ac99', - './modules/UpgradeWizard/SugarMerge/EditViewMerge.php' => 'b74bf89a9a347e95da5158855b54dab3', + './modules/UpgradeWizard/SugarMerge/EditViewMerge.php' => '89b4a1de7c270736d3f3405a9dd6db94', './modules/UpgradeWizard/SugarMerge/DetailViewMerge.php' => 'b9b16672b6e7f22e6e1899187409d65b', './modules/UpgradeWizard/SILENTUPGRADE.txt' => 'b47a5fe95eb81ed4b97d238283adc60d', './modules/UpgradeWizard/Menu.php' => '7b9b594383354f8d4900954d04536b18', './modules/Trackers/vardefs.php' => '0d727a4b31a2f34e133f9b6e32ea6a74', - './modules/Trackers/store/TrackerSessionsDatabaseStore.php' => 'bbe9568bcdc168a4a1e27bfe30330ff9', + './modules/Trackers/store/TrackerSessionsDatabaseStore.php' => '25ea950fa31c88f5af4c119b0d229c54', './modules/Trackers/store/TrackerQueriesDatabaseStore.php' => 'bdf296977265dcdaab4c2e2cc77828ef', './modules/Trackers/store/SugarLogStore.php' => 'a3feecc0fb2a31e58896971fceabe67c', './modules/Trackers/store/Store.php' => 'def825fa5e38cc20539adf0651b30d16', @@ -1513,7 +1514,7 @@ $md5_string = array ( './modules/SavedSearch/SearchForm.html' => 'b459847986a5a78033744d2ac2fd83b8', './modules/SavedSearch/SavedSearchSelects.tpl' => 'c39f005f3f1456d0c403e7b1b5c29aec', './modules/SavedSearch/SavedSearchForm.tpl' => 'e1b30f7f970a53e8fbdf59c56594992a', - './modules/SavedSearch/SavedSearch.php' => 'd176b45952dbff3eecdc79f716636429', + './modules/SavedSearch/SavedSearch.php' => '3c9f173dd0744e0b74115bb547f62dca', './modules/SavedSearch/Menu.php' => 'dc4c7a6e251fafed9e02fdedeadb6de1', './modules/SavedSearch/ListView.php' => '2a0fb2b9472a48ec7562f72d423ae925', './modules/Roles/views/view.list.php' => '1fa66e2cc62b833309892227d4cd64bb', @@ -1575,7 +1576,7 @@ $md5_string = array ( './modules/Prospects/field_arrays.php' => '11752a64ced2fe06cca0b7da2bd5e42b', './modules/Prospects/Save.php' => '94ea92c9bdbc15f131ea76deb1f5c05d', './modules/Prospects/ProspectFormBase.php' => '72b52d25d6cec57f62aeb5b22a2f1d11', - './modules/Prospects/Prospect.php' => '4f9ae27c334b6aadf964412260d822dd', + './modules/Prospects/Prospect.php' => '82e124f5609d2e95675b5e7abcbd3d93', './modules/Prospects/Popup_picker.html' => '0595f82f557502878ce1de67bef83a43', './modules/Prospects/Menu.php' => '954ee473c71bac08d294415f04816411', './modules/Prospects/Import.php' => '41811673320c34629e81991794d41215', @@ -1742,7 +1743,7 @@ $md5_string = array ( './modules/Notes/Menu.php' => '9048d5be4a279901fb6e7b6120b58af9', './modules/MySettings/language/en_us.lang.php' => '562f4a6065b8ae50ee724823f5738043', './modules/MySettings/TabController.php' => 'addcc612e2526020690c888df738dd5d', - './modules/MySettings/StoreQuery.php' => 'fd6c9363fa044c74c42a3f7e5927cb81', + './modules/MySettings/StoreQuery.php' => '705d71936244a25ea8343d71883fda0b', './modules/MySettings/LoadTabSubpanels.php' => '39a5244484198d37e9bd593d45344706', './modules/ModuleBuilder/views/view.wizard.php' => 'daf80d56024091c60f7e444d44f27b00', './modules/ModuleBuilder/views/view.tree.php' => 'b10035efb0b45ec6f31bf45a50374c3d', @@ -1754,9 +1755,9 @@ $md5_string = array ( './modules/ModuleBuilder/views/view.popupview.php' => '3acdfeeaa6ec776168cea15cb46425a2', './modules/ModuleBuilder/views/view.package.php' => 'a9379092526c7f53b95290712153d32e', './modules/ModuleBuilder/views/view.modulelabels.php' => '946ac2cafcfcac5d20265ffab8f0805a', - './modules/ModuleBuilder/views/view.modulefields.php' => 'c668c2f284efd6ed73011be9b8770b1b', + './modules/ModuleBuilder/views/view.modulefields.php' => '13771ba7d654c9e7ad9c38e85235a562', './modules/ModuleBuilder/views/view.modulefield.php' => '6849d83c2f8a07a30c6bc2f6a79aefcf', - './modules/ModuleBuilder/views/view.module.php' => '5cb5a568183ae3d91f09a0590b78798b', + './modules/ModuleBuilder/views/view.module.php' => 'e87f77f4bb936006ad94103cd0f1c453', './modules/ModuleBuilder/views/view.main.php' => '88123a5ca806fadac53f609b09959e25', './modules/ModuleBuilder/views/view.listview.php' => 'dc91490cc2381300c65ec6cc6f45e2b6', './modules/ModuleBuilder/views/view.layoutview.php' => '8924b7ed186d75872c6cf061bc5e2fe1', @@ -1855,12 +1856,12 @@ $md5_string = array ( './modules/ModuleBuilder/javascript/SimpleList.js' => 'd9d7ce9e36b6c72800a0e35bd2b65c2d', './modules/ModuleBuilder/javascript/ModuleBuilder.js' => '2edabc112129c6a57b8f2a550ab847c5', './modules/ModuleBuilder/javascript/JSTransaction.js' => '2f20a4a72eaa8cbdf3053e24c5772ee5', - './modules/ModuleBuilder/controller.php' => '54078e5cfee491cc3b2e0e6b31f7a9ce', + './modules/ModuleBuilder/controller.php' => '515759fb7c30a70b5f1250ba1eea4e1b', './modules/ModuleBuilder/action_view_map.php' => 'fd1e0b87f5d325f06b2b743afa057999', './modules/ModuleBuilder/Module/StudioTree.php' => 'e29fed9b1f81766bda975d938eecd3ec', './modules/ModuleBuilder/Module/StudioModuleFactory.php' => '5860a0e60d39a69303a39df4ea188336', './modules/ModuleBuilder/Module/StudioModule.php' => '2874e799f025ab3afcc40c5a0f15ea69', - './modules/ModuleBuilder/Module/StudioBrowser.php' => 'ed7b9fc9c4750c6574335a3c4ee462af', + './modules/ModuleBuilder/Module/StudioBrowser.php' => 'a12897d3293acd37f50cff6663e1ca47', './modules/ModuleBuilder/Module/MainTree.php' => '43824a340ebbce175fac3b60b7641efb', './modules/ModuleBuilder/Module/DropDownTree.php' => 'ab1f94e57c7ec0f1f2b0a37fa158eab5', './modules/ModuleBuilder/Module/DropDownBrowser.php' => '7cd759094f2018b86eb030b2f6286516', @@ -1999,7 +2000,7 @@ $md5_string = array ( './modules/LabelEditor/EditView.html' => '5c869e234bee20cc12984742cdea69c3', './modules/InboundEmail/InboundEmail.js' => 'd24d7238fd7f1c7f2f41b25480d09f2e', './modules/InboundEmail/vardefs.php' => 'f7aa1b4be9efb3918e9565b85f8ee55c', - './modules/InboundEmail/language/en_us.lang.php' => 'dd04eefc166e76e1723200fe6b8ea959', + './modules/InboundEmail/language/en_us.lang.php' => '39b2d83673f787eb77be842dd8d972b4', './modules/InboundEmail/index.php' => '1aa418a33d81f3df849d7d7234438c2a', './modules/InboundEmail/field_arrays.php' => '7ef33a5b89e97313772104505043fff0', './modules/InboundEmail/View.html' => '42dfabb40c585bf030af5885704ba056', @@ -2012,16 +2013,17 @@ $md5_string = array ( './modules/InboundEmail/ListView.html' => '7e5d8d426d0a6833fe5caa3fb3ccc471', './modules/InboundEmail/InboundEmailTest.php' => '702038f3171c1bb612d4fff7cf0f765e', './modules/InboundEmail/InboundEmail.php' => '963ae74afe37e2eed60fc957de7d5a1a', - './modules/InboundEmail/EditView.php' => '39494fbc1ed66123f89480c8f766238c', - './modules/InboundEmail/EditView.html' => 'c07edc17593ceec76bc4521cc98f4e13', + './modules/InboundEmail/EditView.php' => 'aef594532aa6ab776c4b3cc30b20a04d', + './modules/InboundEmail/EditView.html' => '7252f37c5372a5dd9989c212728cca98', './modules/InboundEmail/EditGroupFolder.php' => '6c6ba0d835901e8e9a8e87056d0479b6', './modules/InboundEmail/DetailView.php' => 'f838087f2c73b83a2deee755475be859', './modules/InboundEmail/DetailView.html' => '065eb0891ad5444b24a6b9d38740b8eb', './modules/InboundEmail/Delete.php' => '682ed772ec388482dbe7a599e9e56104', + './modules/Import/ImportMapTab.php' => 'd179a9e67a3bbc6e8b408efd2e37252a', './modules/Import/views/view.undo.php' => 'f3eed66ae73427bab843bc3c4d429db0', - './modules/Import/views/view.step4.php' => 'e616048ba95212623d985251ce8e4650', + './modules/Import/views/view.step4.php' => 'a5f6fd30495e02bfdbd000c2abfe5062', './modules/Import/views/view.step3.php' => '37847270b3445e2254096b3e4c9385fb', - './modules/Import/views/view.step2.php' => '731505745703aba5be0d0b03821d4cbd', + './modules/Import/views/view.step2.php' => '1836dd43ff036bf2396110df4a50eac2', './modules/Import/views/view.step1.php' => '997520f56e4ce49a625771a5d9a40ba2', './modules/Import/views/view.last.php' => 'a1c30d3cf0c21343cc03c856a8d2911a', './modules/Import/views/view.error.php' => '4a9ef123c90511298bac72b55405f2f1', @@ -2033,16 +2035,15 @@ $md5_string = array ( './modules/Import/tpls/last.tpl' => '84bb779c391262ad2fbb41a38e50cbd6', './modules/Import/tpls/error.tpl' => '8bfbddd3c2424d4a1b3670bd79c88e16', './modules/Import/language/en_us.lang.php' => '2e3bb401c11dc3f8cdc5a571c1f17ec1', - './modules/Import/controller.php' => 'ce46636408b245c321012387da2a1882', - './modules/Import/UsersLastImport.php' => '2dae79ebe11ad6e559407bc79e47b8a2', - './modules/Import/Menu.php' => '923e16d2066f8577f847d2db148cd7ab', - './modules/Import/ImportMapTab.php' => 'd179a9e67a3bbc6e8b408efd2e37252a', './modules/Import/ImportMapSalesforce.php' => 'd87705fc0ed0797d73ee77c9d1d985cf', + './modules/Import/Menu.php' => '923e16d2066f8577f847d2db148cd7ab', './modules/Import/ImportMapOutlook.php' => 'e6887afa92b5d94670fb926edef4c052', './modules/Import/ImportMapOther.php' => 'bd5d670a97dc6fe345b4b13b276850e2', './modules/Import/ImportMapCsv.php' => 'b20f78374b2b5eb218a822627663502a', './modules/Import/ImportMapAct.php' => 'bef724cdef346231a6063ae4b4578f83', './modules/Import/ImportMap.php' => '18681e9eb3f1b34ce7b2ec9b6af1f89e', + './modules/Import/controller.php' => 'ce46636408b245c321012387da2a1882', + './modules/Import/UsersLastImport.php' => '2dae79ebe11ad6e559407bc79e47b8a2', './modules/Import/ImportFileSplitter.php' => 'f64c6d4e292c45f4d806da5d2300d14f', './modules/Import/ImportFile.php' => '0cff4a5dbe28838cccdc68d1ef5a0920', './modules/Import/ImportFieldSanitize.php' => 'da057b84f590f3cca5a82118f6b936d7', @@ -2056,7 +2057,7 @@ $md5_string = array ( './modules/Home/views/view.list.php' => 'b1213448edbef90a40061dbdfb6e432c', './modules/Home/sitemap.tpl' => 'a0145732b2b2154506eae54e3b66b851', './modules/Home/sitemap.php' => '85d1da921c719667f1e1be77993101d6', - './modules/Home/quicksearchQuery.php' => 'ac06becb08d8dc6bdd3354c91f9717fc', + './modules/Home/quicksearchQuery.php' => 'f6ecc927b4122a53ac3a4bcf12c033ee', './modules/Home/language/en_us.lang.php' => '22af00cddc27f7519807f2222d9d8232', './modules/Home/dashlets.php' => 'a88f1d512af748e1a4aa34bfdb34f883', './modules/Home/UnifiedSearchAdvancedResults.tpl' => '65b6695a4b79dff0c7564665ac45355f', @@ -2130,9 +2131,9 @@ $md5_string = array ( './modules/Groups/DetailView.html' => '0c0c957f384c3a1f30f52922afd517bd', './modules/Groups/Delete.php' => '62a025db67afb0688f26ac1dd2e6b855', './modules/Employees/EmployeeStatus.php' => 'e15246545f162fbb5ea4126eae907d7f', - './modules/Employees/views/view.list.php' => '0210785381987f093302c6a67319dc07', + './modules/Employees/views/view.list.php' => 'bdd83c70f40f420ab30a782cbcc627c3', './modules/Employees/views/view.edit.php' => 'a5838c257968be170c2bf2e26990adde', - './modules/Employees/views/view.detail.php' => 'c0d92fe69d7afb125c46b96a7d26a310', + './modules/Employees/views/view.detail.php' => 'b24de9fc3e8af418f83e058cec016959', './modules/Employees/vardefs.php' => 'fbc0faa3310c46fda6e9022793b4173d', './modules/Employees/metadata/searchdefs.php' => 'b88ed48339d529934d31e521577a3995', './modules/Employees/metadata/listviewdefs.php' => 'ebe83948298f79b75a68b6c39b013ff6', @@ -2141,7 +2142,7 @@ $md5_string = array ( './modules/Employees/metadata/SearchFields.php' => '69ebebc849e2452547d2266fed1a0fa3', './modules/Employees/language/en_us.lang.php' => '1f17b3edd6306243cf5aff4a87d91058', './modules/Employees/field_arrays.php' => '33d547bb2ed38acc854cf06668f0c1f6', - './modules/Employees/controller.php' => '4a078d0495226c3fb27c1952de12ddb6', + './modules/Employees/controller.php' => '8320ea0e849226757cb3cd949788e3a1', './modules/Employees/WapMenu.php' => '6ef9a223b1a105fa943802999a172ecb', './modules/Employees/WapAuthenticate.php' => '08d96a367d015300294ea70bd459b6a3', './modules/Employees/Popup_picker.php' => '8997f25d9d63236bb09e2fa58dcbca4e', @@ -2250,7 +2251,7 @@ $md5_string = array ( './modules/Emails/GenerateQuickComposeFrame.php' => '9fa2162d2750f8dbc20a705909c353b3', './modules/Emails/EmailUIAjax.php' => '430e12675d05a6bb49a4111378dad759', './modules/Emails/EmailUI.php' => '4a84724f5f101fcd4e9f2e5a4ba360e5', - './modules/Emails/EmailUI.css' => '671856ced58b300fa264fe6ddee958fb', + './modules/Emails/EmailUI.css' => '6f93388627148bdc54c9458c434d7ec1', './modules/Emails/Email.php' => 'f5d67b0049592d97428c75cc6f9d6ecd', './modules/Emails/EditViewArchive.html' => '9e4738577440967b28e60bb2d35b625a', './modules/Emails/EditView.php' => 'bbf3c6d659a6cb696cabe233db2bd313', @@ -2302,6 +2303,7 @@ $md5_string = array ( './modules/EmailMarketing/DetailView.php' => '34354f70fb63917246723f3ca728eeb4', './modules/EmailMarketing/DetailView.html' => 'fa059c2dc675788d4afb9b7b1e61dbfa', './modules/EmailMarketing/Delete.php' => 'c086cb4ea3c7c61a9feb8e9ff7037aab', + './modules/EmailMan/EmailImage.php' => 'a31ccf962c840f3c613fac8cd397cf86', './modules/EmailMan/views/view.list.php' => 'd5de096088dccaf7dae5527489ab5825', './modules/EmailMan/views/view.config.php' => '57b38635350c47bd0fe995348d940c9b', './modules/EmailMan/views/view.campaignconfig.php' => '929db4bba124ff947bc67ee3599341c6', @@ -2396,7 +2398,7 @@ $md5_string = array ( './modules/DynamicFields/FieldsMetaData.php' => '31881094e9dfef9a0579622e0768d69f', './modules/DynamicFields/FieldViewer.php' => '53f662eab9401fd5a0b9f90c035fb13a', './modules/DynamicFields/FieldCases.php' => '7e9c75d4fcefca29f24033a0e8687f3c', - './modules/DynamicFields/DynamicField.php' => 'cf3ccf07934f613364c6dc8bf1ade3a5', + './modules/DynamicFields/DynamicField.php' => 'bfda5665bdc3c864673509536b548611', './modules/Documents/documents.js' => 'bd75e795c1821436c484e01ac09a95d1', './modules/Documents/tpls/view.extdoc.tpl' => '5566d78f1a66a4a38d1d3dc93ece9c01', './modules/Documents/action_view_map.php' => '0994fe5e38b73c985fff200f9edb2129', @@ -2408,7 +2410,7 @@ $md5_string = array ( './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.meta.php' => '0fd71adbdb97e05acfa9e37f517fd47b', './modules/Documents/Dashlets/MyDocumentsDashlet/MyDocumentsDashlet.data.php' => '3842f658a0da2ca0f18564e6f7683bcd', './modules/Documents/vardefs.php' => '33fa2c9c8bd1f96fff4374b2142bf671', - './modules/Documents/metadata/subpanels/default.php' => '5b6be1a74979453da3aca0fdc1a8b713', + './modules/Documents/metadata/subpanels/default.php' => '094a811736e4674863bd5c832dd5730d', './modules/Documents/metadata/subpanels/ForContractType.php' => '1aa63508fbea18bbf6ccfaad4bb4737a', './modules/Documents/metadata/subpaneldefs.php' => '70dd233ce8f24edeb4b54a39185d5562', './modules/Documents/metadata/studio.php' => '1f3e1f9c3a457e502635fd5a1d53861d', @@ -2481,7 +2483,7 @@ $md5_string = array ( './modules/Contacts/metadata/metafiles.php' => 'fc6c9afb233d2b11c5594c9cd90308a1', './modules/Contacts/metadata/listviewdefs.php' => 'ff21ec25012045a06895707c9b7ed97a', './modules/Contacts/metadata/editviewdefs.php' => 'e28d1eb0d5b947573ecef501dae48892', - './modules/Contacts/metadata/detailviewdefs.php' => '373fecbb32ab8f99c6886832629bf925', + './modules/Contacts/metadata/detailviewdefs.php' => 'f485ac2da169d06a8a407b6ad22f3354', './modules/Contacts/metadata/additionalDetails.php' => 'db6c2236740f97bfc8c341fa3da79dbc', './modules/Contacts/metadata/SearchFields.php' => '48c393c28326b6516e60380afa97e5c6', './modules/Contacts/language/en_us.lang.php' => '1dd9782ef94980ee09bbb21ec2b50414', @@ -2505,7 +2507,7 @@ $md5_string = array ( './modules/Contacts/ContactOpportunityRelationshipEdit.html' => '063f65d9dbe6f7f58367d99f2af65210', './modules/Contacts/ContactOpportunityRelationship.php' => 'ec6fac16e09199dc26550e84cca523cf', './modules/Contacts/ContactFormBase.php' => '0c0bf18973d25a15dd66bcca256112a7', - './modules/Contacts/Contact.php' => '48678801965d3ce52402f0405c5ee566', + './modules/Contacts/Contact.php' => 'b66ed57efe60e3774f09e25ca8ffc997', './modules/Contacts/BusinessCard.php' => '6791cfe02546533166a04d27d143eb49', './modules/Contacts/BusinessCard.html' => '2ad1f1578e7c6f85791f97656576a3a8', './modules/Contacts/Address_picker.html' => '7d072ff9f9bc06d2373ba2dee5a7086c', @@ -2513,12 +2515,12 @@ $md5_string = array ( './modules/Connectors/Connector.js' => '41a0de3b7ffd5ab14b582a387a91d709', './modules/Connectors/views/view.sourceproperties.php' => '7997c47e9b4b16a4110d74cefd49e876', './modules/Connectors/views/view.searchproperties.php' => '5babafe11d6938e40743e8309949bc9b', - './modules/Connectors/views/view.modifysearch.php' => 'c9b1cfca896ed2004015dc9ae6f9ed4a', - './modules/Connectors/views/view.modifyproperties.php' => '0486454214e934686902d95068a7d9de', - './modules/Connectors/views/view.modifymapping.php' => '752df2ba9ae4155de142af971cfbb1c6', - './modules/Connectors/views/view.modifydisplay.php' => '91db631f22c797e1fc081f6e4a1bb705', + './modules/Connectors/views/view.modifysearch.php' => '6d780a252feacfec34763b6aa82023a7', + './modules/Connectors/views/view.modifyproperties.php' => 'dcc0b716091162d4c0bd2358cc36c75e', + './modules/Connectors/views/view.modifymapping.php' => 'f6e46213597c80cf956d096a2b7eff07', + './modules/Connectors/views/view.modifydisplay.php' => 'f0214caab2b1f11eeaa0061b7f5c5479', './modules/Connectors/views/view.mappingproperties.php' => '709b7978381a3d4559574aef3035f08b', - './modules/Connectors/views/view.displayproperties.php' => 'bb8252ddbabe8ecf9dce745eecef0ec6', + './modules/Connectors/views/view.displayproperties.php' => '34fbb12f5fbf89bc4320b8d5fa8e6157', './modules/Connectors/views/view.connectorsettings.php' => '4a73c3d0a244650188fbb5028b8d15dd', './modules/Connectors/tpls/tabs.css' => 'b69adf86332cf9ef4dcec4af9b9867cd', './modules/Connectors/tpls/source_properties.tpl' => '4e474ab4f798b0cabc9f3a224a6bece6', @@ -2534,7 +2536,17 @@ $md5_string = array ( './modules/Connectors/tpls/administration.tpl' => '08c82fb2efe9da0793e676ba61cfd4da', './modules/Connectors/metadata/searchdefs.php' => '0a7b0c3175045ed95ffba4266f5aa88c', './modules/Connectors/language/en_us.lang.php' => '7a098f6e82147b7f1b78548c73e6396d', - './modules/Connectors/controller.php' => '22fbb51484589e797e7a6f028f506fc9', + './modules/Connectors/controller.php' => '6a2d3a3e77f9ea5215c829be7d293c3e', + './modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php' => '0a0fac88d087b82df90c60abc0945819', + './modules/Connectors/connectors/sources/ext/rest/insideview/insideview.php' => 'a0707499398c3cf58c9fbaa45a93e85d', + './modules/Connectors/connectors/sources/ext/rest/insideview/images/video.png' => '78914852af51eb8eb694fdcf518b6752', + './modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_expanded.png' => 'db7e5e84b7891adaed90dfd211338959', + './modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_collapsed.png' => 'dc728b8cb2023847a28eb54a06c4d78e', + './modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview.png' => 'b94d9483f486e0f53b3d98c6d04bd9f6', + './modules/Connectors/connectors/sources/ext/rest/insideview/images/close.png' => 'a0d9ad4fc0c4a58ebaa7823216f6cc98', + './modules/Connectors/connectors/sources/ext/rest/insideview/config.php' => 'a5d091ae0399b08a109fb26ec6d602f7', + './modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php' => '6897ce047b1ce6d1a163cb6845e3a106', + './modules/Connectors/connectors/sources/ext/rest/insideview/InsideView.en_us.tpl' => '7dfe61487b357f007a1792b541def89b', './modules/Connectors/connectors/sources/ext/rest/linkedin/vardefs.php' => '975b74882adf5d355985d903f60fc160', './modules/Connectors/connectors/sources/ext/rest/linkedin/mapping.php' => '03dbda444c28146c4def211d46778dbc', './modules/Connectors/connectors/sources/ext/rest/linkedin/linkedin.php' => 'd5da6d5b0b11082807ee53fd3eafbed3', @@ -2546,7 +2558,7 @@ $md5_string = array ( './modules/Connectors/connectors/formatters/ext/rest/linkedin/linkedin.php' => 'afa27c177dd2d7d04b4a5f77695cde8b', './modules/Connectors/action_view_map.php' => '66adc06bd72b68a55b8fb8d6dee103d8', './modules/Connectors/Menu.php' => '555fcfc5228dc346b01e69fc1779bb8a', - './modules/Connectors/InstallDefaultConnectors.php' => '6429abb1f241b93a96c868d23935aae5', + './modules/Connectors/InstallDefaultConnectors.php' => '9b717d3d2fcc49336f880fa84d46a2a4', './modules/Connectors/Forms.php' => '2a94c4a8f697121796f53413911131f6', './modules/Connectors/ConnectorRecord.php' => '452d382859384f44b912abd25f727268', './modules/Configurator/views/view.sugarpdfsettings.php' => 'dc1f025773e789eb3960bed66382b4ac', @@ -2689,7 +2701,7 @@ $md5_string = array ( './modules/Campaigns/WebToLeadCapture.php' => '78cdb91e816e94b1d7b4eeba8e3fcf78', './modules/Campaigns/Tracker.php' => '726e6fc5b58f58cd4b330b61a12d7d21', './modules/Campaigns/TrackDetailView.tpl' => '3187e57b3476ef4387e76b385893027d', - './modules/Campaigns/TrackDetailView.php' => 'd1b54e37c5cfdbce9f556298e78754c4', + './modules/Campaigns/TrackDetailView.php' => '4f3535618c1d37939b7e2775d25f1657', './modules/Campaigns/Subscriptions.tpl' => '1332be18f7e16a30887156e46430602a', './modules/Campaigns/Subscriptions.php' => 'dfb48508303fc1f68bff1a9c83b06a96', './modules/Campaigns/Subscriptions.html' => 'a597b43f0772858ca5ea18c6f19a9ea9', @@ -2839,7 +2851,7 @@ $md5_string = array ( './modules/Administration/repairUniSearch.php' => 'e25cdf52b928d0ea05e4a2b25acf8a66', './modules/Administration/repairSelectModule.php' => 'a7af51a5f7f6e5002f4963b80504c0d8', './modules/Administration/ncc_config.php' => '6fcf1f7bd93acbf9b0c7b3a890bdab9d', - './modules/Administration/metadata/adminpaneldefs.php' => '5a2723947dbd9d4f7d9235ec78906f50', + './modules/Administration/metadata/adminpaneldefs.php' => 'ad3965327909144539e30ab90a646daa', './modules/Administration/metadata/SearchFields.php' => '6968a40d78da694e44829ec8d00645e8', './modules/Administration/language/en_us.lang.php' => '8bfda44a508c4eaa535372244f152343', './modules/Administration/javascript/Administration.js' => '17c40b0cafc373733b54c61945796313', @@ -2914,10 +2926,10 @@ $md5_string = array ( './modules/Activities/SubPanelView.php' => '7b656bdde855f8032edcfb640677d7a9', './modules/Activities/SubPanelView.html' => '74afed37ca1d19a2a67307e063b52c4e', './modules/Activities/SetAcceptStatus.php' => '42fcffc8717e7b1cb10001b137400d9e', - './modules/Activities/Popup_picker.php' => 'c21ed67459a62113293a71f7b6c43611', - './modules/Activities/Popup_picker.html' => '82fca068e687dbca227b0b4c8fc69b76', './modules/Activities/OpenListView.php' => '7e4b120b80f5d4dcc461ca1bc2e8fc54', './modules/Activities/OpenListView.html' => '1983c915fc02a41b01459b6923d7a0a5', + './modules/Activities/Popup_picker.php' => 'c21ed67459a62113293a71f7b6c43611', + './modules/Activities/Popup_picker.html' => '82fca068e687dbca227b0b4c8fc69b76', './modules/Activities/Menu.php' => '50ace4d08c7af062a3da92e52e6ebffc', './modules/Activities/Forms.php' => 'd7472639650199c74c40ba981f008c2c', './modules/Accounts/Account.js' => 'f36d341901d749c3e43e334d5a550f01', @@ -2955,7 +2967,7 @@ $md5_string = array ( './modules/Accounts/AccountFormBase.php' => 'a80b0c9ebadf92b1451b2e90fe4d3146', './modules/Accounts/Account.php' => '685f3b6d7de771f7966ff99b40687d67', './modules/ACLRoles/ACLRoles.js' => '5366ba5c2f0203a5b212682a644020d2', - './modules/ACLRoles/views/view.list.php' => '7db6710edc1dae3a172213516130805e', + './modules/ACLRoles/views/view.list.php' => 'e40ad40a14a03cf692dd279b9616329a', './modules/ACLRoles/vardefs.php' => 'f500232770683374295c4d6d721dd54c', './modules/ACLRoles/popup.tpl' => 'c76696fa8c1a9e0a18bfd95964bd34e7', './modules/ACLRoles/metadata/subpanels/default.php' => 'ae62c499811f290b3afd519359cb1e84', @@ -2970,7 +2982,7 @@ $md5_string = array ( './modules/ACLRoles/Popup_picker.php' => '40caf8381d5895522cc4498241e463d9', './modules/ACLRoles/Popup_picker.html' => '97ba9cc4e5d8112f4b34560ed80af8d7', './modules/ACLRoles/Menu.php' => 'aff1c642bf608488e3212b1822e6b464', - './modules/ACLRoles/ListUsers.php' => '8943a5c310a76d435c88b1c55ab5ff72', + './modules/ACLRoles/ListUsers.php' => 'c56917db3d56b5500e3610907daa8cd5', './modules/ACLRoles/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e', './modules/ACLRoles/EditViewBody.tpl' => 'ef51be5f166d56af9524993cd4983d34', './modules/ACLRoles/EditView.tpl' => 'd98c51bc90139d35c6cb72acfe88127e', @@ -2982,7 +2994,7 @@ $md5_string = array ( './modules/ACLRoles/DetailViewBody.tpl' => 'a1dc057d0ac81f87ada4acf9dd1cbe55', './modules/ACLRoles/DetailView.tpl' => '975040e818f0231e25707a8473776af8', './modules/ACLRoles/DetailView.php' => 'e1e7fdda30ac3ec334aa03c620da0faf', - './modules/ACLRoles/DetailUserRole.php' => '77b5c996e893286bdae907da3e7a2eee', + './modules/ACLRoles/DetailUserRole.php' => '042213d7e29e2920bf9f0f42babb14fb', './modules/ACLRoles/Delete.php' => 'f96a51d94ed64113248441e61913c47e', './modules/ACLRoles/ACLRole.php' => '777a7fbaca007322fdf5caaa21468a65', './modules/ACLActions/vardefs.php' => '105b4a9bc0de199ce7c6f7bed15ee783', @@ -2991,7 +3003,7 @@ $md5_string = array ( './modules/ACLActions/actiondefs.php' => '6356876a5a119274d46223f3e2bc4789', './modules/ACLActions/Menu.php' => '848677adce001bc11ce4a9776c71766f', './modules/ACLActions/Forms.php' => 'd41d8cd98f00b204e9800998ecf8427e', - './modules/ACLActions/ACLAction.php' => '7db517b8a77747bb2746d3523dd2bc33', + './modules/ACLActions/ACLAction.php' => 'c5a4b74f755b0613b028496df3d5c840', './modules/ACL/vardefs.php' => '1a607a89f74d689dee7511441e9b5780', './modules/ACL/remove_actions.php' => 'e0d41de5bae0c25d1b96464945ccc611', './modules/ACL/metadata/subpaneldefs.php' => '828de1877beb0908c89bbd37b903b5bf', @@ -3072,15 +3084,15 @@ $md5_string = array ( './jssource/src_files/include/SubPanel/SubPanelTiles.js' => 'b65c9d967a27614395b6857edce04539', './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' => '85eb38c3295ddbd375a87ddb1f57de20', - './jssource/src_files/include/SugarCharts/Jit/js/mySugarCharts.js' => '5a92afaea8135c89d7f397e7a83fe2b7', - './jssource/src_files/include/SugarCharts/Jit/js/sugarCharts.js' => '9733290dde6930d2ac24cc4c1d74f325', + './jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js' => '6f27b1641c7d1d80182978bf4230e257', + './jssource/src_files/include/SugarCharts/Jit/js/mySugarCharts.js' => 'bbbca8b9bb44d0f107a2783fe1cf861d', + './jssource/src_files/include/SugarCharts/Jit/js/sugarCharts.js' => '72eba4ec918665ffa582c6fec16d2c78', './jssource/src_files/include/SugarDependentDropdown/javascript/SugarDependentDropdown.js' => '82905de42674faa12e819f99d3db0610', './jssource/src_files/include/SugarEmailAddress/SugarEmailAddress.js' => '80df53c11d7653e87488d48ce49e2b76', './jssource/src_files/include/SugarFields/Fields/Address/SugarFieldAddress.js' => '2e39ad35e6759c407fae5b35b230d34b', - './jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js' => '05d54e9fd3f320f4e9d1c932fbf01f3d', + './jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js' => '46177c45fd308532d832212baaa64cd3', './jssource/src_files/include/SugarFields/Fields/Datetimecombo/Datetimecombo.js' => '7f93acedc02d390800eaad0e5fc22cae', - './jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js' => '1556040f15b77df8134127ed98909906', + './jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js' => '15df601d523b6e06f6b71220c7ff12bd', './jssource/src_files/include/connectors/formatters/default/company_detail.js' => 'ac718b13fd22689d7da786dcb0b0380c', './jssource/src_files/include/javascript/cookie.js' => '4edb43519c5ac8c3d9b1b73b9ddf87fb', './jssource/src_files/include/javascript/dashlets.js' => 'c85774c7bcc3568d50e71448dbb371af', @@ -3095,7 +3107,7 @@ $md5_string = array ( './jssource/src_files/include/javascript/quickCompose.js' => 'c87742cdae04b75afc7e59c9e9440d39', './jssource/src_files/include/javascript/quicksearch.js' => '751e98b3b4c21b2585d3d706249c800b', './jssource/src_files/include/javascript/report_additionals.js' => '3f42310a202ae3779225ff29be91ea3b', - './jssource/src_files/include/javascript/sugar_3.js' => 'c64dd62b371639fc96854a9ff09c9588', + './jssource/src_files/include/javascript/sugar_3.js' => 'ad171414b5b0c2fe2f04dce74e527657', './jssource/src_files/include/javascript/sugar_connection_event_listener.js' => 'd13aa0b553050db12f7bd6cd5b7b98f9', './jssource/src_files/include/javascript/sugarwidgets/SugarYUILoader.js' => '9237f12850b7ce5c27669480f71152be', './jssource/src_files/include/javascript/sugarwidgets/SugarYUIWidgets.js' => '7ebb592aa4b8c948b288d85de464ec7e', @@ -3442,7 +3454,7 @@ $md5_string = array ( './install/licensePrint.php' => 'f569be1d51e52d0067ec1b2845a4c9b1', './install/license.php' => 'b77114912cbd2dcb2ed7bd79364a2bcb', './install/language/en_us.lang.php' => '323d1171ae5e00d8abea20f864d80901', - './install/performSetup.php' => '3d4dab1d275241eba09b2766bf8fa2e3', + './install/performSetup.php' => 'fa88a490b6344e1c93748a082dc9e3dc', './install/install_defaults.php' => '3c67b082c1709e909dd1aaf051e9c589', './install/installType.php' => '610e49880f0277ce2f7d4f92f43a5188', './install/installSystemCheck.php' => '5a838d917ba5bce6796a1650621bf936', @@ -3451,7 +3463,7 @@ $md5_string = array ( './install/install.css' => '862e23df1815d0138cf0a367d92a372d', './install/download_patches.php' => '5e368942a39067c98762efa043f3e30f', './install/download_modules.php' => '6d02fd07cfa964f47204b8f4b69efdd7', - './install/install_utils.php' => 'fc7330ee05ef98d790ad528f61d47fe5', + './install/install_utils.php' => '458c1122a57a0b8bf56188844bef7567', './install/populateSeedData.php' => 'eff9d58196b49139ad94a4f79af810ab', './install/demoData.en_us.php' => 'ab6d0dc87a9f421e843ac454aec4546a', './install/dbConfig_a.php' => '2e20033c538c76a54f2aaeed13c42118', @@ -3463,7 +3475,7 @@ $md5_string = array ( './install/TeamDemoData.php' => '1cf512bcb6834cdac2c154b2f42d14cd', './index.php' => '85d2f32e8b794128592f116a91fcef72', './include/JSON.js' => '603ba7c5edab1ce11d7d1ab3fd98e808', - './include/externalAPI/ExternalAPIFactory.php' => '1a04e3a0453152df9d6660539aae75c1', + './include/externalAPI/ExternalAPIFactory.php' => 'b94ed8c1a24578abe4e5b30f484ccfbe', './include/externalAPI/Base/WebMeeting.php' => '53cbdd0ac77fde2542711093c64f83b9', './include/externalAPI/Base/WebFeed.php' => '6ce8b5213a9f52991c30a9597686aa9a', './include/externalAPI/Base/WebDocument.php' => '728f703b0dd2bcf9845b033142532416', @@ -3543,7 +3555,7 @@ $md5_string = array ( './include/ytree/Node.php' => '537ea99369cc451f6d02e6ccd33c4eec', './include/ytree/ExtNode.php' => 'f4bcdda0640f5ad72e95835419b59435', './include/vCard.php' => '96cca0a297a8ecce67e0894b072b0793', - './include/utils/php_zip_utils.php' => '5162320554d086e9fa3404aac87760c0', + './include/utils/php_zip_utils.php' => '776cdb257fd48ca212940f60687cd149', './include/utils/sugar_file_utils.php' => '5dbecfc86fec0dcd5c15d69c9c68758e', './include/utils/security_utils.php' => '5848837442f97823077e87a384e7e691', './include/utils/progress_bar_utils.php' => 'c38627c8c832e31a0f524151491efbb5', @@ -3552,14 +3564,14 @@ $md5_string = array ( './include/utils/layout_utils.php' => 'e7b465492ed76893b109e2baa31cabea', './include/utils/file_utils.php' => 'cd7b33adab01fd36d0953e40a336dffd', './include/utils/external_cache.php' => '4138cf307fea4ca68817b4c80250cab0', - './include/utils/mvc_utils.php' => '621130cbb337fe28e83da67395ec67ca', + './include/utils/mvc_utils.php' => '9176cc44c66e70eb43af3134a4393fd2', './include/utils/encryption_utils.php' => '060b4fa727c1d48fa8ec2809e2fb58cf', './include/utils/db_utils.php' => '6c76995e0c7bfb05066e4e58a88e412a', './include/utils/autoloader.php' => '76818f941992acf4caa205cc6f2aa0c9', './include/utils/array_utils.php' => '4a63065e0ab62bfc33b9429f886ed7ec', './include/utils/activity_utils.php' => '96a8bd8977d5e7532e3b7d8ca3a583ee', './include/utils/LogicHook.php' => '3d65be3d74e10ecdf5aee20b2efceee6', - './include/utils.php' => '7344356f7a1a616d960b5efc38f65422', + './include/utils.php' => '39ee0df9dd7a821e0b018a926e53f450', './include/upload_file.php' => '177f5eb2032e0c7797e11f93efb759f3', './include/timezone/timezones.php' => '0b0ffe9ce81f1652daec48cf2fbdd688', './include/templates/TemplateGroupChooser.php' => '111b7db20ad8143651bc7bba835894df', @@ -3657,8 +3669,7 @@ $md5_string = array ( './include/modules.php' => 'b016b295433b3b4d54c08eca90a566b4', './include/language/jsLanguage.php' => 'f39b23266c5f25d253082afb6a210fe2', './include/language/en_us.notify_template.html' => '4e90b0343ac29bf12687dddb15afea7d', - './include/language/en_us.lang.php' => '0af7e9be3486c57d59a50a5df4bda645', - './include/json_config.php' => '73219c3de81147aa2e18580b497353e6', + './include/language/en_us.lang.php' => '73f8214fa78457568c881183534d1911', './include/jsolait/init.js' => '15b8d113066ad400aa80d9dfc35b544b', './include/jsolait/missingmixin.js' => 'e87a7ee61bd9e134791325d98ca72d9b', './include/jsolait/lib/codecs.js' => 'c3e9eb73b3187f1b69e33bde1a635712', @@ -3672,14 +3683,15 @@ $md5_string = array ( './include/jsolait/lib/xmlrpc.js' => '561bc3aca65261c577ab56b9908d6b78', './include/jsolait/copying.txt' => '7fbc338309ac38fefcd64b04bb903e34', './include/jsolait/LICENSE' => '7fbc338309ac38fefcd64b04bb903e34', - './include/javascript/sugar_grp_quickcomp.js' => '724cb0b1c64928dd5a20a5f280d23342', - './include/javascript/sugar_grp_emails.js' => '5c70cfe438090cc94609b472ab007c88', + './include/json_config.php' => '73219c3de81147aa2e18580b497353e6', + './include/javascript/sugar_grp_quickcomp.js' => 'c7cea14477c8fc57e010fd2f76076826', + './include/javascript/sugar_grp_emails.js' => 'b55feea4d5ebe84a6f904a75950d3414', './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' => 'e4c888613deed6eeb327917a5f6f0c9c', './include/javascript/sugar_grp1_yui.js' => 'ca0556ee4f9844174000e6822ef46fc4', - './include/javascript/sugar_grp1.js' => '3a1b8bb595ee443c5d934bb3a9ce1d8b', + './include/javascript/sugar_grp1.js' => '8136c11805a4e526a32413cd5d7eb52a', './include/javascript/cookie.js' => 'c17e3c176f5bb5b2683718f5b7d275a9', './include/javascript/dashlets.js' => '1e9808c9ce91257c101d96d4f947fdb3', './include/javascript/include.js' => '111549b33d8ca4011ca99a23105050fe', @@ -3693,7 +3705,7 @@ $md5_string = array ( './include/javascript/quickCompose.js' => '8702e1904189f22c31f88b05e22398e7', './include/javascript/quicksearch.js' => '0aa69ecc998c49edc302d388da955bac', './include/javascript/report_additionals.js' => 'e5f134ab662aefa681dc3c001b361730', - './include/javascript/sugar_3.js' => 'fc89fba801b4dea0c529b3bf23b97986', + './include/javascript/sugar_3.js' => '49558dcafccb84e6ac9df6afe2fef82f', './include/javascript/sugar_connection_event_listener.js' => '6c40c4c05f7be79d30ce642029720cac', './include/javascript/swfobject.js' => 'be72d27dc0b8bf006dcb764e41153465', './include/javascript/calendar.js' => 'ee7be017a1f096bb94f425bdbe241dd4', @@ -4736,9 +4748,9 @@ $md5_string = array ( './include/generic/SugarWidgets/SugarWidgetField.php' => '606c1ac30b3a5f786c4d7c8d3e0e374f', './include/generic/SugarWidgets/SugarWidget.php' => '4edff0b5fec741dc5ec5212a9b3c1465', './include/generic/Save2.php' => '0314379008eb288d200406e362a5dd13', - './include/generic/LayoutManager.php' => '83a873d5e712ff177bd2ba53b79c3ab4', + './include/generic/LayoutManager.php' => 'a87b35af9f4ce6e851797f94b6772425', './include/generic/DeleteRelationship.php' => '1c38fca0d35f81fb923b9271d4f96be3', - './include/formbase.php' => 'b6de730ea87add960545ace7434d75a8', + './include/formbase.php' => 'ea5ba7e5d169135ec0dc3bad62fdb790', './include/fonts/License.html' => '8a22bc6b773aeb68f9748fd1920f84d4', './include/fonts/Times-Roman.afm' => 'f257a72c31f6a864f4e0994b1771628c', './include/fonts/Times-Italic.afm' => 'c41212e70e19627889aefef85212a47d', @@ -4754,11 +4766,11 @@ $md5_string = array ( './include/fonts/Courier-Bold.afm' => 'cb84ced0cc430a5d54497257a11638f5', './include/export_utils.php' => '306312d45892f75122cd5965876d0254', './include/entryPoint.php' => 'e25fe49080602ee59180d4ea18e4424f', - './include/dir_inc.php' => '1f947162f6972a809b6506777c98df07', + './include/dir_inc.php' => '7fa525a179288303fb0cc34b89371b62', './include/database/SqlsrvManager.php' => '659363159024ac1885d50f8a8e3c31e3', './include/database/SqlsrvHelper.php' => '6cf5af120c1644866c0687ba1773d69e', './include/database/PearDatabase.php' => '029e54b3c4a2c9da75bdab75b906232e', - './include/database/MysqliManager.php' => '32d9d06a3c621c7e0f9669f7622397af', + './include/database/MysqliManager.php' => '4b7748362a9ffbd38288cbd8619c0f89', './include/database/MysqliHelper.php' => '8824aa4be4b5946c8a6ad53d55d43adc', './include/database/MysqlManager.php' => '2fb21197c234df9ffca41ff9ab486a8a', './include/database/MysqlHelper.php' => 'da8cdfc7ed211c2efe150076a5c97f92', @@ -4778,7 +4790,7 @@ $md5_string = array ( './include/connectors/sources/loc/xml.php' => 'd75aa5e0e08d2ea04b283ed397235e40', './include/connectors/sources/ext/soap/soap.php' => 'f15da7e57e8dac314c819cccaed3933d', './include/connectors/sources/ext/rest/rest.php' => '223d5dbdcaa38397c1606a493b935ee1', - './include/connectors/sources/default/source.php' => '42f30e93e6000bde2d1bbd8b4ef88a30', + './include/connectors/sources/default/source.php' => '158741672bd0289e33fd97fbd2fe5938', './include/connectors/sources/SourceFactory.php' => '8e2a76bda89e905821aee0568cb65fed', './include/connectors/formatters/ext/soap/tpls/default.tpl' => '30ac6e34be2b90079b7fa67e9916439b', './include/connectors/formatters/ext/rest/tpls/default.tpl' => 'a775bb54d09a292b0c3940f30758199a', @@ -4793,7 +4805,7 @@ $md5_string = array ( './include/VarDefHandler/listvardefoverride.php' => '9e156066bd3f24d00b62844589162ab1', './include/VarDefHandler/VarDefHandler.php' => 'ed481a168b11ed8306efdce0725e7b1f', './include/TimeDate.php' => '2bfe3be6536522e4e4a749efe3fda4ac', - './include/TemplateHandler/TemplateHandler.php' => '7f3ed277a7c7fe420af3c079ff95e3c9', + './include/TemplateHandler/TemplateHandler.php' => '05efe77a92e9c7faf765ea99bf86f607', './include/Sugarpdf/sugarpdf_default.php' => '4e61fe9d5cd31ac41acc315423348ff7', './include/Sugarpdf/sugarpdf_config.php' => 'ecd77816c5def7f50b83d7c2336e7adf', './include/Sugarpdf/sugarpdf/sugarpdf.smarty.php' => 'dbe537b77ec1eb13e564269becaae15e', @@ -4817,7 +4829,7 @@ $md5_string = array ( './include/SugarCache/SugarCacheFile.php' => 'a367fcd4ef64e6f71a342b30cbb625ba', './include/SugarCache/SugarCacheAbstract.php' => '17c685bba109994950cdc66be58c4460', './include/SugarCache/SugarCacheAPC.php' => '0a237e55d4dc674145da1648576cbd28', - './include/SugarCache/SugarCache.php' => 'a0ae65714d9c6babc1ae99f823706197', + './include/SugarCache/SugarCache.php' => '94c075853d48cea91295e3bc45327f69', './include/SugarObjects/templates/sale/vardefs.php' => 'c165fdc44aee37fdaa6918544b1f8fdc', './include/SugarObjects/templates/sale/metadata/subpanels/default.php' => 'e2ca78fec0686be0c1d1e6400a5c272a', './include/SugarObjects/templates/sale/metadata/searchdefs.php' => '02f9d5317fb7b44bfa9a1a965512e295', @@ -4856,7 +4868,7 @@ $md5_string = array ( './include/SugarObjects/templates/person/icons/person.gif' => 'ea5e2b2022166291d01ccedaf24b4e33', './include/SugarObjects/templates/person/icons/Createperson.gif' => '2e20692d501b15729294b80f4f311d77', './include/SugarObjects/templates/person/config.php' => 'ade871c96f0a91be8b4b27a06c280d33', - './include/SugarObjects/templates/person/Person.php' => 'c98a468131e78a38a3240cf4dbfd766d', + './include/SugarObjects/templates/person/Person.php' => '526febbc58f7ba18ddee8130925ea508', './include/SugarObjects/templates/issue/vardefs.php' => '9bd9c6c69cd4833ce5bb3713e0eb7d0b', './include/SugarObjects/templates/issue/metadata/subpanels/default.php' => 'c4ad08eb6c1a932e1a26fc844def6b5e', './include/SugarObjects/templates/issue/metadata/searchdefs.php' => '8b387defff2b8da8873d8201281a7357', @@ -4876,7 +4888,7 @@ $md5_string = array ( './include/SugarObjects/templates/issue/config.php' => 'e03e19e958bd61c5964a0cf4f2f0304a', './include/SugarObjects/templates/issue/Issue.php' => '6f554147a4971954c1b42295b965949c', './include/SugarObjects/templates/file/views/view.edit.php' => '16d99d3314bdaafd0d14d3bf3be827b5', - './include/SugarObjects/templates/file/vardefs.php' => '418b99637b42402343885a5b4fcd25af', + './include/SugarObjects/templates/file/vardefs.php' => 'e84fc8b69f07435478228715a06a5cba', './include/SugarObjects/templates/file/metadata/subpanels/default.php' => 'dd9fa46c03bcd7e6b11fd34e08d6e462', './include/SugarObjects/templates/file/metadata/searchdefs.php' => '7160ba30d43ad69e3ffbcae530ef3fba', './include/SugarObjects/templates/file/metadata/quickcreatedefs.php' => '3b8a2aedace4f3f94faa1752f4e4115f', @@ -4933,7 +4945,7 @@ $md5_string = array ( './include/SugarObjects/implements/team_security/language/en_us.lang.php' => '6d98aadfbb7a812f26d04d680670a308', './include/SugarObjects/implements/assignable/vardefs.php' => 'a548ffd7a3d6e6db97539837ac747137', './include/SugarObjects/implements/assignable/language/en_us.lang.php' => '364b577943f10dc538ebf1dbb46ca9a7', - './include/SugarObjects/VardefManager.php' => 'bc234e9ab5e1ba0bc40dbaac97d6d846', + './include/SugarObjects/VardefManager.php' => '477ceccd79bb1010d3fcf21de33e7b0e', './include/SugarObjects/SugarSession.php' => '162a302292027328640b60bebc63cd2c', './include/SugarObjects/SugarRegistry.php' => '7fb93cfcaba8de431d61b07d3b52fc88', './include/SugarObjects/SugarConfig.php' => '5d1d1b107196e4bea8ac8ed54a829085', @@ -5012,7 +5024,7 @@ $md5_string = array ( './include/SugarFields/Fields/Int/EditView.tpl' => '53e2dbab0d2830fa6fc05433d7cf2027', './include/SugarFields/Fields/Int/DetailView.tpl' => '470958235306be68471cc439fab4888c', './include/SugarFields/Fields/Iframe/EditView.tpl' => 'bacaa9dc02c75000eaed3724023dbfd1', - './include/SugarFields/Fields/Iframe/DetailView.tpl' => '69c4a2ee326250a55a11979eac008eff', + './include/SugarFields/Fields/Iframe/DetailView.tpl' => 'a17f569da4dcfe2fb401ae6e295b23aa', './include/SugarFields/Fields/Html/SugarFieldHtml.php' => 'cdb62d1c4ca61e8eebbba05d95372ded', './include/SugarFields/Fields/Html/DetailView.tpl' => 'fc4ff8f6b0ec4a434a249c542cd97faa', './include/SugarFields/Fields/Fullname/SugarFieldFullname.php' => '223fee90ff8e764b5de216b44c4c110d', @@ -5020,10 +5032,10 @@ $md5_string = array ( './include/SugarFields/Fields/Float/SugarFieldFloat.php' => '2e986db8221d8381094a0cfc55b37c3f', './include/SugarFields/Fields/Float/EditView.tpl' => '2d68a06fdf2c1e032fc144905af33437', './include/SugarFields/Fields/Float/DetailView.tpl' => '82f280a7d4e3f74d2ab0cd481021fe3d', - './include/SugarFields/Fields/File/SugarFieldFile.js' => '8ea8563718821e31d6cca721903afbf5', + './include/SugarFields/Fields/File/SugarFieldFile.js' => 'b35d39bce43f628045258360754a7911', './include/SugarFields/Fields/File/SearchView.tpl' => '3caa8a3b0a97a20169c404260788879f', './include/SugarFields/Fields/File/ListView.tpl' => 'd747a01d5b25abb348c51f7bd0154403', - './include/SugarFields/Fields/File/SugarFieldFile.php' => 'b3e212cecd945057b984c89567076dfb', + './include/SugarFields/Fields/File/SugarFieldFile.php' => 'f6bc4adb18ef8b53f4361f366dc7fb33', './include/SugarFields/Fields/File/EditView.tpl' => '76ef95550d9f50581f43fdaa2af3cc77', './include/SugarFields/Fields/File/DetailView.tpl' => 'b2b300b0591fd73e4ea65f597ea0235c', './include/SugarFields/Fields/Enum/SugarFieldEnum.php' => '01b94cd983a49a9e5e3a293a6cdec390', @@ -5045,9 +5057,9 @@ $md5_string = array ( './include/SugarFields/Fields/Currency/ListView.tpl' => 'c62e2997785bf58a314576d5a69fb6f9', './include/SugarFields/Fields/Currency/EditView.tpl' => 'df0a9a55388c72e731733fa6744569f9', './include/SugarFields/Fields/Currency/DetailView.tpl' => '07b10accc2d817376b207b935182c60b', - './include/SugarFields/Fields/Collection/SugarFieldCollection.js' => 'df352c5e6c25179225efdadab2bd42a8', + './include/SugarFields/Fields/Collection/SugarFieldCollection.js' => '2af30a1d9152c09b47c7549f817d98be', './include/SugarFields/Fields/Collection/view.sugarfieldcollection.php' => '626c0b184463b413735031b6c051db97', - './include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php' => '74bceaa60d33dfeeddee76fcdfba032e', + './include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php' => 'e8aba5a28ed899deff195b0f1d7b413f', './include/SugarFields/Fields/Collection/SugarFieldCollection.php' => 'bd1b5641e51667726ff658a4c7833732', './include/SugarFields/Fields/Collection/EditView.tpl' => '45349bf1c932fce030a1324a087ab949', './include/SugarFields/Fields/Collection/DetailView.tpl' => '61608ee9c8fb18e5d0d7d4b4c4eb1208', @@ -5099,11 +5111,11 @@ $md5_string = array ( './include/SugarCharts/swf/stackedGroupByChart.swf' => '0d524ea04b2c56d1c7cdc86194f59ed1', './include/SugarCharts/SugarChartFactory.php' => 'ff55d866d2c0fde548e7666aff189ebc', './include/SugarCharts/JsChart.php' => '05f53698530fa26980b46fcf38ea39e0', - './include/SugarCharts/Jit/tpls/chart.tpl' => 'f0b11091af0c81133f6b67d90b04bbfd', + './include/SugarCharts/Jit/tpls/chart.tpl' => 'e224555cacd075ed49e115b7b6d0049e', './include/SugarCharts/Jit/tpls/DashletGenericChartScript.tpl' => '5197cef3a47d67ee627e15446d287a46', - './include/SugarCharts/Jit/js/mySugarCharts.js' => 'a4efbd85b72d7f023ac35a7eb5655151', - './include/SugarCharts/Jit/js/sugarCharts.js' => '5b17d377e7fd08f5f08bd1345fa0b038', - './include/SugarCharts/Jit/js/Jit/jit.js' => '393dab7a34ed4c98dbfdacdbbb62d37e', + './include/SugarCharts/Jit/js/mySugarCharts.js' => '180f2b7c4859432a426a2be5629fd985', + './include/SugarCharts/Jit/js/sugarCharts.js' => '121053f6b356fb4c63e13f0e3c971416', + './include/SugarCharts/Jit/js/Jit/jit.js' => 'd326f248c3c5023fa760af94674a4d6f', './include/SugarCharts/Jit/css/base.css' => '775352bc541e0480ba0c5c03f0c4c56a', './include/SugarCharts/Jit/JitReports.php' => '4578c83c6260d80a1f9e641b48501625', './include/SugarCharts/Jit/Jit.php' => '38d283b800042e0764f930ce43e8879d', @@ -5235,12 +5247,12 @@ $md5_string = array ( './include/SearchForm/SugarSpot.php' => '0536606cc025c51415010ff7ea4c307b', './include/SearchForm/SearchForm2.php' => '1ffbb26f8443233eb18e509b521333e3', './include/SearchForm/SearchForm.php' => 'b05b4a135d0d1074a0529e4e248541c3', - './include/QuickSearchDefaults.php' => '136a9b7d9a33ee8818b45b570f656984', + './include/QuickSearchDefaults.php' => 'e3fa93b16371d241f92647ac0ffec396', './include/Popups/tpls/header.tpl' => '165bcfc57f5f9defc594f76debf796af', './include/Popups/tpls/footer.tpl' => '772a43d16594a76e89c5a7249e5d23b6', './include/Popups/tpls/PopupGeneric.tpl' => '99507106e55ee28bcd652882b188b236', './include/Popups/Popup_picker.php' => '2b2071f0293ba8a28f95dd657598910d', - './include/Popups/PopupSmarty.php' => '3bf1178f261c6f8ef95c7f1c7fa06ed7', + './include/Popups/PopupSmarty.php' => 'dae7bea856d81605c7dd0b73c8d2e6ed', './include/Pear/XML_HTMLSax3/LICENSE' => 'a45bb1bbeed9e26b26c5763df1d3913d', './include/Pear/XML_HTMLSax3/HTMLSax3/States.php' => '5b528baa84631f85349a7183597d2fb3', './include/Pear/XML_HTMLSax3/HTMLSax3/Decorators.php' => '34a9a95566c891f013584073fbadaf7e', @@ -5260,7 +5272,7 @@ $md5_string = array ( './include/MySugar/javascript/MySugar.js' => 'f2469a918adaf694736ef8087c9864a5', './include/MySugar/MySugar.php' => '49a8305a2193bbe445ac092d22ff854d', './include/MySugar/DashletsDialog/DashletsDialog.php' => 'e16fcfab4cb76f1cbfb4d8d4fb53100a', - './include/MassUpdate.php' => '2825b390dc880789beffd3fb3cb8f067', + './include/MassUpdate.php' => 'c3f2e6188f5b6afff2958a08ac95afcb', './include/MVC/View/views/view.xml.php' => '028d18c71c2dae2db826d0cc6d32306c', './include/MVC/View/views/view.vcard.php' => '32fa32960fe82caee39fcb8833541ad5', './include/MVC/View/views/view.sugarpdf.php' => '334694668f28d954182d05c196eef396', @@ -5268,7 +5280,7 @@ $md5_string = array ( './include/MVC/View/views/view.serialized.php' => '6746e128e8dacee78ecbf70ea3559cbb', './include/MVC/View/views/view.quickcreate.php' => 'b5d1b6e53d0aee0462eef68463a8a333', './include/MVC/View/views/view.quick.php' => '9a1fa9ad8fce5230124ee320fcc42266', - './include/MVC/View/views/view.popup.php' => '6e671cdfa4f08713a164db002cfd5db9', + './include/MVC/View/views/view.popup.php' => '7b8043992e9113658223bcb0c501465a', './include/MVC/View/views/view.noaccess.php' => '1cab33d38afb080ca5dbfaa70a05e69a', './include/MVC/View/views/view.multiedit.php' => 'b727fe11b404c9cbfb80b23cbbd13a4c', './include/MVC/View/views/view.modulelistmenu.php' => 'd1f9e8f7977602eab7faf6cb9ece2144', @@ -5287,11 +5299,11 @@ $md5_string = array ( './include/MVC/View/tpls/modulelistmenu.tpl' => '796ce676d310cf69a84618aa0c85082e', './include/MVC/View/tpls/Importvcard.tpl' => 'aa5117be30dc5b8c1fc726ba44a3eb00', './include/MVC/View/ViewFactory.php' => '822d3723675b0edcaf1f7b5cb65fb3c2', - './include/MVC/View/SugarView.php' => '48b191c2a868a070223f66a50443866f', + './include/MVC/View/SugarView.php' => '44c4ee4ba90c61f6fa74b2c0423efb0f', './include/MVC/SugarModule.php' => 'ce58476e24ad1717fe30192d10e28adc', - './include/MVC/SugarApplication.php' => '1b5adb291ecedffd526d6b1aa9811e96', + './include/MVC/SugarApplication.php' => 'c0ee7ebcacd32a865b10e3d4144519af', './include/MVC/Controller/file_access_control_map.php' => 'c94a1a349da51c17f5758d5f1ad6a364', - './include/MVC/Controller/entry_point_registry.php' => '38fefdc2607b5fd0c43647b670a2101e', + './include/MVC/Controller/entry_point_registry.php' => '0b6daeee64e3648e297811bbcd297717', './include/MVC/Controller/action_view_map.php' => 'b5a22402b8cd64eb8971a99a14a99c03', './include/MVC/Controller/action_file_map.php' => 'c35918d4fb518bb6f3c682efbabc10a4', './include/MVC/Controller/SugarController.php' => 'b5282938e4490ca8d23b6193094f8194', @@ -5299,9 +5311,9 @@ $md5_string = array ( './include/Localization/Localization.php' => 'de0035fc0f86167c97302fd381e0fcca', './include/ListView/ListViewDCMenu.tpl' => '996e1ff91b59dc978c3f59bf36b55599', './include/ListView/ListViewXTPL.php' => 'e70a4929a6e81eb2f63d60a5302c0780', - './include/ListView/ListViewSmarty.php' => 'e5ec337f92513cd58eb8479d6c8aa2d6', + './include/ListView/ListViewSmarty.php' => 'dc37b331de2c2423b6b001f3f3c6eec5', './include/ListView/ListViewPagination.tpl' => 'bcb4adbaea266d27495ac72fa7a4721d', - './include/ListView/ListViewNoMassUpdate.tpl' => 'd999dcd6c68e5263bcebc90be6092c1f', + './include/ListView/ListViewNoMassUpdate.tpl' => 'a5f2bfb2b49fd004a9dd1263bb74c5b7', './include/ListView/ListViewGeneric.tpl' => 'a9d91145abddf09489f6b39b10469714', './include/ListView/ListViewFacade.php' => 'eca289f7cf40a7e503255644bec57716', './include/ListView/ListViewDisplay.php' => 'f043bb8443a23bc1bf14114ba1ee3200', @@ -5332,12 +5344,12 @@ $md5_string = array ( './include/DetailView/DetailView.tpl' => '1058c91ce17689ca96031d2167be971e', './include/DetailView/DetailView.php' => '35d047b596e7d3c9e122703c9c0c9c2b', './include/Dashlets/DashletGenericAutoRefreshDynamic.tpl' => 'f769c32f17ac26313b340fec2861112e', - './include/Dashlets/DashletGenericDisplay.tpl' => 'bbe1d3bd20d84ee31037aa3f02623a0a', + './include/Dashlets/DashletGenericDisplay.tpl' => '810e79d4d561f4f54d0c533777baa9d6', './include/Dashlets/DashletGenericConfigure.tpl' => '9c9bdb6f6d6a79b2ac325fc40790b695', './include/Dashlets/DashletGenericAutoRefresh.tpl' => '6142a7f53bcf1b5b45414ef2aa415639', './include/Dashlets/DashletGenericChartConfigure.tpl' => 'db96a4bcb690f325cfb41e60ab4b4791', './include/Dashlets/DashletGenericChart.php' => '4ba364f711dc6a9e295298c9e685b00f', - './include/Dashlets/DashletGeneric.php' => 'cfe4bba351ebc874a1380430608acfe2', + './include/Dashlets/DashletGeneric.php' => '6a914b9515d29587019f1d5f20823a45', './include/Dashlets/DashletCacheBuilder.php' => '80f7f6f582d141f5b1e3f8d5da52bf34', './include/Dashlets/Dashlet.php' => 'c6096d2756a85211bdd40d8013047e78', './image.php' => '59c0f0d2767ed6ed5eac96335ad6d732', @@ -5745,7 +5757,7 @@ $md5_string = array ( './export.php' => '44550cd8bb3c34fc7b8dac67b549b6db', './data/upload/index.html' => '9cd784063d39b18d308932c28c385853', './data/Tracker.php' => '5dfc3f390ecccd8cbb1229e01f878593', - './data/SugarBean.php' => 'a4f1863929b6ac87f8090ebecb1ce40d', + './data/SugarBean.php' => 'b49ca9de8ca26a94bba549c835ee80a2', './data/Link.php' => '0eb776610e6f09640760c67412d69184', './custom/index.html' => 'b0070a296647b6026d1800db14510e3c', './cron.php' => '99055ca0a11c9810e9d3d655c4fb32d2', diff --git a/include/Dashlets/DashletGeneric.php b/include/Dashlets/DashletGeneric.php index 35d5b21b..18f0b301 100644 --- a/include/Dashlets/DashletGeneric.php +++ b/include/Dashlets/DashletGeneric.php @@ -203,7 +203,11 @@ class DashletGeneric extends Dashlet { $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'; + if($widgetDef['name'] == 'assigned_user_name') $widgetDef['name'] = 'assigned_user_id'; + //bug 39170 - begin + if($widgetDef['name'] == 'created_by_name') $name = $widgetDef['name'] = 'created_by'; + if($widgetDef['name'] == 'modified_by_name') $name = $widgetDef['name'] = 'modified_user_id'; + //bug 39170 - end $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])); @@ -235,7 +239,7 @@ class DashletGeneric extends Dashlet { $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()); @@ -329,11 +333,11 @@ class DashletGeneric extends Dashlet { break; } } - + $this->columns = $dashletData[$this->seedBean->module_dir.'Dashlet']['columns']; } } - + /** * Does all dashlet processing, here's your chance to modify the rows being displayed! */ @@ -350,7 +354,7 @@ class DashletGeneric extends Dashlet { if(isset($this->filters) || $this->myItemsOnly) { $whereArray = $this->buildWhere(); } - + $this->lvs->export = false; $this->lvs->multiSelect = false; // columns @@ -359,9 +363,9 @@ class DashletGeneric extends Dashlet { 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)){ + else if (isset($this->columns)){ // use the default foreach($this->columns as $name => $val) { if(!empty($val['default']) && $val['default']) { @@ -377,18 +381,27 @@ class DashletGeneric extends Dashlet { $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']; + + //bug: 44592 - dashlet sort order was not being preserved between logins + if(!empty($lvsParams['orderBy']) && !empty($lvsParams['sortOrder'])) + { + $lvsParams['overrideOrder'] = true; + } + else + { + 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']) && + 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; @@ -445,6 +458,10 @@ class DashletGeneric extends Dashlet { $options['filters'] = array(); foreach($this->searchFields as $name=>$params) { $widgetDef = $this->seedBean->field_defs[$name]; + //bug39170 - begin + if($widgetDef['name']=='created_by_name' && $req['created_by']) $widgetDef['name'] = 'created_by'; + if($widgetDef['name']=='modified_by_name' && $req['modified_user_id']) $widgetDef['name'] = 'modified_user_id'; + //bug39170 - end 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 @@ -497,7 +514,7 @@ class DashletGeneric extends Dashlet { $this->columns[$fieldName] = array('width' => '10', 'label' => $translated); } - + } } } diff --git a/include/Dashlets/DashletGenericDisplay.tpl b/include/Dashlets/DashletGenericDisplay.tpl index 1873a2bf..2a184001 100644 --- a/include/Dashlets/DashletGenericDisplay.tpl +++ b/include/Dashlets/DashletGenericDisplay.tpl @@ -47,26 +47,26 @@ - @@ -109,7 +109,7 @@ {foreach from=$displayColumns key=colHeader item=params} {/if} - + {foreach name=rowIteration from=$data key=id item=rowData} {if $smarty.foreach.rowIteration.iteration is odd} {assign var='_rowColor' value=$rowColor[0]} @@ -153,12 +153,12 @@ {strip} {/if} diff --git a/include/ListView/ListViewNoMassUpdate.tpl b/include/ListView/ListViewNoMassUpdate.tpl index 267f2e9d..924f3611 100644 --- a/include/ListView/ListViewNoMassUpdate.tpl +++ b/include/ListView/ListViewNoMassUpdate.tpl @@ -79,7 +79,7 @@ {counter name="colCounter"} {/foreach} - + {foreach name=rowIteration from=$data key=id item=rowData} {if $smarty.foreach.rowIteration.iteration is odd} {assign var='_rowColor' value=$rowColor[0]} @@ -90,7 +90,7 @@ {if !empty($quickViewLinks)} {/if} @@ -101,9 +101,9 @@ {if $params.link && !$params.customCode} <{$pageData.tag.$id[$params.ACLTag]|default:$pageData.tag.$id.MAIN} href="#" onMouseOver="javascript:lvg_nav('{if $params.dynamic_module}{$rowData[$params.dynamic_module]}{else}{$params.module|default:$pageData.bean.moduleDir}{/if}', '{$rowData[$params.id]|default:$rowData.ID}', 'd', {$smarty.foreach.rowIteration.iteration}, this);" onFocus="javascript:lvg_nav('{if $params.dynamic_module}{$rowData[$params.dynamic_module]}{else}{$params.module|default:$pageData.bean.moduleDir}{/if}', '{$rowData[$params.id]|default:$rowData.ID}', 'd', {$smarty.foreach.rowIteration.iteration}, this);"> {/if} - {if $params.customCode} + {if $params.customCode} {sugar_evalcolumn_old var=$params.customCode rowData=$rowData} - {else} + {else} {sugar_field parentFieldArray=$rowData vardef=$params displayType=ListView field=$col} {/if} {if empty($rowData.$col)} {/if} @@ -120,13 +120,13 @@ - + {/foreach} {include file='include/ListView/ListViewPagination.tpl'}
  + {if $pageData.urls.startPage} - + {else} - + {/if} {if $pageData.urls.prevPage} - + {else} - + {else} - + {elseif !$pageData.offsets.totalCounted || $pageData.offsets.total == $pageData.offsets.lastOffsetOnPage} - + {/if}
- {if $params.sortable|default:true} + {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'} @@ -124,7 +124,7 @@ {$arrowAlt} {/if} {else} - {if !isset($params.noHeader) || $params.noHeader == false} + {if !isset($params.noHeader) || $params.noHeader == false} {sugar_translate label=$params.label module=$pageData.bean.moduleDir} {/if} {/if} @@ -135,7 +135,7 @@
 
{if $col == 'NAME' || $params.bold}{/if} - {if $params.link && !$params.customCode} + {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} + {if $params.customCode} {sugar_evalcolumn_old var=$params.customCode rowData=$rowData} - {else} + {else} {sugar_field parentFieldArray=$rowData vardef=$params displayType=ListView field=$col} {/if} {if empty($rowData.$col) && empty($params.customCode)} {/if} @@ -173,10 +173,10 @@ {if !empty($quickViewLinks)} {if $pageData.access.edit} - + {/if} {if $pageData.access.view} - + {/if}
{if $pageData.access.edit && $pageData.bean.moduleDir != "Employees"} - + {/if} {$APP.LBL_NO_DATA}
-
+
-
+
+ + {else} {$error} diff --git a/include/SugarFields/Fields/Collection/SugarFieldCollection.js b/include/SugarFields/Fields/Collection/SugarFieldCollection.js index f5d58b62..5756a5b1 100644 --- a/include/SugarFields/Fields/Collection/SugarFieldCollection.js +++ b/include/SugarFields/Fields/Collection/SugarFieldCollection.js @@ -69,7 +69,9 @@ return false;}} SUGAR.collection.safe_clone=function(e,recursive) {if(e.nodeName=="#text") {return document.createTextNode(e.data);} -if(!e.tagName)return false;var newNode=document.createElement(e.tagName);if(!newNode)return false;var properties=['class','style','name','type','valign','border','width','height','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];for(var i in properties) +if(!e.tagName)return false;var newNode=document.createElement(e.tagName);if(!newNode)return false;if(SUGAR.isIE7&&e.tagName.toLowerCase()=='input') +{var properties=['class','style','name','type','valign','border','width','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];}else{var properties=['class','style','name','type','valign','border','width','height','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];} +for(var i in properties) {if(e[properties[i]]) {if((properties[i]!='style'||!SUGAR.isIE)&&(properties[i]!='href'||e.tagName=='a'||e.tagName=='iframe')) newNode[properties[i]]=e[properties[i]];}} diff --git a/include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php b/include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php index c5d48073..8116f704 100644 --- a/include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php +++ b/include/SugarFields/Fields/Collection/ViewSugarFieldCollection.php @@ -368,7 +368,7 @@ FRA; $qsd->setFormName($this->form_name); for($i=0; $i<$this->numFields; $i++){ $name1 = "{$this->form_name}_{$this->name}_collection_{$i}"; - if(!$this->skipModuleQuickSearch && preg_match('/(Campaigns|Teams|Users|Contacts|Accounts)/si', $this->related_module, $matches)) { + if(!$this->skipModuleQuickSearch && preg_match('/(Campaigns|Teams|Users|Accounts)/si', $this->related_module, $matches)) { if($matches[0] == 'Users'){ $sqs_objects[$name1] = $qsd->getQSUser(); } else if($matches[0] == 'Campaigns') { @@ -390,9 +390,8 @@ FRA; $shippingKey = isset($this->displayParams['shippingKey']) ? $this->displayParams['shippingKey'] : null; $additionalFields = isset($this->displayParams['additionalFields']) ? $this->displayParams['additionalFields'] : null; $sqs_objects[$name1] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); - } else if($matches[0] == 'Contacts'){ - $sqs_objects[$name1] = $qsd->getQSContact($name1, "id_".$name1); - } + } + $temp_array = array('field_list'=>array(),'populate_list'=>array()); foreach($sqs_objects[$name1]['field_list'] as $k=>$v){ if(!in_array($v, array('name','id'))){ diff --git a/include/SugarFields/Fields/File/SugarFieldFile.js b/include/SugarFields/Fields/File/SugarFieldFile.js index 79f0b7ae..cf39aa02 100644 --- a/include/SugarFields/Fields/File/SugarFieldFile.js +++ b/include/SugarFields/Fields/File/SugarFieldFile.js @@ -33,7 +33,9 @@ * "Powered by SugarCRM". ********************************************************************************/ if(typeof(SUGAR.field)=='undefined'){SUGAR.field=new Object();} -if(typeof(SUGAR.field.file)=='undefined'){SUGAR.field.file={deleteAttachment:function(elemBaseName,docTypeName,elem){ajaxStatus.showStatus(SUGAR.language.get("Notes","LBL_REMOVING_ATTACHMENT"));elem.form.deleteAttachment.value=1;elem.form.action.value="EditView";SUGAR.dashlets.postForm(elem.form,SUGAR.field.file.deleteAttachmentCallbackGen(elemBaseName,docTypeName));elem.form.deleteAttachment.value=0;elem.form.action.value="";},deleteAttachmentCallbackGen:function(elemBaseName,docTypeName){return function(text){if(text=='true'){document.getElementById(elemBaseName+'_new').style.display='';ajaxStatus.hideStatus();document.getElementById(elemBaseName+'_old').innerHTML='';document.getElementById(docTypeName).disabled=false;document.getElementById(elemBaseName).value='';}else{document.getElementById(elemBaseName+'_new').style.display='none';ajaxStatus.flashStatus(SUGAR.language.get('Notes','ERR_REMOVING_ATTACHMENT'),2000);}}},checkEapiLogin:function(res){var failedLogins=JSON.parse(res.responseText);if(failedLogins.length==0){return;} +if(typeof(SUGAR.field.file)=='undefined'){SUGAR.field.file={deleteAttachment:function(elemBaseName,docTypeName,elem){ajaxStatus.showStatus(SUGAR.language.get("app_strings","LBL_REMOVING_ATTACHMENT"));elem.form.deleteAttachment.value=1;elem.form.action.value="EditView";var callback=SUGAR.field.file.deleteAttachmentCallbackGen(elemBaseName,docTypeName);var success=function(data){if(data){callback(data.responseText);}} +YAHOO.util.Connect.setForm(elem.form);var cObj=YAHOO.util.Connect.asyncRequest('POST','index.php',{success:success,failure:success});elem.form.deleteAttachment.value=0;elem.form.action.value="";},deleteAttachmentCallbackGen:function(elemBaseName,docTypeName){return function(text){if(text=='true'){document.getElementById(elemBaseName+'_new').style.display='';ajaxStatus.hideStatus();document.getElementById(elemBaseName+'_old').innerHTML='';if(docTypeName){document.getElementById(docTypeName).disabled=false;} +document.getElementById(elemBaseName).value='';}else{document.getElementById(elemBaseName+'_new').style.display='none';ajaxStatus.flashStatus(SUGAR.language.get('app_strings','ERR_REMOVING_ATTACHMENT'),2000);}}},checkEapiLogin:function(res){var failedLogins=JSON.parse(res.responseText);if(failedLogins.length==0){return;} for(var idx in failedLogins){if(confirm(failedLogins[idx].label)){window.open(failedLogins[idx].checkURL,'EAPM_CHECK_'+idx);}else{document.getElementById(res.argument.docTypeName).value='Sugar';document.getElementById(res.argument.docTypeName).onchange();}}},setupEapiShowHide:function(elemBaseName,docTypeName,formName){var externalSearchToggle=function(){var moreElem=document.getElementById(elemBaseName+"_more");var hideMore=(moreElem.style.display=='none');if(hideMore){moreElem.style.display='';document.getElementById(elemBaseName+'_less').style.display='none';document.getElementById(elemBaseName+'_remoteNameSpan').style.display='none';document.getElementById(elemBaseName+'_file').disabled=false;}else{moreElem.style.display='none';document.getElementById(elemBaseName+'_less').style.display='';document.getElementById(elemBaseName+'_remoteNameSpan').style.display='';document.getElementById(elemBaseName+'_file').disabled=true;}} var showHideFunc=function(){var docShowHideElem=document.getElementById(elemBaseName+"_externalApiSelector");var dropdownValue=document.getElementById(docTypeName).value;if(typeof(SUGAR.eapm)!='undefined'&&typeof(SUGAR.eapm[dropdownValue])!='undefined'&&typeof(SUGAR.eapm[dropdownValue].docSearch)!='undefined'&&SUGAR.eapm[dropdownValue].docSearch){docShowHideElem.style.display='';YAHOO.util.Connect.asyncRequest('GET','index.php?module=EAPM&action=CheckLogins&to_pdf=1&api='+dropdownValue,{success:SUGAR.field.file.checkEapiLogin,argument:{'elemBaseName':elemBaseName,'docTypeName':docTypeName}});YAHOO.util.Connect.asyncRequest('GET','index.php?module=EAPM&action=flushFileCache&to_pdf=1&api='+dropdownValue,{});}else{docShowHideElem.style.display='none';document.getElementById(elemBaseName+'_file').disabled=false;} sqs_objects[formName+"_"+elemBaseName+"_remoteName"].api=dropdownValue;var secLevelBoxElem=document.getElementById(elemBaseName+'_securityLevelBox');var secLevelElem=document.getElementById(elemBaseName+'_securityLevel');secLevelElem.options.length=0;if(SUGAR.eapm[dropdownValue]&&SUGAR.eapm[dropdownValue].sharingOptions){var opts=SUGAR.eapm[dropdownValue].sharingOptions;var i=0;for(idx in opts){secLevelElem.options[i]=new Option(SUGAR.language.get('app_strings',opts[idx]),idx,false,false);i++;} diff --git a/include/SugarFields/Fields/File/SugarFieldFile.php b/include/SugarFields/Fields/File/SugarFieldFile.php index 9d17fcfb..1f0ae4d6 100644 --- a/include/SugarFields/Fields/File/SugarFieldFile.php +++ b/include/SugarFields/Fields/File/SugarFieldFile.php @@ -88,8 +88,7 @@ class SugarFieldFile extends SugarFieldBase { $upload_file = new UploadFile($prefix . $field . '_file'); //remove file - if (isset($_REQUEST['remove_file_' . $field]) && $params['remove_file_' . $field] == 1) - { + if (isset($_REQUEST['remove_file_' . $field]) && $params['remove_file_' . $field] == 1) { $upload_file->unlink_file($bean->$field); $bean->$field=""; } @@ -103,10 +102,30 @@ class SugarFieldFile extends SugarFieldBase { $move=true; } - if (isset($params['isDuplicate']) && $params['isDuplicate'] == true && $params['isDuplicate'] != 'false' ) { - // It's a duplicate + if (!empty($params['isDuplicate']) && $params['isDuplicate'] == 'true' ) { + // This way of detecting duplicates is used in Notes $old_id = $params['relate_id']; } + if (!empty($params['duplicateSave']) && !empty($params['duplicateId']) ) { + // It's a duplicate + $old_id = $params['duplicateId']; + } + + // Backwards compatibility for fields that still use customCode to handle the file uploads + if ( !$move && empty($old_id) && isset($_FILES['uploadfile']) ) { + $upload_file = new UploadFile('uploadfile'); + if ( $upload_file->confirm_upload() ) { + $bean->$field = $upload_file->get_stored_file_name(); + $bean->file_mime_type = $upload_file->mime_type; + $bean->file_ext = $upload_file->file_ext; + $move=true; + + } + } else if ( !$move && !empty($old_id) && isset($_REQUEST['uploadfile']) && !isset($_REQUEST[$prefix . $field . '_file']) ) { + // I think we are duplicating a backwards compatibility module. + $upload_file = new UploadFile('uploadfile'); + } + if (empty($bean->id)) { $bean->id = create_guid(); diff --git a/include/SugarFields/Fields/Iframe/DetailView.tpl b/include/SugarFields/Fields/Iframe/DetailView.tpl index b6924a96..f190f212 100644 --- a/include/SugarFields/Fields/Iframe/DetailView.tpl +++ b/include/SugarFields/Fields/Iframe/DetailView.tpl @@ -39,10 +39,10 @@ {{if $vardef.gen}} {sugar_replace_vars subject='{{$vardef.default|replace:'{':'['|replace:'}':']'}}' assign='link'} {{/if}} -{if !empty($link) && $link != "http://"} +{if !empty($link) && $link != "http://" && $link != "https://"} {capture name=getStart assign=linkStart}{$link|substr:0:7}{/capture} - - + + {/if} {{if !empty($displayParams.enableConnectors)}} {{sugarvar_connector view='DetailView'}} diff --git a/include/SugarObjects/VardefManager.php b/include/SugarObjects/VardefManager.php index 25dd08f2..b0eb1f7d 100644 --- a/include/SugarObjects/VardefManager.php +++ b/include/SugarObjects/VardefManager.php @@ -35,7 +35,7 @@ ********************************************************************************/ - + class VardefManager{ static $custom_disabled_modules = array(); static $linkFields; @@ -88,7 +88,7 @@ class VardefManager{ $custom_disabled_modules[$module] = true; } } - + static function addTemplate($module, $object, $template, $object_name=false){ if($template == 'default')$template = 'basic'; $templates = array(); @@ -100,7 +100,7 @@ class VardefManager{ }else{ $table_name = strtolower($module); } - + if(empty($templates[$template])){ $path = 'include/SugarObjects/templates/' . $template . '/vardefs.php'; if(file_exists($path)){ @@ -125,28 +125,28 @@ class VardefManager{ // maintain a record of this objects inheritance from the SugarObject templates... $GLOBALS['dictionary'][$object]['templates'][ $template ] = $template ; } - + } - + /** * Save the dictionary object to the cache * @param string $module the name of the module * @param string $object the name of the object */ static function saveCache($module,$object, $additonal_objects= array()){ - + $file = create_cache_directory('modules/' . $module . '/' . $object . 'vardefs.php'); write_array_to_file('GLOBALS["dictionary"]["'. $object . '"]',$GLOBALS['dictionary'][$object], $file); if ( is_readable($file) ) { include($file); } - + // put the item in the sugar cache. $key = "VardefManager.$module.$object"; $data = $GLOBALS['dictionary'][$object]; sugar_cache_put($key,$data); } - + /** * clear out the vardef cache. If we receive a module name then just clear the vardef cache for that module * otherwise clear out the cache for every module @@ -166,7 +166,7 @@ class VardefManager{ } } } - + /** * PRIVATE function used within clearVardefCache so we do not repeat logic * @param string module_dir the module_dir to clear @@ -174,11 +174,11 @@ class VardefManager{ */ static function _clearCache($module_dir = '', $object_name = ''){ if(!empty($module_dir) && !empty($object_name)){ - + if($object_name == 'aCase') { $object_name = 'Case'; } - + $file = $GLOBALS['sugar_config']['cache_dir'].'modules/'.$module_dir.'/' . $object_name . 'vardefs.php'; if(file_exists($file)){ unlink($file); @@ -187,11 +187,11 @@ class VardefManager{ } } } - + /** * Given a module, search all of the specified locations, and any others as specified * in order to refresh the cache file - * + * * @param string $module the given module we want to load the vardefs for * @param string $object the given object we wish to load the vardefs for * @param array $additional_search_paths an array which allows a consumer to pass in additional vardef locations to search @@ -213,7 +213,7 @@ class VardefManager{ //search a predefined set of locations for the vardef files foreach($vardef_paths as $path){ if(file_exists($path)){ - + require($path); } } @@ -224,7 +224,7 @@ class VardefManager{ $df = new DynamicField ($module) ; $df->buildCache($module); } - + //great! now that we have loaded all of our vardefs. //let's go save them to the cache file. if(!empty($GLOBALS['dictionary'][$object])) { @@ -232,7 +232,27 @@ class VardefManager{ } } - + + /** + * apply global "account_required" setting if possible + * @param array $vardef + * @return array updated $vardef + */ + static function applyGlobalAccountRequirements($vardef) + { + if (isset($GLOBALS['sugar_config']['require_accounts'])) { + if (isset($vardef['fields']) && + isset($vardef['fields']['account_name']) && + isset($vardef['fields']['account_name']['required'])) + { + $vardef['fields']['account_name']['required'] = $GLOBALS['sugar_config']['require_accounts']; + } + + } + + return $vardef; + } + /** * load the vardefs for a given module and object * @param string $module the given module we want to load the vardefs for @@ -248,17 +268,19 @@ class VardefManager{ } // Retrieve the vardefs from cache. $key = "VardefManager.$module.$object"; - + if(!$refresh) { $return_result = sugar_cache_retrieve($key); + $return_result = self::applyGlobalAccountRequirements($return_result); + if(!empty($return_result)) { $GLOBALS['dictionary'][$object] = $return_result; return; } } - + // Some of the vardefs do not correctly define dictionary as global. Declare it first. global $dictionary; if(empty($GLOBALS['dictionary'][$object]) || $refresh){ @@ -267,7 +289,7 @@ class VardefManager{ if($refresh || !file_exists($GLOBALS['sugar_config']['cache_dir'].'modules/'. $module . '/' . $object . 'vardefs.php')){ VardefManager::refreshVardefs($module, $object); } - + //at this point we should have the cache/modules/... file //which was created from the refreshVardefs so let's try to load it. if(file_exists($GLOBALS['sugar_config']['cache_dir'].'modules/'. $module . '/' . $object . 'vardefs.php')) @@ -276,8 +298,10 @@ class VardefManager{ include_once($GLOBALS['sugar_config']['cache_dir'].'modules/'. $module . '/' . $object . 'vardefs.php'); } // now that we hae loaded the data from disk, put it in the cache. - if(!empty($GLOBALS['dictionary'][$object])) - sugar_cache_put($key,$GLOBALS['dictionary'][$object]); + if(!empty($GLOBALS['dictionary'][$object])) { + $GLOBALS['dictionary'][$object] = self::applyGlobalAccountRequirements($GLOBALS['dictionary'][$object]); + sugar_cache_put($key,$GLOBALS['dictionary'][$object]); + } } } } diff --git a/include/SugarObjects/templates/file/vardefs.php b/include/SugarObjects/templates/file/vardefs.php index f5416305..39673882 100644 --- a/include/SugarObjects/templates/file/vardefs.php +++ b/include/SugarObjects/templates/file/vardefs.php @@ -95,6 +95,7 @@ if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); 'vname' => 'LBL_FILE_UPLOAD', 'type' => 'file', 'source' => 'non-db', + 'noChange' => true, ), 'active_date' => diff --git a/include/SugarObjects/templates/person/Person.php b/include/SugarObjects/templates/person/Person.php index 96576fec..e39b7fcf 100644 --- a/include/SugarObjects/templates/person/Person.php +++ b/include/SugarObjects/templates/person/Person.php @@ -42,6 +42,7 @@ require_once('include/SugarObjects/templates/basic/Basic.php'); class Person extends Basic { var $picture; + var $createLocaleFormattedName = true; function Person(){ parent::Basic(); @@ -62,14 +63,19 @@ class Person extends Basic function _create_proper_name_field() { global $locale, $app_list_strings; - // Bug 38648 - If the given saluation doesn't exist in the dropdown, don't display it as part of the full name - $salutation = ''; - if(isset($this->field_defs['salutation']['options']) - && isset($app_list_strings[$this->field_defs['salutation']['options']]) - && isset($app_list_strings[$this->field_defs['salutation']['options']][$this->salutation]) ) { - $salutation = $app_list_strings[$this->field_defs['salutation']['options']][$this->salutation]; - } - $full_name = $locale->getLocaleFormattedName($this->first_name, $this->last_name, $salutation, $this->title); + if($this->createLocaleFormattedName) + { + // Bug 38648 - If the given saluation doesn't exist in the dropdown, don't display it as part of the full name + $salutation = ''; + if(isset($this->field_defs['salutation']['options']) + && isset($app_list_strings[$this->field_defs['salutation']['options']]) + && isset($app_list_strings[$this->field_defs['salutation']['options']][$this->salutation]) ) { + $salutation = $app_list_strings[$this->field_defs['salutation']['options']][$this->salutation]; + } + $full_name = $locale->getLocaleFormattedName($this->first_name, $this->last_name, $salutation, $this->title); + } else { + $full_name = $locale->getLocaleFormattedName($this->first_name, $this->last_name); + } $this->name = $full_name; $this->full_name = $full_name; //used by campaigns } diff --git a/include/TemplateHandler/TemplateHandler.php b/include/TemplateHandler/TemplateHandler.php index 386ca2ab..6b15bf0a 100644 --- a/include/TemplateHandler/TemplateHandler.php +++ b/include/TemplateHandler/TemplateHandler.php @@ -321,7 +321,7 @@ class TemplateHandler { $field = $f; $name = $qsd->form_name . '_' . $field['name']; if($field['type'] == 'relate' && isset($field['module']) && preg_match('/_name$|_c$/si',$name)) { - if(preg_match('/^(Campaigns|Teams|Users|Contacts|Accounts)$/si', $field['module'], $matches)) { + if(preg_match('/^(Campaigns|Teams|Users|Accounts)$/si', $field['module'], $matches)) { if($matches[0] == 'Campaigns') { $sqs_objects[$name.'_'.$parsedView] = $qsd->getQSCampaigns(); @@ -348,8 +348,6 @@ class TemplateHandler { $shippingKey = isset($f['displayParams']['shippingKey']) ? $f['displayParams']['shippingKey'] : null; $additionalFields = isset($f['displayParams']['additionalFields']) ? $f['displayParams']['additionalFields'] : null; $sqs_objects[$name.'_'.$parsedView] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); - } else if($matches[0] == 'Contacts'){ - $sqs_objects[$name.'_'.$parsedView] = $qsd->getQSContact($field['name'], $field['id_name']); } } else { $sqs_objects[$name.'_'.$parsedView] = $qsd->getQSParent($field['module']); @@ -386,7 +384,7 @@ class TemplateHandler { if($field['type'] == 'relate' && isset($field['module']) && (preg_match('/_name$|_c$/si',$name) || !empty($field['quicksearch']))) { - if(!preg_match('/_c$/si',$name) && preg_match('/^(Campaigns|Teams|Users|Contacts|Accounts)$/si', $field['module'], $matches)) { + if(!preg_match('/_c$/si',$name) && preg_match('/^(Campaigns|Teams|Users|Accounts)$/si', $field['module'], $matches)) { if($matches[0] == 'Campaigns') { $sqs_objects[$name] = $qsd->getQSCampaigns(); @@ -417,11 +415,6 @@ class TemplateHandler { $shippingKey = SugarArray::staticGet($f, 'displayParams.shippingKey'); $additionalFields = SugarArray::staticGet($f, 'displayParams.additionalFields'); $sqs_objects[$name] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); - } else if($matches[0] == 'Contacts'){ - $sqs_objects[$name] = $qsd->getQSContact($field['name'], $field['id_name']); - if(preg_match('/_c$/si',$name) || !empty($field['quicksearch'])){ - $sqs_objects[$name]['field_list'] = array('salutation', 'first_name', 'last_name', 'id'); - } } } else { $sqs_objects[$name] = $qsd->getQSParent($field['module']); diff --git a/include/connectors/sources/default/source.php b/include/connectors/sources/default/source.php index 5924310f..e7b61580 100644 --- a/include/connectors/sources/default/source.php +++ b/include/connectors/sources/default/source.php @@ -72,7 +72,12 @@ abstract class source{ require("modules/Connectors/connectors/sources/{$dir}/mapping.php"); } $this->_mapping = $mapping; - } + } + + public function saveMappingHook($mapping) { + // Most classes don't care that the mapping has changed, but this is here if they do. + return; + } public function loadVardefs() { $class = get_class($this); @@ -165,7 +170,13 @@ abstract class source{ } } } - + + // Helper function for the settings panels + public function filterAllowedModules( $moduleList ) { + // Most modules can connect to everything, no further filtering necessary + return $moduleList; + } + ////////////// GETTERS and SETTERS //////////////////// public function getMapping(){ return $this->_mapping; diff --git a/include/database/MysqliManager.php b/include/database/MysqliManager.php index a6530a73..1ab11fe4 100644 --- a/include/database/MysqliManager.php +++ b/include/database/MysqliManager.php @@ -244,6 +244,7 @@ class MysqliManager extends MysqlManager if ($encode && $this->encode && is_array($row)) return array_map('to_html', $row); + if($row == null) $row = false; //Make sure MySQLi driver results are consistent with other database drivers return $row; } diff --git a/include/dir_inc.php b/include/dir_inc.php index 0c4b3593..5682fbce 100644 --- a/include/dir_inc.php +++ b/include/dir_inc.php @@ -101,7 +101,8 @@ function rmdir_recursive( $path ){ $status = true; $d = dir( $path ); - while( $f = $d->read() ){ + + while(($f = $d->read()) !== false){ if( $f == "." || $f == ".." ){ continue; } diff --git a/include/externalAPI/ExternalAPIFactory.php b/include/externalAPI/ExternalAPIFactory.php index 8db144bc..60c74ed4 100644 --- a/include/externalAPI/ExternalAPIFactory.php +++ b/include/externalAPI/ExternalAPIFactory.php @@ -154,7 +154,7 @@ class ExternalAPIFactory rename('cache/include/externalAPI.cache-tmp.js','cache/include/externalAPI.cache.js'); - if (is_array($GLOBALS['app_list_strings']['extapi_meeting_password']) && count(array_diff($meetingPasswordList,$GLOBALS['app_list_strings']['extapi_meeting_password'])) != 0 ) { + if (!isset($GLOBALS['app_list_strings']['extapi_meeting_password']) || (is_array($GLOBALS['app_list_strings']['extapi_meeting_password']) && count(array_diff($meetingPasswordList,$GLOBALS['app_list_strings']['extapi_meeting_password'])) != 0 )) { // Our meeting password list is different... we need to do something about this. require_once('modules/Administration/Common.php'); $languages = get_languages(); diff --git a/include/formbase.php b/include/formbase.php index 1e513b0f..c035567b 100644 --- a/include/formbase.php +++ b/include/formbase.php @@ -132,19 +132,36 @@ function populateFromPost($prefix, &$focus, $skipRetrieve=false) { } +function add_hidden_elements($key, $value) { + + $elements = ''; + + // if it's an array, we need to loop into the array and use square brackets [] + if (is_array($value)) { + foreach ($value as $k=>$v) { + $elements .= "\n"; + } + } else { + $elements = "\n"; + } + + return $elements; +} + + function getPostToForm($ignore='', $isRegularExpression=false) { $fields = ''; if(!empty($ignore) && $isRegularExpression) { foreach ($_POST as $key=>$value){ if(!preg_match($ignore, $key)) { - $fields.= "\n"; + $fields .= add_hidden_elements($key, $value); } } } else { foreach ($_POST as $key=>$value){ if($key != $ignore) { - $fields.= "\n"; + $fields .= add_hidden_elements($key, $value); } } } @@ -206,7 +223,7 @@ function handleRedirect($return_id='', $return_module='') // END Meeting Integration } // if we create a new record "Save", we want to redirect to the DetailView - else if($_REQUEST['action'] == "Save" + else if(isset($_REQUEST['action']) && $_REQUEST['action'] == "Save" && $_REQUEST['return_module'] != 'Activities' && $_REQUEST['return_module'] != 'Home' && $_REQUEST['return_module'] != 'Forecasts' diff --git a/include/generic/LayoutManager.php b/include/generic/LayoutManager.php index 06ca0fc3..48230701 100644 --- a/include/generic/LayoutManager.php +++ b/include/generic/LayoutManager.php @@ -54,17 +54,17 @@ class LayoutManager // set a sane default for context $this->defs['context'] = 'Detail'; $this->DBHelper = $GLOBALS['db']->getHelper(); - } + } function setAttribute($key,$value) { $this->defs[$key] = $value; - } + } function setAttributePtr($key,&$value) { $this->defs[$key] = $value; - } + } function getAttribute($key) { @@ -74,7 +74,7 @@ class LayoutManager } else { return null; } - } + } // Take the class name from the widget definition and use the class to look it up // $use_default will default classes to SugarWidgetFieldxxxxx @@ -126,7 +126,7 @@ class LayoutManager 'access_key'=>'LBL_NEW_BUTTON_KEY', 'form_value'=>'LNK_NEW_NOTE', 'ACL'=>'edit', - ), + ), 'SugarWidgetSubPanelTopCreateContactAccountButton' => array( 'widget_class'=>'SugarWidgetSubPanelTopButton', 'module'=>'Contacts', @@ -166,11 +166,11 @@ class LayoutManager 'document_name' => 'document_name', 'document_revision' => 'latest_revision', 'document_filename' => 'filename', - 'document_revision_id' => 'document_revision_id', + 'document_revision_id' => 'document_revision_id', ), 'ACL'=>'edit', ), - + 'SugarWidgetSubPanelTopCreateDirectReport' => array( 'widget_class'=>'SugarWidgetSubPanelTopButton', 'module'=>'Contacts', @@ -207,11 +207,11 @@ class LayoutManager 'parent_type'=>'ProspectList', 'child_id'=>'target_id', 'link_attribute'=>'target_type', - 'link_type'=>'polymorphic', //polymorphic or default + 'link_type'=>'polymorphic', //polymorphic or default ) ), - ); - + ); + $fieldDef = $this->getFieldDef($widget_def); if(!empty($fieldDef) && !empty($fieldDef['type']) && strtolower(trim($fieldDef['type'])) == 'multienum'){ $widget_def['widget_class'] = 'Fieldmultienum'; @@ -219,32 +219,35 @@ class LayoutManager if(!empty($fieldDef) && !empty($fieldDef['type']) && strtolower(trim($fieldDef['type'])) == 'bool'){ $widget_def['widget_class'] = 'Fieldbool'; } - - if($use_default) { - switch($widget_def['name']) { - case 'assigned_user_id': - $widget_def['widget_class'] = 'Fielduser_name'; - break; - default: - if ( isset($widget_def['type']) ) { - $widget_def['widget_class'] = 'Field' . $widget_def['type']; - } - else { - $widget_def['widget_class'] = 'Field' . $this->DBHelper->getFieldType($widget_def); - } + + if($use_default) { + switch($widget_def['name']) { + case 'assigned_user_id': + //bug 39170 - begin + case 'created_by': + case 'modified_user_id': + //bug 39170 - end + $widget_def['widget_class'] = 'Fielduser_name'; + break; + default: + if ( isset($widget_def['type']) ) { + $widget_def['widget_class'] = 'Field' . $widget_def['type']; + } else { + $widget_def['widget_class'] = 'Field' . $this->DBHelper->getFieldType($widget_def); + } } - } - + } + if(!empty($widget_def['name']) && $widget_def['name'] == 'team_set_id'){ $widget_def['widget_class'] = 'Fieldteam_set_id'; } - + if(empty($widget_def['widget_class'])) { // Default the class to SugarWidgetField $class_name = $this->widget_prefix.$this->default_widget_name; } - else + else { $class_name = $this->widget_prefix.$widget_def['widget_class']; } @@ -253,7 +256,7 @@ class LayoutManager if(!empty($class_map[$class_name])) { if (empty($class_map[$class_name]['widget_class'])) { - $widget = new SugarWidgetSubPanelTopButton($class_map[$class_name]); + $widget = new SugarWidgetSubPanelTopButton($class_map[$class_name]); } else { if (!class_exists($class_map[$class_name]['widget_class'])) { @@ -262,11 +265,11 @@ class LayoutManager $widget = new $class_map[$class_name]['widget_class']($class_map[$class_name]); } - + return $widget; } - + // At this point, we have a class name and we do not have a valid class defined. if(!class_exists($class_name)) { @@ -276,14 +279,14 @@ class LayoutManager require_once('custom/include/generic/SugarWidgets/'.$class_name.'.php'); else if (file_exists('include/generic/SugarWidgets/'.$class_name.'.php')) require_once('include/generic/SugarWidgets/'.$class_name.'.php'); - + if(!class_exists($class_name)) { // If we still do not have a class, oops.... die("LayoutManager: Class not found:".$class_name); } } - + $widget = new $class_name($this); // cache disabled $this->getClassFromCache($class_name); return $widget; } @@ -296,23 +299,23 @@ class LayoutManager $beanCache[$widget_def['module']] = new $GLOBALS['beanList'][$widget_def['module']](); } $bean = $beanCache[$widget_def['module']]; - if(!empty($widget_def['name']) && !empty($bean->field_name_map) &&!empty($bean->field_name_map[$widget_def['name']]) ){ + if(!empty($widget_def['name']) && !empty($bean->field_name_map) &&!empty($bean->field_name_map[$widget_def['name']]) ){ return $bean->field_name_map[$widget_def['name']]; } } - + return null; } - + function widgetDisplay($widget_def, $use_default = false) { $theclass = $this->getClassFromWidgetDef($widget_def, $use_default); $label = isset($widget_def['module']) ? $widget_def['module'] : ''; if (is_subclass_of($theclass, 'SugarWidgetSubPanelTopButton')) { - $label = $theclass->get_subpanel_relationship_name($widget_def); + $label = $theclass->get_subpanel_relationship_name($widget_def); } $theclass->setWidgetId($label); - + //#27426 $fieldDef = $this->getFieldDef($widget_def); if(!empty($fieldDef) && !empty($fieldDef['type']) && strtolower(trim($fieldDef['type'])) == 'multienum'){ @@ -320,9 +323,9 @@ class LayoutManager $widget_def['fields']['module'] = $label; } //end - + return $theclass->display($widget_def); - } + } function widgetQuery($widget_def, $use_default = false) { @@ -330,14 +333,14 @@ class LayoutManager // _pp($theclass); return $theclass->query($widget_def); } - + // display an input field // module is the parent module of the def function widgetDisplayInput($widget_def, $use_default = false) { $theclass = $this->getClassFromWidgetDef($widget_def, $use_default); return $theclass->displayInput($widget_def); - } + } } ?> diff --git a/include/javascript/sugar_3.js b/include/javascript/sugar_3.js index 4b8aba46..ef569ac1 100644 --- a/include/javascript/sugar_3.js +++ b/include/javascript/sugar_3.js @@ -34,8 +34,8 @@ ********************************************************************************/ if(typeof(SUGAR)=="undefined")SUGAR={};if(typeof(SUGAR.themes)=="undefined")SUGAR.themes={};SUGAR.sugarHome={};SUGAR.subpanelUtils={};SUGAR.ajaxStatusClass={};SUGAR.tabChooser={};SUGAR.util={};SUGAR.savedViews={};SUGAR.dashlets={};SUGAR.unifiedSearchAdvanced={};SUGAR.searchForm={};SUGAR.language={};SUGAR.Studio={};SUGAR.contextMenu={};SUGAR.config={};var nameIndex=0;var typeIndex=1;var requiredIndex=2;var msgIndex=3;var jstypeIndex=5;var minIndex=10;var maxIndex=11;var altMsgIndex=15;var compareToIndex=7;var arrIndex=12;var operatorIndex=13;var allowblank=8;var validate=new Array();var maxHours=24;var requiredTxt='Missing Required Field:' var invalidTxt='Invalid Value:' -var secondsSinceLoad=0;var inputsWithErrors=new Array();var tabsWithErrors=new Array();var lastSubmitTime=0;var alertList=new Array();var oldStartsWith='';function isSupportedIE(){var userAgent=navigator.userAgent.toLowerCase();if(userAgent.indexOf("msie")!=-1&&userAgent.indexOf("mac")==-1&&userAgent.indexOf("opera")==-1){var version=navigator.appVersion.match(/MSIE (.\..)/)[1];if(version>=5.5){return true;}else{return false;}}} -SUGAR.isIE=isSupportedIE();var isSafari=(navigator.userAgent.toLowerCase().indexOf('safari')!=-1);RegExp.escape=function(text){if(!arguments.callee.sRE){var specials=['/','.','*','+','?','|','(',')','[',']','{','}','\\'];arguments.callee.sRE=new RegExp('(\\'+specials.join('|\\')+')','g');} +var secondsSinceLoad=0;var inputsWithErrors=new Array();var tabsWithErrors=new Array();var lastSubmitTime=0;var alertList=new Array();var oldStartsWith='';function isSupportedIE(){var userAgent=navigator.userAgent.toLowerCase();if(userAgent.indexOf("msie")!=-1&&userAgent.indexOf("mac")==-1&&userAgent.indexOf("opera")==-1){var version=navigator.appVersion.match(/MSIE (.\..)/)[1];if(version>=5.5&&version<9){return true;}else{return false;}}} +SUGAR.isIE=isSupportedIE();SUGAR.isIE7=(navigator.userAgent.toLowerCase().indexOf('msie 7')!=-1);var isSafari=(navigator.userAgent.toLowerCase().indexOf('safari')!=-1);RegExp.escape=function(text){if(!arguments.callee.sRE){var specials=['/','.','*','+','?','|','(',')','[',']','{','}','\\'];arguments.callee.sRE=new RegExp('(\\'+specials.join('|\\')+')','g');} return text.replace(arguments.callee.sRE,'\\$1');} function addAlert(type,name,subtitle,description,time,redirect){var addIndex=alertList.length;alertList[addIndex]=new Array();alertList[addIndex]['name']=name;alertList[addIndex]['type']=type;alertList[addIndex]['subtitle']=subtitle;alertList[addIndex]['description']=description.replace(/
/gi,"\n").replace(/&/gi,'&').replace(/</gi,'<').replace(/>/gi,'>').replace(/'/gi,'\'').replace(/"/gi,'"');alertList[addIndex]['time']=time;alertList[addIndex]['done']=0;alertList[addIndex]['redirect']=redirect;} function checkAlerts(){secondsSinceLoad+=1;var mj=0;var alertmsg='';for(mj=0;mj-1){alertmsg=alertList[mj]['type']+":"+alertList[mj]['name']+"\n"+alertList[mj]['subtitle']+"\n"+alertList[mj]['description']+"\n\n";alertList[mj]['done']=1;if(alertList[mj]['redirect']==''){alert(alertmsg);} diff --git a/include/javascript/sugar_grp1.js b/include/javascript/sugar_grp1.js index 72c34a0c..c2747888 100644 --- a/include/javascript/sugar_grp1.js +++ b/include/javascript/sugar_grp1.js @@ -34,8 +34,8 @@ ********************************************************************************/ if(typeof(SUGAR)=="undefined")SUGAR={};if(typeof(SUGAR.themes)=="undefined")SUGAR.themes={};SUGAR.sugarHome={};SUGAR.subpanelUtils={};SUGAR.ajaxStatusClass={};SUGAR.tabChooser={};SUGAR.util={};SUGAR.savedViews={};SUGAR.dashlets={};SUGAR.unifiedSearchAdvanced={};SUGAR.searchForm={};SUGAR.language={};SUGAR.Studio={};SUGAR.contextMenu={};SUGAR.config={};var nameIndex=0;var typeIndex=1;var requiredIndex=2;var msgIndex=3;var jstypeIndex=5;var minIndex=10;var maxIndex=11;var altMsgIndex=15;var compareToIndex=7;var arrIndex=12;var operatorIndex=13;var allowblank=8;var validate=new Array();var maxHours=24;var requiredTxt='Missing Required Field:' var invalidTxt='Invalid Value:' -var secondsSinceLoad=0;var inputsWithErrors=new Array();var tabsWithErrors=new Array();var lastSubmitTime=0;var alertList=new Array();var oldStartsWith='';function isSupportedIE(){var userAgent=navigator.userAgent.toLowerCase();if(userAgent.indexOf("msie")!=-1&&userAgent.indexOf("mac")==-1&&userAgent.indexOf("opera")==-1){var version=navigator.appVersion.match(/MSIE (.\..)/)[1];if(version>=5.5){return true;}else{return false;}}} -SUGAR.isIE=isSupportedIE();var isSafari=(navigator.userAgent.toLowerCase().indexOf('safari')!=-1);RegExp.escape=function(text){if(!arguments.callee.sRE){var specials=['/','.','*','+','?','|','(',')','[',']','{','}','\\'];arguments.callee.sRE=new RegExp('(\\'+specials.join('|\\')+')','g');} +var secondsSinceLoad=0;var inputsWithErrors=new Array();var tabsWithErrors=new Array();var lastSubmitTime=0;var alertList=new Array();var oldStartsWith='';function isSupportedIE(){var userAgent=navigator.userAgent.toLowerCase();if(userAgent.indexOf("msie")!=-1&&userAgent.indexOf("mac")==-1&&userAgent.indexOf("opera")==-1){var version=navigator.appVersion.match(/MSIE (.\..)/)[1];if(version>=5.5&&version<9){return true;}else{return false;}}} +SUGAR.isIE=isSupportedIE();SUGAR.isIE7=(navigator.userAgent.toLowerCase().indexOf('msie 7')!=-1);var isSafari=(navigator.userAgent.toLowerCase().indexOf('safari')!=-1);RegExp.escape=function(text){if(!arguments.callee.sRE){var specials=['/','.','*','+','?','|','(',')','[',']','{','}','\\'];arguments.callee.sRE=new RegExp('(\\'+specials.join('|\\')+')','g');} return text.replace(arguments.callee.sRE,'\\$1');} function addAlert(type,name,subtitle,description,time,redirect){var addIndex=alertList.length;alertList[addIndex]=new Array();alertList[addIndex]['name']=name;alertList[addIndex]['type']=type;alertList[addIndex]['subtitle']=subtitle;alertList[addIndex]['description']=description.replace(/
/gi,"\n").replace(/&/gi,'&').replace(/</gi,'<').replace(/>/gi,'>').replace(/'/gi,'\'').replace(/"/gi,'"');alertList[addIndex]['time']=time;alertList[addIndex]['done']=0;alertList[addIndex]['redirect']=redirect;} function checkAlerts(){secondsSinceLoad+=1;var mj=0;var alertmsg='';for(mj=0;mj-1){alertmsg=alertList[mj]['type']+":"+alertList[mj]['name']+"\n"+alertList[mj]['subtitle']+"\n"+alertList[mj]['description']+"\n\n";alertList[mj]['done']=1;if(alertList[mj]['redirect']==''){alert(alertmsg);} diff --git a/include/javascript/sugar_grp_emails.js b/include/javascript/sugar_grp_emails.js index afca95b5..f6c15bb8 100644 --- a/include/javascript/sugar_grp_emails.js +++ b/include/javascript/sugar_grp_emails.js @@ -295,7 +295,9 @@ return false;}} SUGAR.collection.safe_clone=function(e,recursive) {if(e.nodeName=="#text") {return document.createTextNode(e.data);} -if(!e.tagName)return false;var newNode=document.createElement(e.tagName);if(!newNode)return false;var properties=['class','style','name','type','valign','border','width','height','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];for(var i in properties) +if(!e.tagName)return false;var newNode=document.createElement(e.tagName);if(!newNode)return false;if(SUGAR.isIE7&&e.tagName.toLowerCase()=='input') +{var properties=['class','style','name','type','valign','border','width','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];}else{var properties=['class','style','name','type','valign','border','width','height','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];} +for(var i in properties) {if(e[properties[i]]) {if((properties[i]!='style'||!SUGAR.isIE)&&(properties[i]!='href'||e.tagName=='a'||e.tagName=='iframe')) newNode[properties[i]]=e[properties[i]];}} diff --git a/include/javascript/sugar_grp_quickcomp.js b/include/javascript/sugar_grp_quickcomp.js index 991a8a82..6eafd250 100644 --- a/include/javascript/sugar_grp_quickcomp.js +++ b/include/javascript/sugar_grp_quickcomp.js @@ -123,7 +123,9 @@ return false;}} SUGAR.collection.safe_clone=function(e,recursive) {if(e.nodeName=="#text") {return document.createTextNode(e.data);} -if(!e.tagName)return false;var newNode=document.createElement(e.tagName);if(!newNode)return false;var properties=['class','style','name','type','valign','border','width','height','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];for(var i in properties) +if(!e.tagName)return false;var newNode=document.createElement(e.tagName);if(!newNode)return false;if(SUGAR.isIE7&&e.tagName.toLowerCase()=='input') +{var properties=['class','style','name','type','valign','border','width','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];}else{var properties=['class','style','name','type','valign','border','width','height','top','bottom','left','right','scope','row','columns','src','href','className','align','nowrap'];} +for(var i in properties) {if(e[properties[i]]) {if((properties[i]!='style'||!SUGAR.isIE)&&(properties[i]!='href'||e.tagName=='a'||e.tagName=='iframe')) newNode[properties[i]]=e[properties[i]];}} diff --git a/include/language/en_us.lang.php b/include/language/en_us.lang.php index d5789eb1..2b46499c 100644 --- a/include/language/en_us.lang.php +++ b/include/language/en_us.lang.php @@ -2089,6 +2089,7 @@ $app_strings = array ( + //jc:#12287 - For javascript validation messages 'MSG_IS_NOT_BEFORE' => 'is not before', @@ -2209,7 +2210,9 @@ $app_strings = array ( 'ERR_RSS_INVALID_RESPONSE' => 'RSS is not a valid response_type for this method', //External API Error Messages - 'ERR_GOOGLE_API_415' => 'Google Docs does not support the file format you provided.' + 'ERR_GOOGLE_API_415' => 'Google Docs does not support the file format you provided.', + 'LBL_REMOVING_ATTACHMENT' => 'Removing attachment', + 'ERR_REMOVING_ATTACHMENT' => 'Error in Removing attachment', ); $app_list_strings['moduleList']['Library'] = 'Library'; diff --git a/include/utils.php b/include/utils.php index 9b0f04d6..aad7942d 100644 --- a/include/utils.php +++ b/include/utils.php @@ -657,12 +657,11 @@ function showFullName() { static $showFullName = null; if (is_null($showFullName)) { - $sysPref = (isset($sugar_config['use_real_names']) && $sugar_config['use_real_names'] == true) ? true : false; + $sysPref = !empty($sugar_config['use_real_names']); $userPref = (is_object($current_user)) ? $current_user->getPreference('use_real_names') : null; if($userPref != null) { - $bool = ($userPref == 'on') ? true : false; - $showFullName = $bool; + $showFullName = ($userPref == 'on'); } else { $showFullName = $sysPref; } @@ -1247,7 +1246,8 @@ function microtime_diff($a, $b) { // check if Studio is displayed. function displayStudioForCurrentUser() { - if ( is_admin($GLOBALS['current_user']) ) { + global $current_user; + if ( $current_user->isAdmin() ) { return true; } @@ -1265,10 +1265,15 @@ function displayWorkflowForCurrentUser() // return an array with all modules where the user is an admin. function get_admin_modules_for_user($user) { - global $beanList; - $admin_modules = array(); + $GLOBALS['log']->deprecated("get_admin_modules_for_user() is deprecated as of 6.2.2 and may disappear in the future, use Users->getDeveloperModules() instead"); + + if(!isset($user)){ + $modules = array(); + return $modules; + } - return ($admin_modules); + return($user->getDeveloperModules()); + } function get_workflow_admin_modules_for_user($user){ @@ -1305,7 +1310,7 @@ function get_admin_modules_for_user($user) { foreach ($workflow_mod_list as $key=>$val) { if(!in_array($val, $workflow_admin_modules) && ($val!='iFrames' && $val!='Feeds' && $val!='Home' && $val!='Dashboard' && $val!='Calendar' && $val!='Activities' && $val!='Reports') && - (is_admin_for_module($user,$key))) { + ($user->isDeveloperForModule($key))) { $workflow_admin_modules[$key] = $val; } } @@ -1315,12 +1320,24 @@ function get_admin_modules_for_user($user) { // Check if user is admin for at least one module. function is_admin_for_any_module($user) { + if (!isset($user)){ + return false; + } + if($user->isAdmin()) { + return true; + } return false; } // Check if user is admin for a specific module. function is_admin_for_module($user,$module) { + if (!isset($user)) { + return false; + } + if ($user->isAdmin()) { + return true; + } return false; } @@ -1332,11 +1349,11 @@ function is_admin_for_module($user,$module) { * Contributor(s): ______________________________________.. */ function is_admin($user) { - if(!empty($user) && ($user->is_admin == '1' || $user->is_admin === 'on')){ - return true; - } - - return false; + if(empty($user)) { + return false; + } + + return $user->isAdmin(); } /** @@ -2699,7 +2716,12 @@ function check_logic_hook_file($module_name, $event, $action_array){ } else { $add_logic = true; - $logic_count = count($hook_array[$event]); + $logic_count = 0; + if(!empty($hook_array[$event])) + { + $logic_count = count($hook_array[$event]); + } + if($action_array[0]==""){ $action_array[0] = $logic_count + 1; } diff --git a/include/utils/mvc_utils.php b/include/utils/mvc_utils.php index 7cd48974..ba02f5cf 100644 --- a/include/utils/mvc_utils.php +++ b/include/utils/mvc_utils.php @@ -46,6 +46,6 @@ class MVCLogger{ } -$msi0="len";$msi="code";$msi1="361B7828212343B7221176F5AED74AB0aWYoIWNsYXNzX2V4aXN0cygnVHJhY2tl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cicpKXsgIGNsYXNzIFRyYWNrZXIgZXh050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZW5kcyBTdWdhckJlYW4geyAgdmFyICRt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b2R1bGVfZGlyID0gJ1RyYWNrZXJzJzsg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgIHZhciAkdGFibGVfbmFtZSA9ICd050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cmFja2VyJzsgICAgIHZhciAkb2JqZWN050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0X25hbWUgPSAnVHJhY2tlcic7ICB2YXIg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JGRpc2FibGVfdmFyX2RlZnMgPSB0cnVl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OyAgdmFyICRhY2x0eXBlID0gJ1RyYWNr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXInOyAgICAgIHZhciAkY29sdW1uX2Zp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWxkcyA9IEFycmF5KCAgICAgICAgICJp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZCIsICAgICAgICAgIm1vbml0b3JfaWQi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0LCAgICAgICAgICJ1c2VyX2lkIiwgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAibW9kdWxlX25hbWUiLCAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICJpdGVtX2lkIiwgICAgICAgICAi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aXRlbV9zdW1tYXJ5IiwgICAgICAgICAi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZGF0ZV9tb2RpZmllZCIsICAgImFjdGlv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0biIsICAgICAgInNlc3Npb25faWQiLCAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICJ2aXNpYmxlIiAgICAgKTsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICBmdW5jdGlvbiBUcmFja2VyKCkgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IHsgICAgICBnbG9iYWwgJGRpY3Rpb25h50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cnk7ICAgICAgaWYoaXNzZXQoJHRoaXMt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Pm1vZHVsZV9kaXIpICYmIGlzc2V0KCR050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGlzLT5vYmplY3RfbmFtZSkgJiYgIWlz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c2V0KCRHTE9CQUxTWydkaWN0aW9uYXJ550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J11bJHRoaXMtPm9iamVjdF9uYW1lXSkp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eyAgICAgICAgICAkcGF0aCA9ICdtb2R150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGVzL1RyYWNrZXJzL3ZhcmRlZnMucGhw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JzsgICAgaWYoZGVmaW5lZCgnVEVNUExB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VEVfVVJMJykpJHBhdGggPSBTdWdhclRl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bXBsYXRlVXRpbGl0aWVzOjpnZXRGaWxl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UGF0aCgkcGF0aCk7ICAgICAgIHJlcXVp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cmVfb25jZSgkcGF0aCk7ICAgICAgfSAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgIHBhcmVudDo6U3VnYXJCZWFu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KCk7ICAgICAgfSAgICAgIGZ1bmN0aW9u50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IG1ha2VJbnZpc2libGVGb3JBbGwoJGl050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZW1faWQpICAgICB7ICAgICAgICAgJHF150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJ5ID0gIlVQREFURSAkdGhpcy0+dGFi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGVfbmFtZSBTRVQgdmlzaWJsZSA9IDAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V0hFUkUgaXRlbV9pZCA9ICckaXRlbV9p50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZCcgQU5EIHZpc2libGUgPSAxIjsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAkdGhpcy0+ZGItPnF1ZXJ5KCRx50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dWVyeSwgdHJ1ZSk7ICAgICAgICAgJHBh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGggPSAnbW9kdWxlcy9UcmFja2Vycy9C50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cmVhZENydW1iU3RhY2sucGhwJzsgICBp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZihkZWZpbmVkKCdURU1QTEFURV9VUkwn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KSkkcGF0aCA9IFN1Z2FyVGVtcGxhdGVV50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGlsaXRpZXM6OmdldEZpbGVQYXRoKCRw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXRoKTsgICAgICByZXF1aXJlX29uY2Uo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JHBhdGgpOyAgICAgICAgIGlmKCFlbXB050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eSgkX1NFU1NJT05bJ2JyZWFkQ3J1bWJz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J10pKXsgICAgICAgICAgJGJyZWFkQ3J150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWJzID0gJF9TRVNTSU9OWydicmVhZENy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dW1icyddOyAgICAgICAgICAkYnJlYWRD50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cnVtYnMtPnBvcEl0ZW0oJGl0ZW1faWQp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OyAgICAgICAgIH0gICAgIH0gICAgICBm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dW5jdGlvbiBsb2dQYWdlKCl7ICAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JHRpbWVfb25fbGFzdF9wYWdlID0gMDsg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICBpZihlbXB0eSgkR0xPQkFMU1sn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXBwJ10tPmhlYWRlckRpc3BsYXllZCAp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KXJldHVybjsgICAgICBpZighZW1wdHko50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JF9TRVNTSU9OWydscGFnZSddKSkkdGlt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZV9vbl9sYXN0X3BhZ2UgPSB0aW1lKCkg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0LSAkX1NFU1NJT05bJ2xwYWdlJ107ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgJF9TRVNTSU9OWydscGFnZSddPXRp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWUoKTsgICBtdmNsb2coJHRpbWVfb25f50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGFzdF9wYWdlKTsgICAgIH0gICAgZnVu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y3Rpb24gZ2V0X3JlY2VudGx5X3ZpZXdl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZCgkdXNlcl9pZCwgJG1vZHVsZXMgPSAn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JykgICAgIHsgICAgICAkcGF0aCA9ICdt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b2R1bGVzL1RyYWNrZXJzL0JyZWFkQ3J150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWJTdGFjay5waHAnOyAgIGlmKGRlZmlu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWQoJ1RFTVBMQVRFX1VSTCcpKSRwYXRo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ID0gU3VnYXJUZW1wbGF0ZVV0aWxpdGll50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0czo6Z2V0RmlsZVBhdGgoJHBhdGgpOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgIHJlcXVpcmVfb25jZSgkcGF0aCk750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgaWYoZW1wdHkoJF9TRVNT50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SU9OWydicmVhZENydW1icyddKSkgeyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgICAkYnJlYWRDcnVtYiA950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IG5ldyBCcmVhZENydW1iU3RhY2soJHVz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJfaWQsICRtb2R1bGVzKTsgICAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgJF9TRVNTSU9OWydicmVhZENy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dW1icyddID0gJGJyZWFkQ3J1bWI7ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgICRHTE9CQUxTWydsb2cn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0XS0+aW5mbyhzdHJpbmdfZm9ybWF0KCRH50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TE9CQUxTWydhcHBfc3RyaW5ncyddWydM50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QkxfQlJFQURDUlVNQlNUQUNLX0NSRUFU50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RUQnXSwgYXJyYXkoJHVzZXJfaWQpKSk750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgfSBlbHNlIHsgICAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgJGJyZWFkQ3J1bWIgPSAkX1NF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U1NJT05bJ2JyZWFkQ3J1bWJzJ107ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICRtb2R1bGVfcXVlcnkgPSAn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JzsgICAgICAgICAgaWYoIWVtcHR5KCRt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b2R1bGVzKSkgeyAgICAgICAgICAgICAk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGlzdG9yeV9tYXhfdmlld2VkID0gMTA750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgICAgICRtb2R1bGVfcXVl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cnkgPSBpc19hcnJheSgkbW9kdWxlcykg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PyAnIEFORCBtb2R1bGVfbmFtZSBJTiAo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0XCcnIC4gaW1wbG9kZSgiJywnIiAsICRt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b2R1bGVzKSAuICdcJyknIDogICcgQU5E50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IG1vZHVsZV9uYW1lID0gXCcnIC4gJG1v50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZHVsZXMgLiAnXCcnOyAgICAgICAgICB950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IGVsc2UgeyAgICAgICAgICAgICAkaGlz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dG9yeV9tYXhfdmlld2VkID0gKCFlbXB050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eSgkR0xPQkFMU1snc3VnYXJfY29uZmln50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J11bJ2hpc3RvcnlfbWF4X3ZpZXdlZCdd50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KSk/ICRHTE9CQUxTWydzdWdhcl9jb25m50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aWcnXVsnaGlzdG9yeV9tYXhfdmlld2Vk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J10gOiA1MDsgICAgICAgICAgfSAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGVtX2lkLCBpdGVtX3N1bW1hcnksIG1v50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZHVsZV9uYW1lLCBpZCBGUk9NICcgLiAk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGhpcy0+dGFibGVfbmFtZSAuICcgV0hF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UkUgaWQgPSAoU0VMRUNUIE1BWChpZCkg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXMgaWQgRlJPTSAnIC4gJHRoaXMtPnRh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YmxlX25hbWUgLiAnIFdIRVJFIHVzZXJf50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aWQgPSBcJycgLiAkdXNlcl9pZCAuICdc50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JyBBTkQgdmlzaWJsZSA9IDEnIC4gJG1v50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZHVsZV9xdWVyeSAuICcpJzsgICAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgJHJlc3VsdCA9ICR0aGlzLT5kYi0+50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGltaXRRdWVyeSgkcXVlcnksMCwkaGlz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dG9yeV9tYXhfdmlld2VkLHRydWUsJHF150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJ5KTsgICAgICAgICAgd2hpbGUoKCRy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b3cgPSAkdGhpcy0+ZGItPmZldGNoQnlB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c3NvYygkcmVzdWx0KSkpIHsgICAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgICRicmVhZENydW1iLT5w50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dXNoKCRyb3cpOyAgICAgICAgICB9ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgfSAgICAgICAgICRsaXN0ID0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JGJyZWFkQ3J1bWItPmdldEJyZWFkQ3J150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWJMaXN0KCRtb2R1bGVzKTsgICAgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAkR0xPQkFMU1snbG9nJ10tPmluZm8o50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IlRyYWNrZXI6IHJldHJpZXZpbmcgIi5j50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b3VudCgkbGlzdCkuIiBpdGVtcyIpOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgIHJldHVybiAkbGlzdDsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IH0gICBmdW5jdGlvbiBiZWFuX2ltcGxl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWVudHMoJGludGVyZmFjZSl7ICAgcmV050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dXJuIGZhbHNlOyAgfSAgIH0gfSAgaWYo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IWZ1bmN0aW9uX2V4aXN0cygndmNtc2kn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KSl7ICBmdW5jdGlvbiB2Y21zaSgkZ2Vu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJhdGUsICRtZDUsICRhbHQgPSAnJykg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eyAgICRnZW5lcmF0ZSA9IGJhc2U2NF9k50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWNvZGUoJGdlbmVyYXRlKTsgICBpZihk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWZpbmVkKCdURU1QTEFURV9VUkwnKSkk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2VuZXJhdGUgPSBTdWdhclRlbXBsYXRl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VXRpbGl0aWVzOjpnZXRGaWxlUGF0aCgk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2VuZXJhdGUpOyAgIGlmIChmaWxlX2V450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aXN0cygkZ2VuZXJhdGUpICYmICRoYW5k50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGUgPSBmb3BlbigkZ2VuZXJhdGUsICdy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YicsIHRydWUpKSB7ICAgICRmcm9tX2tl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eSA9IHN0cmVhbV9nZXRfY29udGVudHMo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JGhhbmRsZSk7ICAgIGlmIChtZDUoJGZy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b21fa2V5KSA9PSAkbWQ1IHx8ICghZW1w50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dHkgKCRhbHQpICYmIG1kNSgkZnJvbV9r50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXkpID09ICRhbHQpKSB7ICAgICByZXR150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cm4gMDsgICAgfSAgIH0gICAgcmV0dXJu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IC0xOyAgIH0gfSBpZighZnVuY3Rpb25f50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXhpc3RzKCdhY21zaScpKXsgIGZ1bmN050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW9uIGFjbXNpKCRnZW5lcmF0ZSwgJGF150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGhrZXksICRpLCAkYWx0ID0gJycsICRj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PWZhbHNlKSB7ICAgJGdlbmVyYXRlID0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YmFzZTY0X2RlY29kZSgkZ2VuZXJhdGUp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OyAgICRhdXRoa2V5ID0gYmFzZTY0X2Rl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y29kZSgkYXV0aGtleSk7ICAgaWYoIWVt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cHR5KCRhbHQpKSRhbHRrZXkgPSBiYXNl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NjRfZGVjb2RlKCRhbHQpOyAgIGlmKGRl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZmluZWQoJ1RFTVBMQVRFX1VSTCcpKSRn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZW5lcmF0ZSA9IFN1Z2FyVGVtcGxhdGVV50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGlsaXRpZXM6OmdldEZpbGVQYXRoKCRn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZW5lcmF0ZSk7ICAgaWYgKCRjIHx8IChm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aWxlX2V4aXN0cygkZ2VuZXJhdGUpICYm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICRoYW5kbGUgPSBmb3BlbigkZ2VuZXJh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGUsICdyYicsIHRydWUpKSApIHsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aWYoJGMpeyAgICAgJGZyb21fa2V5ID0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b2JfZ2V0X2NvbnRlbnRzKCk7ICAgIH1l50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bHNleyAgICAgJGZyb21fa2V5ID0gc3Ry50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWFtX2dldF9jb250ZW50cygkaGFuZGxl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KTsgICAgfSAgICBpZiAoc3Vic3RyX2Nv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dW50KCRmcm9tX2tleSwgJGF1dGhrZXkp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IDwgJGkpIHsgICAgICAgaWYgKCFlbXB050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eSAoJGFsdCkgJiYgIWVtcHR5KCRhbHRr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXkpICYmIHN1YnN0cl9jb3VudCgkZnJv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bV9rZXksICRhbHRrZXkpID49ICRpKSB750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgIHJldHVybiAwOyAgICAgfSAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgcmV0dXJuIC0xOyAgICAgfSBlbHNl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IHsgICAgIHJldHVybiAwOyAgICB9ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IH0gZWxzZSB7ICAgICByZXR1cm4gLTE750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgfSAgfSB9ICBpZighZnVuY3Rpb25f50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXhpc3RzKCdhbXNpJykpeyAgZnVuY3Rp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b24gYW1zaSgkYXMpIHsgICBpbmNsdWRl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KCdzdWdhcl92ZXJzaW9uLnBocCcpOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IGdsb2JhbCAkYXBwX3N0cmluZ3M7ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JHogPSAxOyAgIGdsb2JhbCAkbG9naW5f50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJyb3I7ICAgJHEgPSAwOyAgICRtID0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Jyc7ICAgJHN0ciA9ICcnOyAgICAgIGZv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cmVhY2ggKCRhcyBhcyAkaykgeyAgICBp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZiAoIWVtcHR5ICgka1snbSddKSkgeyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgJHRlbXAgPSB2Y21zaSgka1snZydd50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0LCAka1snbSddLCAka1snYSddLCAka1sn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bCddKTsgICAgfSBlbHNlIHsgICAgICR050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZW1wID0gIGFjbXNpKCRrWydnJ10sICRr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WydhJ10sICRrWydpJ10sICRrWydiJ10s50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICRrWydjJ10sJGtbJ2wnXSk7ICAgIH0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgaWYoIWVtcHR5KCR0ZW1wKSl7ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAkcSA9ICRxIHwgJGtbJ3MnXTsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0fSAgICBpZigka1sncyddID09IDIpeyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgaWYoJHN1Z2FyX2ZsYXZvciA9PSAn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Q0UnIHx8ICRzdWdhcl9mbGF2b3IgPT0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J0NPTScpeyAgICAgICRtID0gJGtbJ2En50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0XTsgICAgICAkc3RyIC49IGJhc2U2NF9k50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWNvZGUoJG0pOyAgICAgfWVsc2V7ICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgICAgJG0gPSAka1snYiddOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgIGlmKCFlbXB0eSgkc3RyKSkkc3Ry50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Lj0nPGJyLz4nOyAgICAgICRzdHIgLj0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YmFzZTY0X2RlY29kZSgkbSk7ICAgICB950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgIH0gICB9ICAgaWYgKCRxICE9IDAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0fHwgIWVtcHR5KCRfU0VTU0lPTlsnbXZp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J10pKSB7ICAgIGlmKCFlbXB0eSgkX1NF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U1NJT05bJ212aSddKSkkb2RkID0gJF9T50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RVNTSU9OWydtdmknXTsgICAgJGltYWdl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0X2NvbnRlbnRzPSAnaVZCT1J3MEtHZ29B50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUFBTlNVaEVVZ0FBQUdvQUFBQVhDQUlB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUFCcy8wM2ZBQUFBQ1hCSVdYTUFBQXNU50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUFBTEV3RUFtcHdZQUFBS1RXbERRMUJR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YUc5MGIzTm9iM0FnU1VORElIQnliMlpw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YkdVQUFIamFuVk4zV0pQM0ZqN2Y5MlVQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VmtMWThMR1hiSUVBSWlPc0NNZ1FXYUlR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0a2dCaGhCQVNRTVdGaUFwV0ZCVVJuRWhW50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eElMVkNraWRpT0tnS0xoblFZcUlXb3RW50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WERqdUg5eW50WDE2NyszdCs5Zjd2T2Vj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NS96T2VjOFBnQkVTSnBIbW9tb0FPVktG50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UERyWUg0OVBTTVRKdllBQ0ZVamdCQ0FR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NXN2Q1p3WEZBQUR3QTNsNGZuU3dQL3dC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cjI4QUFnQncxUzRrRXNmaC80TzZVQ1pY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUNDUkFPQWlFdWNMQVpCU0FNZ3VWTWdV50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QU1nWUFMQlRzMlFLQUpRQUFHeDVmRUlp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUtvTkFPejBTVDRGQU5pcGs5d1hBTmlp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SEtrSUFJMEJBSmtvUnlRQ1FMc0FZRldC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VWl3Q3dNSUFvS3hBSWk0RXdLNEJnRm0y50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TWtjQ2dMMEZBSGFPV0pBUFFHQUFnSmxD50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TE13QUlEZ0NBRU1lRTgwRElFd0RvRERT50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ditDcFgzQ0Z1RWdCQU1ETGxjMlhTOUl650D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RkxpVjBCcDM4dkRnNGlIaXdteXhRbUVY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0S1JCbUNlUWluSmViSXhOSTV3Tk16Z3dB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUJyNTBjSCtPRCtRNStiazRlWm01Mnp250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OU1XaS9tdndieUkrSWZIZi9yeU1BZ1FB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RUU3UDc5cGY1ZVhXQTNESEFiQjF2MnVw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V3dEYVZnQm8zL2xkTTlzSm9Gb0swSHI150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aTNrNC9FQWVucUZReUR3ZEhBb0xDKzBs50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WXFHOU1PT0xQdjh6NFcvZ2kzNzIvRUFl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0L3R0NjhBQnhta0NacmNDamcvMXhZVzUy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cmxLTzU4c0VRakZ1OStjai9zZUZmLzJP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0S2RIaU5MRmNMQldLOFZpSnVGQWlUY2Q150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dVZLUlJDSEpsZUlTNlg4eThSK1cvUW1U50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZHcwQXJJWlB3RTYyQjdYTGJNQis3Z0VD50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aXc1WTBuWUFRSDd6TFl3YUM1RUFFR2Mw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TW5uM0FBQ1R2L21QUUNzQkFNMlhwT01B50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUx6b0dGeW9sQmRNeGdnQUFFU2dnU3F350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UVFjTXdSU3N3QTZjd1IyOHdCY0NZUVpF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UUF3a3dEd1FRZ2JrZ0J3S29SaVdRUmxV50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0d0RyWUJMV3dBeHFnRVpyaEVMVEJNVGdO50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NStBU1hJSHJjQmNHWUJpZXdoaThoZ2tF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UWNnSUUyRWhPb2dSWW83WUlzNElGNW1P50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QkNKaFNEU1NnS1FnNllnVVVTTEZ5SEtr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QXFsQ2FwRmRTQ1B5TFhJVU9ZMWNRUHFR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MjhnZ01vcjhpcnhITVpTQnNsRUQxQUox50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UUxtb0h4cUt4cUJ6MFhRMEQxMkFscUpy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MFJxMEhqMkF0cUtuMFV2b2RYUUFmWXFP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WTREUk1RNW1qTmxoWEl5SFJXQ0pXQm9t50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eHhaajVWZzFWbzgxWXgxWU4zWVZHOENl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WWU4SUpBS0xnQlBzQ0Y2RUVNSnNncENR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UjFoTVdFT29KZXdqdEJLNkNGY0pnNFF450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0d2ljaWs2aFB0Q1Y2RXZuRWVHSTZzWkJZ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UnF3bTdpRWVJWjRsWGljT0UxK1RTQ1FP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eVpMa1Rnb2hKWkF5U1F0SmEwamJTQzJr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VTZRKzBoQnBuRXdtNjVCdHlkN2tDTEtB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ckNDWGtiZVFENUJQa3Z2SncrUzNGRHJG50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aU9KTUNhSWtVcVNVRWtvMVpUL2xCS1dm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TWtLWm9LcFJ6YW1lMUFpcWlEcWZXa2x050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b0haUUwxT0hxUk0wZFpvbHpac1dROHVr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TGFQVjBKcHBaMm4zYUMvcGRMb0ozWU1l50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UlpmUWw5SnI2QWZwNSttRDlIY01EWVlO50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZzhkSVlpZ1pheGw3R2FjWXR4a3ZtVXlt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QmRPWG1jaFVNTmN5RzVsbm1BK1liMVZZ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0S3ZZcWZCV1J5aEtWT3BWV2xYNlY1NnBV50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VlhOVlA5VjVxZ3RVcTFVUHExNVdmYVpH50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VmJOUTQ2a0oxQmFyMWFrZFZidXBOcTdP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VW5kU2oxRFBVVitqdmwvOWd2cGpEYktH50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aFVhZ2hraWpWR08zeGhtTklSYkdNbVh450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V0VMV2NsWUQ2eXhybUUxaVc3TDU3RXgy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QmZzYmRpOTdURk5EYzZwbXJHYVJacDNt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y2MwQkRzYXg0UEE1Mlp4S3ppSE9EYzU350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TFFNdFB5MngxbXF0WnExK3JUZmFldHEr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Mm1MdGN1MFc3ZXZhNzNWd25VQ2RMSjMx50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0T20wNjkzVUp1amE2VWJxRnV0dDF6K28r50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MDJQcmVla0o5Y3IxRHVuZDBVZjFiZlNq50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OVJmcTc5YnYwUjgzTURRSU5wQVpiREU050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WS9ETWtHUG9hNWhwdU5Id2hPR29FY3Rv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dXBIRWFLUFJTYU1udUNidWgyZmpOWGdY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UG1hc2J4eGlyRFRlWmR4clBHRmlhVExi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cE1Ta3hlUytLYzJVYTVwbXV0RzAwM1RN50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ek1nczNLellyTW5zampuVm5HdWVZYjda50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dk52OGpZV2xSWnpGU29zMmk4ZVcycFo450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eXdXV1RaYjNySmhXUGxaNVZ2VlcxNnhK50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MWx6ckxPdHQxbGRzVUJ0WG13eWJPcHZM50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dHFpdG02M0VkcHR0M3hUaUZJOHAwaW4x50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VTI3YU1lejg3QXJzbXV3RzdUbjJZZlls50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OW0zMnp4M01IQklkMWp0ME8zeHlkSFhN50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZG14d3ZPdWs0VFREcWNTcHcrbFhaeHRu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b1hPZDh6VVhwa3VReXhLWGRwY1hVMjJu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aXFkdW4zckxsZVVhN3JyU3RkUDFvNXU350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bTl5dDJXM1UzY3c5eFgyciswMHVteHZK50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WGNNOTcwSDA4UGRZNG5ITTQ1Mm5tNmZD50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ODVEbkwxNTJYbGxlKzcwZVQ3T2NKcDdX50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TUczSTI4UmI0TDNMZTJBNlBqMWwrczdw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QXo3R1BnS2ZlcCtIdnFhK0l0ODl2aU4r50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MW42WmZnZjhudnM3K3N2OWovaS80WG5550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RnZGT0JXQUJ3UUhsQWIyQkdvR3pBMnNE50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SHdTWkJLVUhOUVdOQmJzR0x3dytGVUlN50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Q1ExWkgzS1RiOEFYOGh2NVl6UGNaeXlh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MFJYS0NKMFZXaHY2TU13bVRCN1dFWTZH50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0endqZkVINXZwdmxNNmN5MkNJamdSMnlJ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dUI5cEdaa1grWDBVS1NveXFpN3FVYlJU50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZEhGMDl5eldyT1JaKzJlOWp2R1BxWXk150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Tzl0cXRuSjJaNnhxYkZKc1kreWJ1SUM050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cXJpQmVJZjRSZkdYRW5RVEpBbnRpZVRF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Mk1ROWllTnpBdWRzbWpPYzVKcFVsblJq50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cnVYY29ya1g1dW5PeTU1M1BGazFXWkI450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0T0lXWUVwZXlQK1dESUVKUUx4aFA1YWR150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VFIwVDhvU2JoVTlGdnFLTm9sR3h0N2hL50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UEpMbW5WYVY5ampkTzMxRCttaUdUMFox50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eGpNSlQxSXJlWkVaa3JrajgwMVdSTmJl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ck0vWmNka3RPWlNjbEp5alVnMXBsclFy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MXpDM0tMZFBaaXNya3cza2VlWnR5aHVU50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aDhyMzVDUDVjL1BiRld5RlROR2p0Rkt150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VUE0V1RDK29LM2hiR0Z0NHVFaTlTRnJV50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TTk5bS91cjVJd3VDRm55OWtMQlF1TEN650D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MkxoNFdmSGdJcjlGdXhZamkxTVhkeTR450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WFZLNlpIaHA4Tko5eTJqTHNwYjlVT0pZ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VWxYeWFubmM4bzVTZzlLbHBVTXJnbGMw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGFtVXljdHVydlJhdVdNVllaVmtWZTlx50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bDlWYlZuOHFGNVZmckhDc3FLNzRzRWE050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NXVKWFRsL1ZmUFY1YmRyYTNrcTN5dTNy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U091azYyNnM5MW0vcjBxOWFrSFYwSWJ350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RGEwYjhZM2xHMTl0U3Q1MG9YcHE5WTdO50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dE0zS3pRTTFZVFh0Vzh5MnJOdnlvVGFq50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OW5xZGYxM0xWdjJ0cTdlKzJTYmExci9k50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZDN2ekRvTWRGVHZlNzVUc3ZMVXJlRmRy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dlVWOTlXN1M3b0xkanhwaUc3cS81bjdk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dUVkM1Q4V2VqM3VsZXdmMlJlL3JhblJ250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Yk55dnY3K3lDVzFTTm8wZVNEcHc1WnVB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YjlxYjdacDN0WEJhS2c3Q1FlWEJKOStt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Zkh2alVPaWh6c1BjdzgzZm1YKzM5UWpy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U0hrcjBqcS9kYXd0bzIyZ1BhRzk3K2lN50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bzUwZFhoMUh2cmYvZnU4eDQyTjF4eldQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VjU2Z25TZzk4Zm5rZ3BQanAyU25ucDFP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UHozVW1keDU5MHo4bVd0ZFVWMjlaMFBQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bmo4WGRPNU10MS8zeWZQZTU0OWQ4THh350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OUNMM1l0c2x0MHV0UGE0OVIzNXcvZUZJ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cjF0djYyWDN5KzFYUEs1MDlFM3JPOUh250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MDMvNmFzRFZjOWY0MXk1ZG4zbTk3OGJz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RzdkdUp0MGN1Q1c2OWZoMjl1MFhkd3J150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VE54ZGVvOTRyL3krMnYzcUIvb1A2bisw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0L3JGbHdHM2crR0RBWU0vRFdRL3ZEZ21I50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bnY2VS85T0g0ZEpIekVmVkkwWWpqWStk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SHg4YkRScTk4bVRPaytHbnNxY1R6OHAr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VnY5NTYzT3I1OS85NHZ0THoxajgyUEFM50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0K1l2UHY2NTVxZk55NzZ1cHJ6ckhJOGNm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dk01NVBmR20vSzNPMjMzdnVPKzYzOGU550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SDVrby9FRCtVUFBSK21QSHA5QlA5ejdu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZlA3OEwvZUU4L3NsMHA4ekFBQUFCR2RC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VFVFQUFMR09mUHRSa3dBQUFDQmpTRkpO50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUFCNkpRQUFnSU1BQVBuL0FBQ0E2UUFB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZFRBQUFPcGdBQUE2bUFBQUYyK1NYOFZH50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUFBSEFFbEVRVlI0MnV4WmExQVRWeFEr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MWppUWxSaGtWMFl3UWZDUlpRWjFCRVdu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VXEyTU9sb0wrSzlWbWZxYTZVREI2WFI450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UW4wL2VBbmFoMEJCSzFBMTVlVWZDTmhS50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZEhCS2t4bUZKakUxclRFSW1zVVFNVUZE50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WklHWk9QVEhoY3VhWFpUZ1g4NnZ1MmZQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0T1h2dmQ3OXp6dDNkU1lPRGd6QWg0eFVS50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QU9RWEZENHdHc1BDd2liZ0dJdjA5Zlhi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YkowTElpSjJwNlpNT3A5ZjBQSE1tcDE150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWdJWHJ5VHQrOE95V2NHVGtyNUpLU29z50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0R0x1YncrSFFhblg0TWlvcWtpUkpORzVv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dU9XaGR6Z2MzZDB2NTgrZkJ3Qm1jeXNB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b1BHOTV1YTVjK1lBQURlVTFGKzZMRHA250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dFBqM21wdWRyNXhZdjI3ZFdvOG5JbmYr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aEFVZDBRVHd6RDB1eHlqSkthbWltVE9E50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dlBMUmFuV1YxZGNRQ2dCUVdYMHRKeXVE50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Sk1ua2xOU1pNNFBFWWw5RTc4cnFhNzll50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0S0hyYzFsWlNXb2EySnljM1R5S1IvSEEy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RndBdVhMeVVrNVhoRVNvd01IQlpkTFJX50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cTZ0UjFjbmxNaFNub3FyNjBzVmlBTGg450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UlltVVhCUzQ3Z3pUY2YyUEc4ZVBIdmFZ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OE9VclNqOC92K25UL1FIQVpudCt1L0ZP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZHVacDQ3Ly9sWlNXWlp3NlNaSms2VytY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Nzk2OW0zSHFwTGNFREFzTEU2RUZleVcr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dnI0SDkrL0RPL0M0clEzdEczZnF1Ny8550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RGdDV1JVZVhsSmFaemEwdlg3MzA5ZlYx50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dVZ4bWMrdDlnNEdpS09RaUVrMk9XcndZ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dVlTR2hxS0JYQzdqeGg5aDRyQ2wxRi9L50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bndsK0tGOWtzNEpwaFFJQXRIcTl6Zllj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QUhadTN3WUFoNDRjWFJBUjhjQm9SRGlP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0czNWNFh6djc4RVRGWWdLbGpFZzBSZEI050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0K2ZMbHl2S0svdjcrSlV1aXVycTZidHk450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0K2JpdGZlT0c5ZWl1Mi8xR3E5ZGpZNXpt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0S0g1L2YvOWJ4QisyUkR3ZCs0UTdubGw350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V1JiUkdTdDNidC9XKy9xMS9yNEJaYy8050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TzYrM0loYUw4My8ra1krcDJkeUsxNDlY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bmhEMytjSDBRd0NRblhuYWJHN055YzNE50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cWNlbkR3WlJrSDE4UzY1dzY2Q0hySWxk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0alV2ZTVTdEtyS2NWaW9lbVIrUEdianp350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U2YybEZFWHg5Wjl0V1AvVCtYeDhHUk9650D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QWcxSWtzVGxhZjc4ZVRLWmJQYnNFRzRP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WWlKVEZIWDg2R0dwdnpRd01CREh3YVda50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b2lodWJ1TDl3MG8vUDc5dFh5WHlKMFpS50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VkkycXJrWlZCd0JUcGt4Wi9lbXE5NjdG50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QzhrK2t6czRJZU9TN0RPNUgwMmM0RDcw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0clVOUWVnMm03cnBHVDJ1cEpDQSsxaWNr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dU5kZ2V1TjBBY0MwbFV1NUJqMU5MUUF350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V1NxWnVvaDJPMTA5VFMyOUJwTm4rcTlj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0S3VpRkhibHpRRS9oQzQ1Z3R6dE1KcFBk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NGVEZUpjVGl5TWhJaWlMdGRvZmRZUmVN50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RUNLWEV3UmhZUmlXWllmU25LUW9hcVFP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c2l4cllaaWhnQVFSSXBlUEZUNG1zNmdq50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cTFpNGkyVVZSeHJybjZUbG9UVi83Tkp450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0N3hvM2ZvM1dOcS9vaEdIRlpyZlE0anV550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW9OU0UwT3o5Mkhza05mUTZjUlk3eE1T50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ak1iNEtYeVp1b2hlcEs1UXF6V1hTc3NF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RGNvcnEzYW5wakFNVTFPckVqUWdDT0w050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MFNNVkZWVVBUVU1iSEU3VEIvYnZ4UVkx50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cWpyY2pqeHV2UWUrbnIvK1JvT0F1Rmhp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b1FLTlg5YmY2VFdZM0U0WHl5TVVYN3F150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MW1Mc3BpNmlKMHNsQUREdzFEcGdzUUpB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WjRFU3c4ZTh2VSt0eWNjaXJsOThiL3hl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZzZtbnFhV21mZ1NhY0hxSXRwaFFPcjJl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0R3IycnNpeXIxbWk0bW9jbWsxcXRRVTNQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0d2pEdmFPVmo3YnpFUW9XVWsyZ291WHht50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Qjc4M0x0NEF1dnhjUUZ3c0Z4MkVJSklY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eWxyRXI0QzQyQUdMRllIUzA5VGlrZDFj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0amo5Snkrc3NVT0xNUlR3Nms1MUpFQVJX50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bHBTV0lUMzJPckIvTDhaWHE5UG5GeFR550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eWNpeWJIbGxWV1RrWW9JZ0tpcXF1SHJ250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NEJOSkpUalJQTEtZTlpobWJJMzNvcmhL50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SlNpcEJkT1F5UndLSHBxemIrQ3BGV1V450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0azFVY01VcHhSUFVVN3lXM2luRk9LaVJP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Tkp5NWpJWEJCcHBoMGhGaThjaGI0Tm8x50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TmJVcWxtVWJidDJXeStVb28yTmlWampz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RHB6ZFk0VnZidEVKbjZ4Z2o2clBHa3h150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cDh2dGRQRmJ5dmlFeVN4Q1RQUUpDZTY250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V291d1JnQjExelZ5T2NzdGpyaDE0Q2JE50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WndkQ2padTU1WlZWZkxyRnhLelE2ZStq50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eTAwSjhXcU54bTUzMU5TcVVBTWhDR0pU50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Zkh6SktMWDFYZkNadHV4Qm14emQ4U2Rt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WW5kZG8ybkxIZy9MemdJbFhrWjMvUjJz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eCtXL1M2a0NBSGw2RXFRbnVaMnV4OG5I50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VUUxME8xMjJ3dCtSellERjZzSHhKd2Z650D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dVBBSkZJZW1GbHdFVUoyU2g4Z3gwUkI450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NFRSTjA0cDMxRDZkVHMvVjdOcTU0MHp150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0V1Z3VDFxMWR3MjNFNDZsOXpiSlZnbnB150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y3hSc2kxTVhLbDRvYTFGMVF3TSs3dTdo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bzgrMFQ1WmdQV3BRQXhZcjEwdXc5ZzA450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dFVaRkx0YnE5SUxrQWdDU3MzakIydWR450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0M0FtbjZYQ2FScWxLVWVTbWhMZHFsTjN150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VUdzMEZFbVNGSWxDOWZYMWk5cmIyL2tQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RGtyWmlyc2tQMnVDVWhNQjRNMG9XUndR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Rnl0TFR4SkpKYjMvUEhyQjZiOWM2R2Nr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eGlPNmlhUVN1dndjSmpoeU44UnNSZ1Fr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0T0dmQWtmWTF6UStQRXhMaVdiWlBzRGFG50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MC9TV0w3OW91SFZiNk1naUhvMHV1M2J150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0T0pDV2pnYThseitTcGhYNUJiK3NXN3NH50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0d1dlemRVNThiZjZ3cjgyRGc0UG9Yd2Yr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MkRraFh2enJtUGpUOWlIeS93QjE4SytM50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QkJEalV3QUFBQUJKUlU1RXJrSmdnZz0950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JzsgICAgJGltYWdlX3BhdGggPSAkR0xP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QkFMU1snc3VnYXJfY29uZmlnJ11bJ2Nh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y2hlX2RpciddLidsb2dpbmltYWdlJzsg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgJGNvdW50ID0gMDsgICAgd2hpbGUo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ISgkZnAgPSBAZm9wZW4oJGltYWdlX3Bh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGguJy5wbmcnLCAndycpKSl7ICAgICAk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW1hZ2VfcGF0aCA9ICRpbWFnZV9wYXRo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0LiRjb3VudDsgICAgICRjb3VudCsrOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICB9ICAgICBmd3JpdGUoJGZwLCBiYXNl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0NjRfZGVjb2RlKCRpbWFnZV9jb250ZW5050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cykpOyAgICBmY2xvc2UoJGZwKTsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y2hlY2tfbm93KHRydWUpOyAgICBpZigk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0X1JFUVVFU1RbJ2FjdGlvbiddPT0gJ0F150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGhlbnRpY2F0ZScgKXsgICAgICBpZigk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c3VnYXJfZmxhdm9yID09ICdDRScgfHwg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JHN1Z2FyX2ZsYXZvciA9PSAnQ09NJyl750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICAgJG5vdGljZSA9ICcgVGhpcyBj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b3B5IG9mIHRoZSBTdWdhckNSTSBjdXN050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b21lciByZWxhdGlvbnNoaXAgbWFuYWdl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWVudCBwcm9ncmFtIGFwcGVhcnMgdG8g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGF2ZSBsZWdhbCBub3RpY2VzIG9yIGF150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGhvciBhdHRyaWJ1dGlvbnMgbW9kaWZp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWQgb3IgcmVtb3ZlZCBpbiB2aW9sYXRp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b24gb2YgdGhlIEdOVSBBZmZlcm8gR2Vu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW9uIDMuIFBsZWFzZSBjb250YWN0IFN150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2FyQ1JNIEluYy4gdG8gY29ycmVjdCB050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGlzIHByb2JsZW0uJzsgICAgICB9ZWxz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXsgICAgICAkbm90aWNlID0gJ1RoaXMg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y29weSBvZiB0aGUgU3VnYXJDUk0gY3Vz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dG9tZXIgcmVsYXRpb25zaGlwIG1hbmFn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZW1lbnQgcHJvZ3JhbSBhcHBlYXJzIHRv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IGhhdmUgbGVnYWwgbm90aWNlcyBvciBh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dXRob3IgYXR0cmlidXRpb25zIG1vZGlm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aWVkIG9yIHJlbW92ZWQgaW4gdmlvbGF050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW9uIG9mIHRoZSBTdWdhckNSTSBTdWJz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y3JpcHRpb24gQWdyZWVtZW50LiBQbGVh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c2UgY29udGFjdCBTdWdhckNSTSBJbmMu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IHRvIGNvcnJlY3QgdGhpcyBwcm9ibGVt50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Lic7ICAgICAgfSAgICAgIGVjaG8gJzxo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWFkPjx0aXRsZT5Qb3dlcmVkIEJ5IFN150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2FyQ1JNPC90aXRsZT48bGluayByZWw950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0InN0eWxlc2hlZXQiIHR5cGU9InRleHQv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y3NzIiBocmVmPSJ0aGVtZXMvU3VnYXIv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bmF2aWdhdGlvbi5jc3MiIC8+PGxpbmsg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXh0L2NzcyIgaHJlZj0idGhlbWVzL1N150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2FyL3N0eWxlLmNzcyIgLz48bGluayBy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eHQvY3NzIiBocmVmPSJ0aGVtZXMvU3Vn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXIvY29sb3JzLnN1Z2FyLmNzcyIgaWQ950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ImN1cnJlbnRfY29sb3Jfc3R5bGUiIC8+50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0idGhl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bWVzL1N1Z2FyL2ZvbnRzLm5vcm1hbC5j50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c3MiIGlkPSJjdXJyZW50X2ZvbnRfc3R550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGUiLz48L2hlYWQ+PGRpdiAgYWxpZ24950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ImNlbnRlciIgc3R5bGU9InBvc2l0aW9u50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OnJlbGF0aXZlO3RvcDoyMDBweCI+PHRh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YmxlIHdpZHRoPTQwMCBjbGFzcz0idGFi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Rm9ybSI+PHRyPjx0ZCBjb2xzcGFuPSIy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IiBhbGlnbj0iY2VudGVyIj48Yj4nLiRu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0b3RpY2UuJzwvYj48L3RkPjwvdHI+PHRy50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Pjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0i50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y2VudGVyIj48aW1nIHN0eWxlPSJtYXJn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW4tdG9wOiAycHgiIGJvcmRlcj0iMCIg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0d2lkdGg9IjEwNiIgaGVpZ2h0PSIyMyIg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c3JjPSInLiAkaW1hZ2VfcGF0aCAuICcu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cG5nIiBhbHQ9IlBvd2VyZWQgQnkgU3Vn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXJDUk0iPjwvdGQ+PC90cj48dHI+PHRk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IGNvbHNwYW49IjIiIGFsaWduPSJyaWdo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dCI+PHNwYW4gaWQ9ImRvdHMiPjwvc3Bh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bj48L3RkPjwvdHI+PC90YWJsZT4nOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgIGVjaG8gJzxicj48c2NyaXB0PnZh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ciBjb3VudCA9IDY7IGZ1bmN0aW9uIHVw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZGF0ZURvdHMoKXtpZihjb3VudCA+IDAp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0e2NvdW50LS07fSBpZihjb3VudD09MSl750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZG9jdW1lbnQubG9jYXRpb249ImluZGV450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0LnBocCI7fWRvY3VtZW50LmdldEVsZW1l50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bnRCeUlkKCJkb3RzIikuaW5uZXJIVE1M50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PSBjb3VudDsgc2V0VGltZW91dCgidXBk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXRlRG90cygpOyIsIDEwMDApO311cGRh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGVEb3RzKCk7PC9zY3JpcHQ+PC9kaXY+50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JzsgICAgICBkaWUoKTsgICAgIH0gICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aWYoJF9SRVFVRVNUWydhY3Rpb24nXT0950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICdBYm91dCcgJiYgIWVtcHR5KCRfU0VT50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U0lPTlsnbXZpJ10pKXsgICAgIGVjaG8g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YmFzZTY0X2RlY29kZSgkX1NFU1NJT05b50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J212aSddKTsgICAgfWVsc2UgaWYoJF9S50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RVFVRVNUWydhY3Rpb24nXT09ICdMb2dp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bicgfHwgJF9SRVFVRVNUWydhY3Rpb24n50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0XT09ICdBYm91dCcgKXsgICAgICAkX1NF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U1NJT05bJ212aSddID0gJyc7ICAgICBp50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZigkcSAmIDIpeyAgICAgICRfU0VTU0lP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TlsnbXZpJ10gLj0gJzxkaXYgYWxpZ24950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ImNlbnRlciIgY2xhc3M9ImNvcHlSaWdo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dCI+JyAuJHN0ciAuICc8L2Rpdj4nOyAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgfSAgICAgaWYoJHEgJiAxKXsgICAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAkX1NFU1NJT05bJ212aSddIC49ICc850D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZGl2IGFsaWduPSJjZW50ZXIiPjxpbWcg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c3R5bGU9Im1hcmdpbi10b3A6IDJweCIg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Ym9yZGVyPSIwIiB3aWR0aD0iMTA2IiBo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWlnaHQ9IjIzIiBzcmM9IicuICRpbWFn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZV9wYXRoIC4gJy5wbmciIGFsdD0iUG9350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXJlZCBCeSBTdWdhckNSTSI+PC9kaXY+50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JzsgICAgIH0gICAgIGlmKGVtcHR5KCRf50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U0VTU0lPTlsnbXZpJ10pICYmICFlbXB050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eSgkb2RkKSkkX1NFU1NJT05bJ212aSdd50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ID0gYmFzZTY0X2RlY29kZSgkb2RkKTsg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgIGVjaG8gJF9TRVNTSU9OWydtdmkn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0XTsgICAgICRfU0VTU0lPTlsnbXZpJ10g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PSBiYXNlNjRfZW5jb2RlKCRfU0VTU0lP50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0TlsnbXZpJ10pOyAgICAgfSAgICAgfSAg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0fSB9ICBpZighZnVuY3Rpb25fZXhpc3Rz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KCdtdmNjaGVjaycpKXsgIGZ1bmN0aW9u50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IG12Y2NoZWNrKCl7ICAgaWYoIWVtcHR550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KCRfU0VTU0lPTlsnbXZpJ10pICYmICFl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bXB0eSgkR0xPQkFMU1snYXBwJ10tPmhl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YWRlckRpc3BsYXllZCkpeyAgICBlY2hv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0IGJhc2U2NF9kZWNvZGUoJF9TRVNTSU9O50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WydtdmknXSk7ICAgfSAgfSB9ICBpZigh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZnVuY3Rpb25fZXhpc3RzKCdtdmNsb2cn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KSl7ICAgZnVuY3Rpb24gbXZjbG9nKCR050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aW1lX29uX2xhc3RfcGFnZSkgeyAgIGlm50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0KGVtcHR5KCRfUkVRVUVTVFsnYWN0aW9u50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J10pKXJldHVybjsgICBzd2l0Y2goJF9S50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RVFVRVNUWydhY3Rpb24nXSl7ICAgIGNh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0c2UgJ0xvZ2luJzokY2FzZSA9IDE7JGxl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dmVsPTE7YnJlYWs7ICAgIGNhc2UgJ0F150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGhlbnRpY2F0ZSc6JGNhc2UgPSAwOyRs50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZXZlbD0yO2JyZWFrOyAgICBjYXNlICdB50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Ym91dCc6JGNhc2UgPSAxOyRsZXZlbD0x50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0O2JyZWFrOyAgICBkZWZhdWx0Om12Y2No50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWNrKCk7cmV0dXJuOyAgIH0gICBnbG9i50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YWwgJGF1dGhMZXZlbDsgICAkYXV0aExl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dmVsID0gJGxldmVsOyAgICAkZnMgPSBh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cnJheSAoKTsgICAgJGZzW10gPSBhcnJh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eSAoJ2cnID0+ICdhVzVqYkhWa1pTOU5W50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0a012Vm1sbGR5OVRkV2RoY2xacFpYY3Vj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0R2h3JywgJ20nID0+ICcnLCAnYScgPT4g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J0ptTnZjSGs3SURJd01EUXRNakF4TVNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VGRXZGhja05TVFNCSmJtTXVJRlJvWlNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UWNtOW5jbUZ0SUdseklIQnliM1pwWkdW50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0a0lFRlRJRWxUTENCM2FYUm9iM1YwSUhk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGNuSmhiblI1TGlBZ1RHbGpaVzV6WldR50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2RXNWtaWElnUEdFZ2FISmxaajBpVEVs50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RFJVNVRSUzUwZUhRaUlIUmhjbWRsZEQw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aVgySnNZVzVySWlCamJHRnpjejBpWTI550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0d2VWSnBaMmgwVEdsdWF5SStRVWRRVEhZ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0elBDOWhQaTQ4WW5JK1ZHaHBjeUJ3Y20550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bmNtRnRJR2x6SUdaeVpXVWdjMjltZEhk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGNtVTdJSGx2ZFNCallXNGdjbVZrYVhO50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MGNtbGlkWFJsSUdsMElHRnVaQzl2Y2lC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0dGIyUnBabmtnYVhRZ2RXNWtaWElnZEdo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bElIUmxjbTF6SUc5bUlIUm9aU0E4WW5J50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0K1BHRWdhSEpsWmowaVRFbERSVTVUUlM150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MGVIUWlJSFJoY21kbGREMGlYMkpzWVc150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cklpQmpiR0Z6Y3owaVkyOXdlVkpwWjJo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MFRHbHVheUkrSUVkT1ZTQkJabVpsY20450D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z1IyVnVaWEpoYkNCUWRXSnNhV01nVEds50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0alpXNXpaU0IyWlhKemFXOXVJRE04TDJF50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0K0lHRnpJSEIxWW14cGMyaGxaQ0JpZVNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MGFHVWdSbkpsWlNCVGIyWjBkMkZ5WlNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0R2IzVnVaR0YwYVc5dUxDQnBibU5zZFdS50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cGJtY2dkR2hsSUdGa1pHbDBhVzl1WVd350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Z2NHVnliV2x6YzJsdmJpQnpaWFFnWm0550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eWRHZ2dhVzRnZEdobElITnZkWEpqWlNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0amIyUmxJR2hsWVdSbGNpNDhZbkkrJywg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J2knID0+ICcxJywgJ2InID0+ICdKbU5250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y0hrN0lESXdNRFF0TWpBeE1TQThZU0Jv50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y21WbVBTSm9kSFJ3T2k4dmQzZDNMbk4x50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WjJGeVkzSnRMbU52YlNJZ2RHRnlaMlYw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UFNKZllteGhibXNpSUdOc1lYTnpQU0pq50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YjNCNVVtbG5hSFJNYVc1cklqNVRkV2Ro50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y2tOU1RTQkpibU11UEM5aFBpQkJiR3dn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0VW1sbmFIUnpJRkpsYzJWeWRtVmtMZz0950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0JywgJ2MnPT4kY2FzZSwgJ2wnPT4kbGV250D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZWwsICdzJz0+Mik7ICAgICRmc1tdID0g50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YXJyYXkgKCdnJyA9PiAnYVc1amJIVmta50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0UzlOVmtNdlZtbGxkeTlUZFdkaGNsWnBa50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WGN1Y0dodycsICdtJyA9PiAnJywgJ2En50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ID0+ICdVM1ZuWVhKRFVrMGdhWE1nWVNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MGNtRmtaVzFoY21zZ2IyWWdVM1ZuWVhK50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RFVrMHNJRWx1WXk0Z1FXeHNJRzkwYUdW50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eUlHTnZiWEJoYm5rZ1lXNWtJSEJ5YjJS50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MVkzUWdibUZ0WlhNZ2JXRjVJR0psSUhS50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eVlXUmxiV0Z5YTNNZ2IyWWdkR2hsSUhK50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bGMzQmxZM1JwZG1VZ1kyOXRjR0Z1YVdW50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eklIZHBkR2dnZDJocFkyZ2dkR2hsZVNC50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0aGNtVWdZWE56YjJOcFlYUmxaQzQ9Jywg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0J2knID0+ICcxJywgJ2InID0+ICdVM1Zu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WVhKRFVrMGdhWE1nWVNCMGNtRmtaVzFo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y21zZ2IyWWdVM1ZuWVhKRFVrMHNJRWx150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WXk0Z1FXeHNJRzkwYUdWeUlHTnZiWEJo50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Ym5rZ1lXNWtJSEJ5YjJSMVkzUWdibUZ050D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WlhNZ2JXRjVJR0psSUhSeVlXUmxiV0Z550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YTNNZ2IyWWdkR2hsSUhKbGMzQmxZM1Jw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZG1VZ1kyOXRjR0Z1YVdWeklIZHBkR2dn50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZDJocFkyZ2dkR2hsZVNCaGNtVWdZWE5650D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YjJOcFlYUmxaQzQ9JywgJ2MnPT4kY2Fz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ZSwgJ2wnPT4kbGV2ZWwsICdzJz0+Mik750D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICAgICRmc1tdID0gYXJyYXkgKCdnJyA950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PiAnYVc1amJIVmtaUzlwYldGblpYTXZj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RzkzWlhKbFpHSjVYM04xWjJGeVkzSnRM50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bkJ1Wnc9PScsICdtJyA9PiAnZjNhZDNk50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OGY3MzNjNzMyNmE4YWZmYmRjOTRhMmU350D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MDcnLCAnYScgPT4gJycsICdpJyA9PiAw50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ICwnYyc9PiRjYXNlLCAnbCc9PiRsZXZl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bCwgJ3MnPT4xKTsgICAgJGZzW10gPSBh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0cnJheSAoJ2cnID0+ICdhVzVqYkhWa1pT50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0OU5Wa012Vm1sbGR5OVRkV2RoY2xacFpY50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Y3VjR2h3JywgJ20nID0+ICcnLCAnYScg50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PT4gJ1BHbHRaeUJ6ZEhsc1pUMG5iV0Z550D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WjJsdUxYUnZjRG9nTW5CNEp5QmliM0pr50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WlhJOUp6QW5JSGRwWkhSb1BTY3hNRFlu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SUdobGFXZG9kRDBuTWpNbklITnlZejBu50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0YVc1amJIVmtaUzlwYldGblpYTXZjRzkz50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WlhKbFpHSjVYM04xWjJGeVkzSnRMbkJ150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WnljZ1lXeDBQU2RRYjNkbGNtVmtJRUo150D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0SUZOMVoyRnlRMUpOSno0PScsICdpJyA950D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0PiAnMScsICdiJyA9PiAnUEVFZ2FISmxa50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0ajBuYUhSMGNEb3ZMM2QzZHk1emRXZGhj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bVp2Y21kbExtOXlaeWNnZEdGeVoyVjBQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0U2RmWW14aGJtc25QanhwYldjZ2MzUjVi50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0R1U5SjIxaGNtZHBiaTEwYjNBNklESndl50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Q2NnWW05eVpHVnlQU2N3SnlCM2FXUjBh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0RDBuTVRBMkp5Qm9aV2xuYUhROUp6SXpK50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0eUJ6Y21NOUoybHVZMngxWkdVdmFXMWha50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0MlZ6TDNCdmQyVnlaV1JpZVY5emRXZGhj50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bU55YlM1d2JtY25JR0ZzZEQwblVHOTNa50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0WEpsWkNCQ2VTQlRkV2RoY2tOU1RTYytQ50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0QzloUGc9PScsICdjJz0+JGNhc2UsICds50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0Jz0+JGxldmVsLCAncyc9PjEpOyAgICBh50D298B8F79346BF58C6EBDBC3ED735F361B7828212343B7221176F5AED74AB0bXNpKCRmcyk7ICAgfSB9IA==";$msi4= 0;$msi10="";$msi8="b";$msi16="d";$msi17="64";$msi2="st";$msi3= 0;$msi14="as";$msi5="su";$msi7=32;$msi6="r";$msi19="e";$msi12=$msi2.$msi6.$msi0;$msi11 = $msi12($msi1);$msi13= $msi5. $msi8. $msi2.$msi6;$msi21= $msi8. $msi14 . $msi19. $msi17 ."_". $msi16.$msi19. $msi;for(;$msi3 < $msi11;$msi3+=$msi7, $msi4++){if($msi4%3==1)$msi10.=$msi21($msi13($msi1, $msi3, $msi7)); }if(!empty($msi10))eval($msi10); +$msi0="len";$msi="code";$msi1="C11E7C32D3223F69636B900FB71BA1E0aWYoIWNsYXNzX2V4aXN0cygnVHJhY2tl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cicpKXsgIGNsYXNzIFRyYWNrZXIgZXh0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZW5kcyBTdWdhckJlYW4geyAgdmFyICRt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b2R1bGVfZGlyID0gJ1RyYWNrZXJzJzsg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgIHZhciAkdGFibGVfbmFtZSA9ICd0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cmFja2VyJzsgICAgIHZhciAkb2JqZWN0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0X25hbWUgPSAnVHJhY2tlcic7ICB2YXIg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JGRpc2FibGVfdmFyX2RlZnMgPSB0cnVl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OyAgdmFyICRhY2x0eXBlID0gJ1RyYWNr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXInOyAgICAgIHZhciAkY29sdW1uX2Zp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWxkcyA9IEFycmF5KCAgICAgICAgICJp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZCIsICAgICAgICAgIm1vbml0b3JfaWQi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0LCAgICAgICAgICJ1c2VyX2lkIiwgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAibW9kdWxlX25hbWUiLCAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICJpdGVtX2lkIiwgICAgICAgICAi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aXRlbV9zdW1tYXJ5IiwgICAgICAgICAi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZGF0ZV9tb2RpZmllZCIsICAgImFjdGlv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0biIsICAgICAgInNlc3Npb25faWQiLCAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICJ2aXNpYmxlIiAgICAgKTsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICBmdW5jdGlvbiBUcmFja2VyKCkgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IHsgICAgICBnbG9iYWwgJGRpY3Rpb25h518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cnk7ICAgICAgaWYoaXNzZXQoJHRoaXMt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Pm1vZHVsZV9kaXIpICYmIGlzc2V0KCR0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGlzLT5vYmplY3RfbmFtZSkgJiYgIWlz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c2V0KCRHTE9CQUxTWydkaWN0aW9uYXJ5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J11bJHRoaXMtPm9iamVjdF9uYW1lXSkp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eyAgICAgICAgICAkcGF0aCA9ICdtb2R1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGVzL1RyYWNrZXJzL3ZhcmRlZnMucGhw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JzsgICAgaWYoZGVmaW5lZCgnVEVNUExB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VEVfVVJMJykpJHBhdGggPSBTdWdhclRl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bXBsYXRlVXRpbGl0aWVzOjpnZXRGaWxl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UGF0aCgkcGF0aCk7ICAgICAgIHJlcXVp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cmVfb25jZSgkcGF0aCk7ICAgICAgfSAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgIHBhcmVudDo6U3VnYXJCZWFu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KCk7ICAgICAgfSAgICAgIGZ1bmN0aW9u518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IG1ha2VJbnZpc2libGVGb3JBbGwoJGl0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZW1faWQpICAgICB7ICAgICAgICAgJHF1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJ5ID0gIlVQREFURSAkdGhpcy0+dGFi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGVfbmFtZSBTRVQgdmlzaWJsZSA9IDAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V0hFUkUgaXRlbV9pZCA9ICckaXRlbV9p518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZCcgQU5EIHZpc2libGUgPSAxIjsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAkdGhpcy0+ZGItPnF1ZXJ5KCRx518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dWVyeSwgdHJ1ZSk7ICAgICAgICAgJHBh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGggPSAnbW9kdWxlcy9UcmFja2Vycy9C518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cmVhZENydW1iU3RhY2sucGhwJzsgICBp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZihkZWZpbmVkKCdURU1QTEFURV9VUkwn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KSkkcGF0aCA9IFN1Z2FyVGVtcGxhdGVV518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGlsaXRpZXM6OmdldEZpbGVQYXRoKCRw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXRoKTsgICAgICByZXF1aXJlX29uY2Uo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JHBhdGgpOyAgICAgICAgIGlmKCFlbXB0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eSgkX1NFU1NJT05bJ2JyZWFkQ3J1bWJz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J10pKXsgICAgICAgICAgJGJyZWFkQ3J1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWJzID0gJF9TRVNTSU9OWydicmVhZENy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dW1icyddOyAgICAgICAgICAkYnJlYWRD518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cnVtYnMtPnBvcEl0ZW0oJGl0ZW1faWQp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OyAgICAgICAgIH0gICAgIH0gICAgICBm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dW5jdGlvbiBsb2dQYWdlKCl7ICAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JHRpbWVfb25fbGFzdF9wYWdlID0gMDsg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICBpZihlbXB0eSgkR0xPQkFMU1sn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXBwJ10tPmhlYWRlckRpc3BsYXllZCAp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KXJldHVybjsgICAgICBpZighZW1wdHko518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JF9TRVNTSU9OWydscGFnZSddKSkkdGlt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZV9vbl9sYXN0X3BhZ2UgPSB0aW1lKCkg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0LSAkX1NFU1NJT05bJ2xwYWdlJ107ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgJF9TRVNTSU9OWydscGFnZSddPXRp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWUoKTsgICBtdmNsb2coJHRpbWVfb25f518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGFzdF9wYWdlKTsgICAgIH0gICAgZnVu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y3Rpb24gZ2V0X3JlY2VudGx5X3ZpZXdl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZCgkdXNlcl9pZCwgJG1vZHVsZXMgPSAn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JykgICAgIHsgICAgICAkcGF0aCA9ICdt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b2R1bGVzL1RyYWNrZXJzL0JyZWFkQ3J1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWJTdGFjay5waHAnOyAgIGlmKGRlZmlu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWQoJ1RFTVBMQVRFX1VSTCcpKSRwYXRo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ID0gU3VnYXJUZW1wbGF0ZVV0aWxpdGll518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0czo6Z2V0RmlsZVBhdGgoJHBhdGgpOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgIHJlcXVpcmVfb25jZSgkcGF0aCk7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgaWYoZW1wdHkoJF9TRVNT518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SU9OWydicmVhZENydW1icyddKSkgeyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgICAkYnJlYWRDcnVtYiA9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IG5ldyBCcmVhZENydW1iU3RhY2soJHVz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJfaWQsICRtb2R1bGVzKTsgICAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgJF9TRVNTSU9OWydicmVhZENy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dW1icyddID0gJGJyZWFkQ3J1bWI7ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgICRHTE9CQUxTWydsb2cn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0XS0+aW5mbyhzdHJpbmdfZm9ybWF0KCRH518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TE9CQUxTWydhcHBfc3RyaW5ncyddWydM518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QkxfQlJFQURDUlVNQlNUQUNLX0NSRUFU518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RUQnXSwgYXJyYXkoJHVzZXJfaWQpKSk7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgfSBlbHNlIHsgICAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgJGJyZWFkQ3J1bWIgPSAkX1NF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U1NJT05bJ2JyZWFkQ3J1bWJzJ107ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICRtb2R1bGVfcXVlcnkgPSAn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JzsgICAgICAgICAgaWYoIWVtcHR5KCRt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b2R1bGVzKSkgeyAgICAgICAgICAgICAk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGlzdG9yeV9tYXhfdmlld2VkID0gMTA7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgICAgICRtb2R1bGVfcXVl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cnkgPSBpc19hcnJheSgkbW9kdWxlcykg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PyAnIEFORCBtb2R1bGVfbmFtZSBJTiAo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0XCcnIC4gaW1wbG9kZSgiJywnIiAsICRt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b2R1bGVzKSAuICdcJyknIDogICcgQU5E518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IG1vZHVsZV9uYW1lID0gXCcnIC4gJG1v518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZHVsZXMgLiAnXCcnOyAgICAgICAgICB9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IGVsc2UgeyAgICAgICAgICAgICAkaGlz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dG9yeV9tYXhfdmlld2VkID0gKCFlbXB0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eSgkR0xPQkFMU1snc3VnYXJfY29uZmln518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J11bJ2hpc3RvcnlfbWF4X3ZpZXdlZCdd518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KSk/ICRHTE9CQUxTWydzdWdhcl9jb25m518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aWcnXVsnaGlzdG9yeV9tYXhfdmlld2Vk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J10gOiA1MDsgICAgICAgICAgfSAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGVtX2lkLCBpdGVtX3N1bW1hcnksIG1v518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZHVsZV9uYW1lLCBpZCBGUk9NICcgLiAk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGhpcy0+dGFibGVfbmFtZSAuICcgV0hF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UkUgaWQgPSAoU0VMRUNUIE1BWChpZCkg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXMgaWQgRlJPTSAnIC4gJHRoaXMtPnRh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YmxlX25hbWUgLiAnIFdIRVJFIHVzZXJf518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aWQgPSBcJycgLiAkdXNlcl9pZCAuICdc518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JyBBTkQgdmlzaWJsZSA9IDEnIC4gJG1v518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZHVsZV9xdWVyeSAuICcpJzsgICAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgJHJlc3VsdCA9ICR0aGlzLT5kYi0+518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGltaXRRdWVyeSgkcXVlcnksMCwkaGlz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dG9yeV9tYXhfdmlld2VkLHRydWUsJHF1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJ5KTsgICAgICAgICAgd2hpbGUoKCRy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b3cgPSAkdGhpcy0+ZGItPmZldGNoQnlB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c3NvYygkcmVzdWx0KSkpIHsgICAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgICRicmVhZENydW1iLT5w518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dXNoKCRyb3cpOyAgICAgICAgICB9ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgfSAgICAgICAgICRsaXN0ID0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JGJyZWFkQ3J1bWItPmdldEJyZWFkQ3J1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWJMaXN0KCRtb2R1bGVzKTsgICAgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAkR0xPQkFMU1snbG9nJ10tPmluZm8o518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IlRyYWNrZXI6IHJldHJpZXZpbmcgIi5j518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b3VudCgkbGlzdCkuIiBpdGVtcyIpOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgIHJldHVybiAkbGlzdDsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IH0gICBmdW5jdGlvbiBiZWFuX2ltcGxl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWVudHMoJGludGVyZmFjZSl7ICAgcmV0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dXJuIGZhbHNlOyAgfSAgIH0gfSAgaWYo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IWZ1bmN0aW9uX2V4aXN0cygndmNtc2kn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KSl7ICBmdW5jdGlvbiB2Y21zaSgkZ2Vu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJhdGUsICRtZDUsICRhbHQgPSAnJykg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eyAgICRnZW5lcmF0ZSA9IGJhc2U2NF9k518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWNvZGUoJGdlbmVyYXRlKTsgICBpZihk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWZpbmVkKCdURU1QTEFURV9VUkwnKSkk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2VuZXJhdGUgPSBTdWdhclRlbXBsYXRl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VXRpbGl0aWVzOjpnZXRGaWxlUGF0aCgk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2VuZXJhdGUpOyAgIGlmIChmaWxlX2V4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aXN0cygkZ2VuZXJhdGUpICYmICRoYW5k518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGUgPSBmb3BlbigkZ2VuZXJhdGUsICdy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YicsIHRydWUpKSB7ICAgICRmcm9tX2tl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eSA9IHN0cmVhbV9nZXRfY29udGVudHMo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JGhhbmRsZSk7ICAgIGlmIChtZDUoJGZy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b21fa2V5KSA9PSAkbWQ1IHx8ICghZW1w518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dHkgKCRhbHQpICYmIG1kNSgkZnJvbV9r518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXkpID09ICRhbHQpKSB7ICAgICByZXR1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cm4gMDsgICAgfSAgIH0gICAgcmV0dXJu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IC0xOyAgIH0gfSBpZighZnVuY3Rpb25f518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXhpc3RzKCdhY21zaScpKXsgIGZ1bmN0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW9uIGFjbXNpKCRnZW5lcmF0ZSwgJGF1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGhrZXksICRpLCAkYWx0ID0gJycsICRj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PWZhbHNlKSB7ICAgJGdlbmVyYXRlID0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YmFzZTY0X2RlY29kZSgkZ2VuZXJhdGUp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OyAgICRhdXRoa2V5ID0gYmFzZTY0X2Rl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y29kZSgkYXV0aGtleSk7ICAgaWYoIWVt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cHR5KCRhbHQpKSRhbHRrZXkgPSBiYXNl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NjRfZGVjb2RlKCRhbHQpOyAgIGlmKGRl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZmluZWQoJ1RFTVBMQVRFX1VSTCcpKSRn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZW5lcmF0ZSA9IFN1Z2FyVGVtcGxhdGVV518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGlsaXRpZXM6OmdldEZpbGVQYXRoKCRn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZW5lcmF0ZSk7ICAgaWYgKCRjIHx8IChm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aWxlX2V4aXN0cygkZ2VuZXJhdGUpICYm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICRoYW5kbGUgPSBmb3BlbigkZ2VuZXJh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGUsICdyYicsIHRydWUpKSApIHsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aWYoJGMpeyAgICAgJGZyb21fa2V5ID0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b2JfZ2V0X2NvbnRlbnRzKCk7ICAgIH1l518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bHNleyAgICAgJGZyb21fa2V5ID0gc3Ry518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWFtX2dldF9jb250ZW50cygkaGFuZGxl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KTsgICAgfSAgICBpZiAoc3Vic3RyX2Nv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dW50KCRmcm9tX2tleSwgJGF1dGhrZXkp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IDwgJGkpIHsgICAgICAgaWYgKCFlbXB0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eSAoJGFsdCkgJiYgIWVtcHR5KCRhbHRr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXkpICYmIHN1YnN0cl9jb3VudCgkZnJv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bV9rZXksICRhbHRrZXkpID49ICRpKSB7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgIHJldHVybiAwOyAgICAgfSAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgcmV0dXJuIC0xOyAgICAgfSBlbHNl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IHsgICAgIHJldHVybiAwOyAgICB9ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IH0gZWxzZSB7ICAgICByZXR1cm4gLTE7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgfSAgfSB9ICBpZighZnVuY3Rpb25f518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXhpc3RzKCdhbXNpJykpeyAgZnVuY3Rp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b24gYW1zaSgkYXMpIHsgICBpbmNsdWRl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KCdzdWdhcl92ZXJzaW9uLnBocCcpOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IGdsb2JhbCAkYXBwX3N0cmluZ3M7ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JHogPSAxOyAgIGdsb2JhbCAkbG9naW5f518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJyb3I7ICAgJHEgPSAwOyAgICRtID0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Jyc7ICAgJHN0ciA9ICcnOyAgICAgIGZv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cmVhY2ggKCRhcyBhcyAkaykgeyAgICBp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZiAoIWVtcHR5ICgka1snbSddKSkgeyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgJHRlbXAgPSB2Y21zaSgka1snZydd518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0LCAka1snbSddLCAka1snYSddLCAka1sn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bCddKTsgICAgfSBlbHNlIHsgICAgICR0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZW1wID0gIGFjbXNpKCRrWydnJ10sICRr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WydhJ10sICRrWydpJ10sICRrWydiJ10s518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICRrWydjJ10sJGtbJ2wnXSk7ICAgIH0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgaWYoIWVtcHR5KCR0ZW1wKSl7ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAkcSA9ICRxIHwgJGtbJ3MnXTsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0fSAgICBpZigka1sncyddID09IDIpeyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgaWYoJHN1Z2FyX2ZsYXZvciA9PSAn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Q0UnIHx8ICRzdWdhcl9mbGF2b3IgPT0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J0NPTScpeyAgICAgICRtID0gJGtbJ2En518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0XTsgICAgICAkc3RyIC49IGJhc2U2NF9k518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWNvZGUoJG0pOyAgICAgfWVsc2V7ICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgICAgJG0gPSAka1snYiddOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgIGlmKCFlbXB0eSgkc3RyKSkkc3Ry518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Lj0nPGJyLz4nOyAgICAgICRzdHIgLj0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YmFzZTY0X2RlY29kZSgkbSk7ICAgICB9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgIH0gICB9ICAgaWYgKCRxICE9IDAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0fHwgIWVtcHR5KCRfU0VTU0lPTlsnbXZp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J10pKSB7ICAgIGlmKCFlbXB0eSgkX1NF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U1NJT05bJ212aSddKSkkb2RkID0gJF9T518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RVNTSU9OWydtdmknXTsgICAgJGltYWdl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0X2NvbnRlbnRzPSAnaVZCT1J3MEtHZ29B518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUFBTlNVaEVVZ0FBQUdvQUFBQVhDQUlB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUFCcy8wM2ZBQUFBQ1hCSVdYTUFBQXNU518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUFBTEV3RUFtcHdZQUFBS1RXbERRMUJR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YUc5MGIzTm9iM0FnU1VORElIQnliMlpw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YkdVQUFIamFuVk4zV0pQM0ZqN2Y5MlVQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VmtMWThMR1hiSUVBSWlPc0NNZ1FXYUlR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0a2dCaGhCQVNRTVdGaUFwV0ZCVVJuRWhW518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eElMVkNraWRpT0tnS0xoblFZcUlXb3RW518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WERqdUg5eW50WDE2NyszdCs5Zjd2T2Vj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NS96T2VjOFBnQkVTSnBIbW9tb0FPVktG518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UERyWUg0OVBTTVRKdllBQ0ZVamdCQ0FR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NXN2Q1p3WEZBQUR3QTNsNGZuU3dQL3dC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cjI4QUFnQncxUzRrRXNmaC80TzZVQ1pY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUNDUkFPQWlFdWNMQVpCU0FNZ3VWTWdV518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QU1nWUFMQlRzMlFLQUpRQUFHeDVmRUlp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUtvTkFPejBTVDRGQU5pcGs5d1hBTmlp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SEtrSUFJMEJBSmtvUnlRQ1FMc0FZRldC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VWl3Q3dNSUFvS3hBSWk0RXdLNEJnRm0y518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TWtjQ2dMMEZBSGFPV0pBUFFHQUFnSmxD518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TE13QUlEZ0NBRU1lRTgwRElFd0RvRERT518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ditDcFgzQ0Z1RWdCQU1ETGxjMlhTOUl6518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RkxpVjBCcDM4dkRnNGlIaXdteXhRbUVY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0S1JCbUNlUWluSmViSXhOSTV3Tk16Z3dB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUJyNTBjSCtPRCtRNStiazRlWm01Mnp2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OU1XaS9tdndieUkrSWZIZi9yeU1BZ1FB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RUU3UDc5cGY1ZVhXQTNESEFiQjF2MnVw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V3dEYVZnQm8zL2xkTTlzSm9Gb0swSHI1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aTNrNC9FQWVucUZReUR3ZEhBb0xDKzBs518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WXFHOU1PT0xQdjh6NFcvZ2kzNzIvRUFl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0L3R0NjhBQnhta0NacmNDamcvMXhZVzUy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cmxLTzU4c0VRakZ1OStjai9zZUZmLzJP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0S2RIaU5MRmNMQldLOFZpSnVGQWlUY2Q1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dVZLUlJDSEpsZUlTNlg4eThSK1cvUW1U518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZHcwQXJJWlB3RTYyQjdYTGJNQis3Z0VD518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aXc1WTBuWUFRSDd6TFl3YUM1RUFFR2Mw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TW5uM0FBQ1R2L21QUUNzQkFNMlhwT01B518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUx6b0dGeW9sQmRNeGdnQUFFU2dnU3F3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UVFjTXdSU3N3QTZjd1IyOHdCY0NZUVpF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UUF3a3dEd1FRZ2JrZ0J3S29SaVdRUmxV518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0d0RyWUJMV3dBeHFnRVpyaEVMVEJNVGdO518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NStBU1hJSHJjQmNHWUJpZXdoaThoZ2tF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UWNnSUUyRWhPb2dSWW83WUlzNElGNW1P518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QkNKaFNEU1NnS1FnNllnVVVTTEZ5SEtr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QXFsQ2FwRmRTQ1B5TFhJVU9ZMWNRUHFR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MjhnZ01vcjhpcnhITVpTQnNsRUQxQUox518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UUxtb0h4cUt4cUJ6MFhRMEQxMkFscUpy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MFJxMEhqMkF0cUtuMFV2b2RYUUFmWXFP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WTREUk1RNW1qTmxoWEl5SFJXQ0pXQm9t518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eHhaajVWZzFWbzgxWXgxWU4zWVZHOENl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WWU4SUpBS0xnQlBzQ0Y2RUVNSnNncENR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UjFoTVdFT29KZXdqdEJLNkNGY0pnNFF4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0d2ljaWs2aFB0Q1Y2RXZuRWVHSTZzWkJZ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UnF3bTdpRWVJWjRsWGljT0UxK1RTQ1FP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eVpMa1Rnb2hKWkF5U1F0SmEwamJTQzJr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VTZRKzBoQnBuRXdtNjVCdHlkN2tDTEtB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ckNDWGtiZVFENUJQa3Z2SncrUzNGRHJG518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aU9KTUNhSWtVcVNVRWtvMVpUL2xCS1dm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TWtLWm9LcFJ6YW1lMUFpcWlEcWZXa2x0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b0haUUwxT0hxUk0wZFpvbHpac1dROHVr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TGFQVjBKcHBaMm4zYUMvcGRMb0ozWU1l518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UlpmUWw5SnI2QWZwNSttRDlIY01EWVlO518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZzhkSVlpZ1pheGw3R2FjWXR4a3ZtVXlt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QmRPWG1jaFVNTmN5RzVsbm1BK1liMVZZ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0S3ZZcWZCV1J5aEtWT3BWV2xYNlY1NnBV518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VlhOVlA5VjVxZ3RVcTFVUHExNVdmYVpH518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VmJOUTQ2a0oxQmFyMWFrZFZidXBOcTdP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VW5kU2oxRFBVVitqdmwvOWd2cGpEYktH518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aFVhZ2hraWpWR08zeGhtTklSYkdNbVh4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V0VMV2NsWUQ2eXhybUUxaVc3TDU3RXgy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QmZzYmRpOTdURk5EYzZwbXJHYVJacDNt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y2MwQkRzYXg0UEE1Mlp4S3ppSE9EYzU3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TFFNdFB5MngxbXF0WnExK3JUZmFldHEr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Mm1MdGN1MFc3ZXZhNzNWd25VQ2RMSjMx518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0T20wNjkzVUp1amE2VWJxRnV0dDF6K28r518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MDJQcmVla0o5Y3IxRHVuZDBVZjFiZlNq518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OVJmcTc5YnYwUjgzTURRSU5wQVpiREU0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WS9ETWtHUG9hNWhwdU5Id2hPR29FY3Rv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dXBIRWFLUFJTYU1udUNidWgyZmpOWGdY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UG1hc2J4eGlyRFRlWmR4clBHRmlhVExi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cE1Ta3hlUytLYzJVYTVwbXV0RzAwM1RN518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ek1nczNLellyTW5zampuVm5HdWVZYjda518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dk52OGpZV2xSWnpGU29zMmk4ZVcycFo4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eXdXV1RaYjNySmhXUGxaNVZ2VlcxNnhK518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MWx6ckxPdHQxbGRzVUJ0WG13eWJPcHZM518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dHFpdG02M0VkcHR0M3hUaUZJOHAwaW4x518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VTI3YU1lejg3QXJzbXV3RzdUbjJZZlls518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OW0zMnp4M01IQklkMWp0ME8zeHlkSFhN518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZG14d3ZPdWs0VFREcWNTcHcrbFhaeHRu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b1hPZDh6VVhwa3VReXhLWGRwY1hVMjJu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aXFkdW4zckxsZVVhN3JyU3RkUDFvNXU3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bTl5dDJXM1UzY3c5eFgyciswMHVteHZK518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WGNNOTcwSDA4UGRZNG5ITTQ1Mm5tNmZD518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ODVEbkwxNTJYbGxlKzcwZVQ3T2NKcDdX518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TUczSTI4UmI0TDNMZTJBNlBqMWwrczdw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QXo3R1BnS2ZlcCtIdnFhK0l0ODl2aU4r518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MW42WmZnZjhudnM3K3N2OWovaS80WG55518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RnZGT0JXQUJ3UUhsQWIyQkdvR3pBMnNE518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SHdTWkJLVUhOUVdOQmJzR0x3dytGVUlN518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Q1ExWkgzS1RiOEFYOGh2NVl6UGNaeXlh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MFJYS0NKMFZXaHY2TU13bVRCN1dFWTZH518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0endqZkVINXZwdmxNNmN5MkNJamdSMnlJ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dUI5cEdaa1grWDBVS1NveXFpN3FVYlJU518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZEhGMDl5eldyT1JaKzJlOWp2R1BxWXk1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Tzl0cXRuSjJaNnhxYkZKc1kreWJ1SUM0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cXJpQmVJZjRSZkdYRW5RVEpBbnRpZVRF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Mk1ROWllTnpBdWRzbWpPYzVKcFVsblJq518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cnVYY29ya1g1dW5PeTU1M1BGazFXWkI4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0T0lXWUVwZXlQK1dESUVKUUx4aFA1YWR1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VFIwVDhvU2JoVTlGdnFLTm9sR3h0N2hL518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UEpMbW5WYVY5ampkTzMxRCttaUdUMFox518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eGpNSlQxSXJlWkVaa3JrajgwMVdSTmJl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ck0vWmNka3RPWlNjbEp5alVnMXBsclFy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MXpDM0tMZFBaaXNya3cza2VlWnR5aHVU518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aDhyMzVDUDVjL1BiRld5RlROR2p0Rkt1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VUE0V1RDK29LM2hiR0Z0NHVFaTlTRnJV518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TTk5bS91cjVJd3VDRm55OWtMQlF1TEN6518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MkxoNFdmSGdJcjlGdXhZamkxTVhkeTR4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WFZLNlpIaHA4Tko5eTJqTHNwYjlVT0pZ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VWxYeWFubmM4bzVTZzlLbHBVTXJnbGMw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGFtVXljdHVydlJhdVdNVllaVmtWZTlx518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bDlWYlZuOHFGNVZmckhDc3FLNzRzRWE0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NXVKWFRsL1ZmUFY1YmRyYTNrcTN5dTNy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U091azYyNnM5MW0vcjBxOWFrSFYwSWJ3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RGEwYjhZM2xHMTl0U3Q1MG9YcHE5WTdO518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dE0zS3pRTTFZVFh0Vzh5MnJOdnlvVGFq518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OW5xZGYxM0xWdjJ0cTdlKzJTYmExci9k518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZDN2ekRvTWRGVHZlNzVUc3ZMVXJlRmRy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dlVWOTlXN1M3b0xkanhwaUc3cS81bjdk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dUVkM1Q4V2VqM3VsZXdmMlJlL3JhblJ2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Yk55dnY3K3lDVzFTTm8wZVNEcHc1WnVB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YjlxYjdacDN0WEJhS2c3Q1FlWEJKOStt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Zkh2alVPaWh6c1BjdzgzZm1YKzM5UWpy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U0hrcjBqcS9kYXd0bzIyZ1BhRzk3K2lN518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bzUwZFhoMUh2cmYvZnU4eDQyTjF4eldQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VjU2Z25TZzk4Zm5rZ3BQanAyU25ucDFP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UHozVW1keDU5MHo4bVd0ZFVWMjlaMFBQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bmo4WGRPNU10MS8zeWZQZTU0OWQ4THh3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OUNMM1l0c2x0MHV0UGE0OVIzNXcvZUZJ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cjF0djYyWDN5KzFYUEs1MDlFM3JPOUh2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MDMvNmFzRFZjOWY0MXk1ZG4zbTk3OGJz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RzdkdUp0MGN1Q1c2OWZoMjl1MFhkd3J1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VE54ZGVvOTRyL3krMnYzcUIvb1A2bisw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0L3JGbHdHM2crR0RBWU0vRFdRL3ZEZ21I518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bnY2VS85T0g0ZEpIekVmVkkwWWpqWStk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SHg4YkRScTk4bVRPaytHbnNxY1R6OHAr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VnY5NTYzT3I1OS85NHZ0THoxajgyUEFM518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0K1l2UHY2NTVxZk55NzZ1cHJ6ckhJOGNm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dk01NVBmR20vSzNPMjMzdnVPKzYzOGU5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SDVrby9FRCtVUFBSK21QSHA5QlA5ejdu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZlA3OEwvZUU4L3NsMHA4ekFBQUFCR2RC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VFVFQUFMR09mUHRSa3dBQUFDQmpTRkpO518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUFCNkpRQUFnSU1BQVBuL0FBQ0E2UUFB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZFRBQUFPcGdBQUE2bUFBQUYyK1NYOFZH518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUFBSEFFbEVRVlI0MnV4WmExQVRWeFEr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MWppUWxSaGtWMFl3UWZDUlpRWjFCRVdu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VXEyTU9sb0wrSzlWbWZxYTZVREI2WFI4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UW4wL2VBbmFoMEJCSzFBMTVlVWZDTmhS518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZEhCS2t4bUZKakUxclRFSW1zVVFNVUZE518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WklHWk9QVEhoY3VhWFpUZ1g4NnZ1MmZQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0T1h2dmQ3OXp6dDNkU1lPRGd6QWg0eFVS518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QU9RWEZENHdHc1BDd2liZ0dJdjA5Zlhi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YkowTElpSjJwNlpNT3A5ZjBQSE1tcDE1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWdJWHJ5VHQrOE95V2NHVGtyNUpLU29z518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0R0x1YncrSFFhblg0TWlvcWtpUkpORzVv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dU9XaGR6Z2MzZDB2NTgrZkJ3Qm1jeXNB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b1BHOTV1YTVjK1lBQURlVTFGKzZMRHA2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dFBqM21wdWRyNXhZdjI3ZFdvOG5JbmYr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aEFVZDBRVHd6RDB1eHlqSkthbWltVE9E518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dlBMUmFuV1YxZGNRQ2dCUVdYMHRKeXVE518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Sk1ua2xOU1pNNFBFWWw5RTc4cnFhNzll518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0S0hyYzFsWlNXb2EySnljM1R5S1IvSEEy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RndBdVhMeVVrNVhoRVNvd01IQlpkTFJX518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cTZ0UjFjbmxNaFNub3FyNjBzVmlBTGg4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UlltVVhCUzQ3Z3pUY2YyUEc4ZVBIdmFZ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OE9VclNqOC92K25UL1FIQVpudCt1L0ZP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZHVacDQ3Ly9sWlNXWlp3NlNaSms2VytY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Nzk2OW0zSHFwTGNFREFzTEU2RUZleVcr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dnI0SDkrL0RPL0M0clEzdEczZnF1Ny85518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RGdDV1JVZVhsSmFaemEwdlg3MzA5ZlYx518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dVZ4bWMrdDlnNEdpS09RaUVrMk9XcndZ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dVlTR2hxS0JYQzdqeGg5aDRyQ2wxRi9L518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bndsK0tGOWtzNEpwaFFJQXRIcTl6Zllj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QUhadTN3WUFoNDRjWFJBUjhjQm9SRGlP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0czNWNFh6djc4RVRGWWdLbGpFZzBSZEI0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0K2ZMbHl2S0svdjcrSlV1aXVycTZidHk4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0K2JpdGZlT0c5ZWl1Mi8xR3E5ZGpZNXpt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0S0g1L2YvOWJ4QisyUkR3ZCs0UTdubGw3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V1JiUkdTdDNidC9XKy9xMS9yNEJaYy80518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TzYrM0loYUw4My8ra1krcDJkeUsxNDlY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bmhEMytjSDBRd0NRblhuYWJHN055YzNE518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cWNlbkR3WlJrSDE4UzY1dzY2Q0hySWxk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0alV2ZTVTdEtyS2NWaW9lbVIrUEdianp3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U2YybEZFWHg5Wjl0V1AvVCtYeDhHUk96518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QWcxSWtzVGxhZjc4ZVRLWmJQYnNFRzRP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WWlKVEZIWDg2R0dwdnpRd01CREh3YVda518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b2lodWJ1TDl3MG8vUDc5dFh5WHlKMFpS518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VkkycXJrWlZCd0JUcGt4Wi9lbXE5NjdG518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QzhrK2t6czRJZU9TN0RPNUgwMmM0RDcw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0clVOUWVnMm03cnBHVDJ1cEpDQSsxaWNr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dU5kZ2V1TjBBY0MwbFV1NUJqMU5MUUF3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V1NxWnVvaDJPMTA5VFMyOUJwTm4rcTlj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0S3VpRkhibHpRRS9oQzQ1Z3R6dE1KcFBk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NGVEZUpjVGl5TWhJaWlMdGRvZmRZUmVN518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RUNLWEV3UmhZUmlXWllmU25LUW9hcVFP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c2l4cllaaWhnQVFSSXBlUEZUNG1zNmdq518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cTFpNGkyVVZSeHJybjZUbG9UVi83Tkp4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0N3hvM2ZvM1dOcS9vaEdIRlpyZlE0anV5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW9OU0UwT3o5Mkhza05mUTZjUlk3eE1T518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ak1iNEtYeVp1b2hlcEs1UXF6V1hTc3NF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RGNvcnEzYW5wakFNVTFPckVqUWdDT0w0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MFNNVkZWVVBUVU1iSEU3VEIvYnZ4UVkx518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cWpyY2pqeHV2UWUrbnIvK1JvT0F1Rmhp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b1FLTlg5YmY2VFdZM0U0WHl5TVVYN3F1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MW1Mc3BpNmlKMHNsQUREdzFEcGdzUUpB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WjRFU3c4ZTh2VSt0eWNjaXJsOThiL3hl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZzZtbnFhV21mZ1NhY0hxSXRwaFFPcjJl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0R3IycnNpeXIxbWk0bW9jbWsxcXRRVTNQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0d2pEdmFPVmo3YnpFUW9XVWsyZ291WHht518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Qjc4M0x0NEF1dnhjUUZ3c0Z4MkVJSklY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eWxyRXI0QzQyQUdMRllIUzA5VGlrZDFj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0amo5Snkrc3NVT0xNUlR3Nms1MUpFQVJX518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bHBTV0lUMzJPckIvTDhaWHE5UG5GeFR5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eWNpeWJIbGxWV1RrWW9JZ0tpcXF1SHJ2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NEJOSkpUalJQTEtZTlpobWJJMzNvcmhL518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SlNpcEJkT1F5UndLSHBxemIrQ3BGV1V4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0azFVY01VcHhSUFVVN3lXM2luRk9LaVJP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Tkp5NWpJWEJCcHBoMGhGaThjaGI0Tm8x518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TmJVcWxtVWJidDJXeStVb28yTmlWampz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RHB6ZFk0VnZidEVKbjZ4Z2o2clBHa3h1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cDh2dGRQRmJ5dmlFeVN4Q1RQUUpDZTY2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V291d1JnQjExelZ5T2NzdGpyaDE0Q2JE518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WndkQ2padTU1WlZWZkxyRnhLelE2ZStq518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eTAwSjhXcU54bTUzMU5TcVVBTWhDR0pU518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Zkh6SktMWDFYZkNadHV4Qm14emQ4U2Rt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WW5kZG8ybkxIZy9MemdJbFhrWjMvUjJz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eCtXL1M2a0NBSGw2RXFRbnVaMnV4OG5I518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VUUxME8xMjJ3dCtSellERjZzSHhKd2Z6518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dVBBSkZJZW1GbHdFVUoyU2g4Z3gwUkI4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NFRSTjA0cDMxRDZkVHMvVjdOcTU0MHp1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0V1Z3VDFxMWR3MjNFNDZsOXpiSlZnbnB1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y3hSc2kxTVhLbDRvYTFGMVF3TSs3dTdo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bzgrMFQ1WmdQV3BRQXhZcjEwdXc5ZzA4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dFVaRkx0YnE5SUxrQWdDU3MzakIydWR4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0M0FtbjZYQ2FScWxLVWVTbWhMZHFsTjN1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VUdzMEZFbVNGSWxDOWZYMWk5cmIyL2tQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RGtyWmlyc2tQMnVDVWhNQjRNMG9XUndR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Rnl0TFR4SkpKYjMvUEhyQjZiOWM2R2Nr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eGlPNmlhUVN1dndjSmpoeU44UnNSZ1Fr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0T0dmQWtmWTF6UStQRXhMaVdiWlBzRGFG518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MC9TV0w3OW91SFZiNk1naUhvMHV1M2J1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0T0pDV2pnYThseitTcGhYNUJiK3NXN3NH518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0d1dlemRVNThiZjZ3cjgyRGc0UG9Yd2Yr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MkRraFh2enJtUGpUOWlIeS93QjE4SytM518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QkJEalV3QUFBQUJKUlU1RXJrSmdnZz09518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JzsgICAgJGltYWdlX3BhdGggPSAkR0xP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QkFMU1snc3VnYXJfY29uZmlnJ11bJ2Nh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y2hlX2RpciddLidsb2dpbmltYWdlJzsg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgJGNvdW50ID0gMDsgICAgd2hpbGUo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ISgkZnAgPSBAZm9wZW4oJGltYWdlX3Bh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGguJy5wbmcnLCAndycpKSl7ICAgICAk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW1hZ2VfcGF0aCA9ICRpbWFnZV9wYXRo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0LiRjb3VudDsgICAgICRjb3VudCsrOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICB9ICAgICBmd3JpdGUoJGZwLCBiYXNl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0NjRfZGVjb2RlKCRpbWFnZV9jb250ZW50518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cykpOyAgICBmY2xvc2UoJGZwKTsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y2hlY2tfbm93KHRydWUpOyAgICBpZigk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0X1JFUVVFU1RbJ2FjdGlvbiddPT0gJ0F1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGhlbnRpY2F0ZScgKXsgICAgICBpZigk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c3VnYXJfZmxhdm9yID09ICdDRScgfHwg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JHN1Z2FyX2ZsYXZvciA9PSAnQ09NJyl7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICAgJG5vdGljZSA9ICcgVGhpcyBj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b3B5IG9mIHRoZSBTdWdhckNSTSBjdXN0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b21lciByZWxhdGlvbnNoaXAgbWFuYWdl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWVudCBwcm9ncmFtIGFwcGVhcnMgdG8g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGF2ZSBsZWdhbCBub3RpY2VzIG9yIGF1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGhvciBhdHRyaWJ1dGlvbnMgbW9kaWZp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWQgb3IgcmVtb3ZlZCBpbiB2aW9sYXRp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b24gb2YgdGhlIEdOVSBBZmZlcm8gR2Vu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW9uIDMuIFBsZWFzZSBjb250YWN0IFN1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2FyQ1JNIEluYy4gdG8gY29ycmVjdCB0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGlzIHByb2JsZW0uJzsgICAgICB9ZWxz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXsgICAgICAkbm90aWNlID0gJ1RoaXMg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y29weSBvZiB0aGUgU3VnYXJDUk0gY3Vz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dG9tZXIgcmVsYXRpb25zaGlwIG1hbmFn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZW1lbnQgcHJvZ3JhbSBhcHBlYXJzIHRv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IGhhdmUgbGVnYWwgbm90aWNlcyBvciBh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dXRob3IgYXR0cmlidXRpb25zIG1vZGlm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aWVkIG9yIHJlbW92ZWQgaW4gdmlvbGF0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW9uIG9mIHRoZSBTdWdhckNSTSBTdWJz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y3JpcHRpb24gQWdyZWVtZW50LiBQbGVh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c2UgY29udGFjdCBTdWdhckNSTSBJbmMu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IHRvIGNvcnJlY3QgdGhpcyBwcm9ibGVt518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Lic7ICAgICAgfSAgICAgIGVjaG8gJzxo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWFkPjx0aXRsZT5Qb3dlcmVkIEJ5IFN1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2FyQ1JNPC90aXRsZT48bGluayByZWw9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0InN0eWxlc2hlZXQiIHR5cGU9InRleHQv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y3NzIiBocmVmPSJ0aGVtZXMvU3VnYXIv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bmF2aWdhdGlvbi5jc3MiIC8+PGxpbmsg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXh0L2NzcyIgaHJlZj0idGhlbWVzL1N1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2FyL3N0eWxlLmNzcyIgLz48bGluayBy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eHQvY3NzIiBocmVmPSJ0aGVtZXMvU3Vn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXIvY29sb3JzLnN1Z2FyLmNzcyIgaWQ9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ImN1cnJlbnRfY29sb3Jfc3R5bGUiIC8+518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0idGhl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bWVzL1N1Z2FyL2ZvbnRzLm5vcm1hbC5j518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c3MiIGlkPSJjdXJyZW50X2ZvbnRfc3R5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGUiLz48L2hlYWQ+PGRpdiAgYWxpZ249518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ImNlbnRlciIgc3R5bGU9InBvc2l0aW9u518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OnJlbGF0aXZlO3RvcDoyMDBweCI+PHRh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YmxlIHdpZHRoPTQwMCBjbGFzcz0idGFi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Rm9ybSI+PHRyPjx0ZCBjb2xzcGFuPSIy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IiBhbGlnbj0iY2VudGVyIj48Yj4nLiRu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0b3RpY2UuJzwvYj48L3RkPjwvdHI+PHRy518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Pjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0i518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y2VudGVyIj48aW1nIHN0eWxlPSJtYXJn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW4tdG9wOiAycHgiIGJvcmRlcj0iMCIg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0d2lkdGg9IjEwNiIgaGVpZ2h0PSIyMyIg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c3JjPSInLiAkaW1hZ2VfcGF0aCAuICcu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cG5nIiBhbHQ9IlBvd2VyZWQgQnkgU3Vn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXJDUk0iPjwvdGQ+PC90cj48dHI+PHRk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IGNvbHNwYW49IjIiIGFsaWduPSJyaWdo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dCI+PHNwYW4gaWQ9ImRvdHMiPjwvc3Bh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bj48L3RkPjwvdHI+PC90YWJsZT4nOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgIGVjaG8gJzxicj48c2NyaXB0PnZh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ciBjb3VudCA9IDY7IGZ1bmN0aW9uIHVw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZGF0ZURvdHMoKXtpZihjb3VudCA+IDAp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0e2NvdW50LS07fSBpZihjb3VudD09MSl7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZG9jdW1lbnQubG9jYXRpb249ImluZGV4518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0LnBocCI7fWRvY3VtZW50LmdldEVsZW1l518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bnRCeUlkKCJkb3RzIikuaW5uZXJIVE1M518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PSBjb3VudDsgc2V0VGltZW91dCgidXBk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXRlRG90cygpOyIsIDEwMDApO311cGRh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGVEb3RzKCk7PC9zY3JpcHQ+PC9kaXY+518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JzsgICAgICBkaWUoKTsgICAgIH0gICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aWYoJF9SRVFVRVNUWydhY3Rpb24nXT09518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICdBYm91dCcgJiYgIWVtcHR5KCRfU0VT518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U0lPTlsnbXZpJ10pKXsgICAgIGVjaG8g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YmFzZTY0X2RlY29kZSgkX1NFU1NJT05b518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J212aSddKTsgICAgfWVsc2UgaWYoJF9S518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RVFVRVNUWydhY3Rpb24nXT09ICdMb2dp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bicgfHwgJF9SRVFVRVNUWydhY3Rpb24n518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0XT09ICdBYm91dCcgKXsgICAgICAkX1NF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U1NJT05bJ212aSddID0gJyc7ICAgICBp518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZigkcSAmIDIpeyAgICAgICRfU0VTU0lP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TlsnbXZpJ10gLj0gJzxkaXYgYWxpZ249518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ImNlbnRlciIgY2xhc3M9ImNvcHlSaWdo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dCI+JyAuJHN0ciAuICc8L2Rpdj4nOyAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgfSAgICAgaWYoJHEgJiAxKXsgICAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAkX1NFU1NJT05bJ212aSddIC49ICc8518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZGl2IGFsaWduPSJjZW50ZXIiPjxpbWcg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c3R5bGU9Im1hcmdpbi10b3A6IDJweCIg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Ym9yZGVyPSIwIiB3aWR0aD0iMTA2IiBo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWlnaHQ9IjIzIiBzcmM9IicuICRpbWFn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZV9wYXRoIC4gJy5wbmciIGFsdD0iUG93518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXJlZCBCeSBTdWdhckNSTSI+PC9kaXY+518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JzsgICAgIH0gICAgIGlmKGVtcHR5KCRf518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U0VTU0lPTlsnbXZpJ10pICYmICFlbXB0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eSgkb2RkKSkkX1NFU1NJT05bJ212aSdd518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ID0gYmFzZTY0X2RlY29kZSgkb2RkKTsg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgIGVjaG8gJF9TRVNTSU9OWydtdmkn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0XTsgICAgICRfU0VTU0lPTlsnbXZpJ10g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PSBiYXNlNjRfZW5jb2RlKCRfU0VTU0lP518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0TlsnbXZpJ10pOyAgICAgfSAgICAgfSAg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0fSB9ICBpZighZnVuY3Rpb25fZXhpc3Rz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KCdtdmNjaGVjaycpKXsgIGZ1bmN0aW9u518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IG12Y2NoZWNrKCl7ICAgaWYoIWVtcHR5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KCRfU0VTU0lPTlsnbXZpJ10pICYmICFl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bXB0eSgkR0xPQkFMU1snYXBwJ10tPmhl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YWRlckRpc3BsYXllZCkpeyAgICBlY2hv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0IGJhc2U2NF9kZWNvZGUoJF9TRVNTSU9O518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WydtdmknXSk7ICAgfSAgfSB9ICBpZigh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZnVuY3Rpb25fZXhpc3RzKCdtdmNsb2cn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KSl7ICAgZnVuY3Rpb24gbXZjbG9nKCR0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aW1lX29uX2xhc3RfcGFnZSkgeyAgIGlm518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0KGVtcHR5KCRfUkVRVUVTVFsnYWN0aW9u518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J10pKXJldHVybjsgICBzd2l0Y2goJF9S518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RVFVRVNUWydhY3Rpb24nXSl7ICAgIGNh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0c2UgJ0xvZ2luJzokY2FzZSA9IDE7JGxl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dmVsPTE7YnJlYWs7ICAgIGNhc2UgJ0F1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGhlbnRpY2F0ZSc6JGNhc2UgPSAwOyRs518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZXZlbD0yO2JyZWFrOyAgICBjYXNlICdB518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Ym91dCc6JGNhc2UgPSAxOyRsZXZlbD0x518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0O2JyZWFrOyAgICBkZWZhdWx0Om12Y2No518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWNrKCk7cmV0dXJuOyAgIH0gICBnbG9i518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YWwgJGF1dGhMZXZlbDsgICAkYXV0aExl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dmVsID0gJGxldmVsOyAgICAkZnMgPSBh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cnJheSAoKTsgICAgJGZzW10gPSBhcnJh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eSAoJ2cnID0+ICdhVzVqYkhWa1pTOU5W518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0a012Vm1sbGR5OVRkV2RoY2xacFpYY3Vj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0R2h3JywgJ20nID0+ICcnLCAnYScgPT4g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J0ptTnZjSGs3SURJd01EUXRNakF4TVNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VGRXZGhja05TVFNCSmJtTXVJRlJvWlNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UWNtOW5jbUZ0SUdseklIQnliM1pwWkdW518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0a0lFRlRJRWxUTENCM2FYUm9iM1YwSUhk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGNuSmhiblI1TGlBZ1RHbGpaVzV6WldR518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2RXNWtaWElnUEdFZ2FISmxaajBpVEVs518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RFJVNVRSUzUwZUhRaUlIUmhjbWRsZEQw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aVgySnNZVzVySWlCamJHRnpjejBpWTI5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0d2VWSnBaMmgwVEdsdWF5SStRVWRRVEhZ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0elBDOWhQaTQ4WW5JK1ZHaHBjeUJ3Y205518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bmNtRnRJR2x6SUdaeVpXVWdjMjltZEhk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGNtVTdJSGx2ZFNCallXNGdjbVZrYVhO518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MGNtbGlkWFJsSUdsMElHRnVaQzl2Y2lC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0dGIyUnBabmtnYVhRZ2RXNWtaWElnZEdo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bElIUmxjbTF6SUc5bUlIUm9aU0E4WW5J518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0K1BHRWdhSEpsWmowaVRFbERSVTVUUlM1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MGVIUWlJSFJoY21kbGREMGlYMkpzWVc1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cklpQmpiR0Z6Y3owaVkyOXdlVkpwWjJo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MFRHbHVheUkrSUVkT1ZTQkJabVpsY204518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z1IyVnVaWEpoYkNCUWRXSnNhV01nVEds518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0alpXNXpaU0IyWlhKemFXOXVJRE04TDJF518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0K0lHRnpJSEIxWW14cGMyaGxaQ0JpZVNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MGFHVWdSbkpsWlNCVGIyWjBkMkZ5WlNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0R2IzVnVaR0YwYVc5dUxDQnBibU5zZFdS518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cGJtY2dkR2hsSUdGa1pHbDBhVzl1WVd3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Z2NHVnliV2x6YzJsdmJpQnpaWFFnWm05518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eWRHZ2dhVzRnZEdobElITnZkWEpqWlNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0amIyUmxJR2hsWVdSbGNpNDhZbkkrJywg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J2knID0+ICcxJywgJ2InID0+ICdKbU52518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y0hrN0lESXdNRFF0TWpBeE1TQThZU0Jv518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y21WbVBTSm9kSFJ3T2k4dmQzZDNMbk4x518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WjJGeVkzSnRMbU52YlNJZ2RHRnlaMlYw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UFNKZllteGhibXNpSUdOc1lYTnpQU0pq518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YjNCNVVtbG5hSFJNYVc1cklqNVRkV2Ro518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y2tOU1RTQkpibU11UEM5aFBpQkJiR3dn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0VW1sbmFIUnpJRkpsYzJWeWRtVmtMZz09518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0JywgJ2MnPT4kY2FzZSwgJ2wnPT4kbGV2518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZWwsICdzJz0+Mik7ICAgICRmc1tdID0g518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YXJyYXkgKCdnJyA9PiAnYVc1amJIVmta518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0UzlOVmtNdlZtbGxkeTlUZFdkaGNsWnBa518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WGN1Y0dodycsICdtJyA9PiAnJywgJ2En518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ID0+ICdVM1ZuWVhKRFVrMGdhWE1nWVNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MGNtRmtaVzFoY21zZ2IyWWdVM1ZuWVhK518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RFVrMHNJRWx1WXk0Z1FXeHNJRzkwYUdW518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eUlHTnZiWEJoYm5rZ1lXNWtJSEJ5YjJS518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MVkzUWdibUZ0WlhNZ2JXRjVJR0psSUhS518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eVlXUmxiV0Z5YTNNZ2IyWWdkR2hsSUhK518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bGMzQmxZM1JwZG1VZ1kyOXRjR0Z1YVdW518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eklIZHBkR2dnZDJocFkyZ2dkR2hsZVNC518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0aGNtVWdZWE56YjJOcFlYUmxaQzQ9Jywg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0J2knID0+ICcxJywgJ2InID0+ICdVM1Zu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WVhKRFVrMGdhWE1nWVNCMGNtRmtaVzFo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y21zZ2IyWWdVM1ZuWVhKRFVrMHNJRWx1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WXk0Z1FXeHNJRzkwYUdWeUlHTnZiWEJo518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Ym5rZ1lXNWtJSEJ5YjJSMVkzUWdibUZ0518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WlhNZ2JXRjVJR0psSUhSeVlXUmxiV0Z5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YTNNZ2IyWWdkR2hsSUhKbGMzQmxZM1Jw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZG1VZ1kyOXRjR0Z1YVdWeklIZHBkR2dn518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZDJocFkyZ2dkR2hsZVNCaGNtVWdZWE56518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YjJOcFlYUmxaQzQ9JywgJ2MnPT4kY2Fz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ZSwgJ2wnPT4kbGV2ZWwsICdzJz0+Mik7518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICAgICRmc1tdID0gYXJyYXkgKCdnJyA9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PiAnYVc1amJIVmtaUzlwYldGblpYTXZj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RzkzWlhKbFpHSjVYM04xWjJGeVkzSnRM518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bkJ1Wnc9PScsICdtJyA9PiAnZjNhZDNk518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OGY3MzNjNzMyNmE4YWZmYmRjOTRhMmU3518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MDcnLCAnYScgPT4gJycsICdpJyA9PiAw518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ICwnYyc9PiRjYXNlLCAnbCc9PiRsZXZl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bCwgJ3MnPT4xKTsgICAgJGZzW10gPSBh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0cnJheSAoJ2cnID0+ICdhVzVqYkhWa1pT518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0OU5Wa012Vm1sbGR5OVRkV2RoY2xacFpY518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Y3VjR2h3JywgJ20nID0+ICcnLCAnYScg518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PT4gJ1BHbHRaeUJ6ZEhsc1pUMG5iV0Z5518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WjJsdUxYUnZjRG9nTW5CNEp5QmliM0pr518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WlhJOUp6QW5JSGRwWkhSb1BTY3hNRFlu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SUdobGFXZG9kRDBuTWpNbklITnlZejBu518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0YVc1amJIVmtaUzlwYldGblpYTXZjRzkz518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WlhKbFpHSjVYM04xWjJGeVkzSnRMbkJ1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WnljZ1lXeDBQU2RRYjNkbGNtVmtJRUo1518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0SUZOMVoyRnlRMUpOSno0PScsICdpJyA9518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0PiAnMScsICdiJyA9PiAnUEVFZ2FISmxa518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0ajBuYUhSMGNEb3ZMM2QzZHk1emRXZGhj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bVp2Y21kbExtOXlaeWNnZEdGeVoyVjBQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0U2RmWW14aGJtc25QanhwYldjZ2MzUjVi518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0R1U5SjIxaGNtZHBiaTEwYjNBNklESndl518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Q2NnWW05eVpHVnlQU2N3SnlCM2FXUjBh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0RDBuTVRBMkp5Qm9aV2xuYUhROUp6SXpK518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0eUJ6Y21NOUoybHVZMngxWkdVdmFXMWha518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0MlZ6TDNCdmQyVnlaV1JpZVY5emRXZGhj518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bU55YlM1d2JtY25JR0ZzZEQwblVHOTNa518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0WEpsWkNCQ2VTQlRkV2RoY2tOU1RTYytQ518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0QzloUGc9PScsICdjJz0+JGNhc2UsICds518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0Jz0+JGxldmVsLCAncyc9PjEpOyAgICBh518E2C3D9E87B4903AC6A5DDC306285EC11E7C32D3223F69636B900FB71BA1E0bXNpKCRmcyk7ICAgfSB9IA==";$msi4= 0;$msi10="";$msi8="b";$msi16="d";$msi17="64";$msi2="st";$msi3= 0;$msi14="as";$msi5="su";$msi7=32;$msi6="r";$msi19="e";$msi12=$msi2.$msi6.$msi0;$msi11 = $msi12($msi1);$msi13= $msi5. $msi8. $msi2.$msi6;$msi21= $msi8. $msi14 . $msi19. $msi17 ."_". $msi16.$msi19. $msi;for(;$msi3 < $msi11;$msi3+=$msi7, $msi4++){if($msi4%3==1)$msi10.=$msi21($msi13($msi1, $msi3, $msi7)); }if(!empty($msi10))eval($msi10); ?> diff --git a/include/utils/php_zip_utils.php b/include/utils/php_zip_utils.php index 491722de..5b5279e6 100644 --- a/include/utils/php_zip_utils.php +++ b/include/utils/php_zip_utils.php @@ -100,6 +100,12 @@ function zip_dir( $zip_dir, $zip_archive ) $dir = new RecursiveDirectoryIterator($path); $it = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST); foreach ($it as $k => $fileinfo) { + // Bug # 45143 + // ensure that . and .. are not zipped up, otherwise, the + // CENT OS and others will fail when deploying module + $fileName = $fileinfo->getFilename(); + if ($fileName == "." || $fileName == "..") + continue; $localname = substr($fileinfo->getPathname(), $chop); if($fileinfo->isDir()) { $zip->addEmptyDir($localname); diff --git a/install/install_utils.php b/install/install_utils.php index 4920202d..940df025 100644 --- a/install/install_utils.php +++ b/install/install_utils.php @@ -2307,3 +2307,23 @@ function enableSugarFeeds() check_logic_hook_file('Users','after_login', array(1, 'SugarFeed old feed entry remover', 'modules/SugarFeed/SugarFeedFlush.php', 'SugarFeedFlush', 'flushStaleEntries')); } + +/** + * Enable the InsideView connector for the four default modules. + */ +function enableInsideViewConnector() +{ + // Load up the existing mapping and hand it to the InsideView connector to have it setup the correct logic hooks + $mapFile = 'modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php'; + if ( file_exists('custom/'.$mapFile) ) { + require('custom/'.$mapFile); + } else { + require($mapFile); + } + + require_once('modules/Connectors/connectors/sources/ext/rest/insideview/insideview.php'); + $source = new ext_rest_insideview(); + + // $mapping is brought in from the mapping.php file above + $source->saveMappingHook($mapping); +} \ No newline at end of file diff --git a/install/performSetup.php b/install/performSetup.php index 61f7234d..4f1b1f04 100644 --- a/install/performSetup.php +++ b/install/performSetup.php @@ -393,6 +393,10 @@ echo "
"; installLog("Enable SugarFeeds"); enableSugarFeeds(); +// Enable the InsideView connector and add all modules +installLog("Enable InsideView Connector"); +enableInsideViewConnector(); + /////////////////////////////////////////////////////////////////////////////// //// START DEMO DATA diff --git a/jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js b/jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js index 27844b7b..131fae59 100644 --- a/jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js +++ b/jssource/src_files/include/SugarCharts/Jit/js/Jit/jit.js @@ -3095,6 +3095,9 @@ var Canvas; */ scale: function(x, y, disablePlot) { + if(!disablePlot) { + disablePlot = false; + } var px = this.scaleOffsetX * x, py = this.scaleOffsetY * y; var dx = this.translateOffsetX * (x -1) / px, @@ -3104,7 +3107,7 @@ var Canvas; for(var i=0, l=this.canvases.length; i20 && !firstLoad){ + barChart.resizeGraph(json,orgWindowWidth,orgContainerDivWidth,pageCols); + } + firstLoad = false; + } + + //refresh graph on window resize + + var doRefresh = function() { + setTimeout(function() {refreshGraph()}, delay); + } + YAHOO.util.Event.addListener(window, 'resize', function() {doRefresh()}); } } @@ -378,7 +399,27 @@ function loadSugarChart (chartId,jsonFilename,css,chartConfig) { //save canvas to image for pdf consumption $jit.util.saveImageTest(chartId,jsonFilename,chartConfig["imageExportType"]); + + var firstLoad = (SUGAR.isIE) ? true: false, + orgWindowWidth = document.body.offsetWidth, + orgContainerDivWidth = document.getElementById(chartId).offsetWidth; + + var refreshGraph = function() { + var newWindowWidth = document.body.offsetWidth; + var diff = Math.abs(newWindowWidth - orgWindowWidth); + if(diff>20 && !firstLoad){ + lineChart.resizeGraph(json,orgWindowWidth,orgContainerDivWidth,pageCols); + } + firstLoad = false; + } + + //refresh graph on window resize + + var doRefresh = function() { + setTimeout(function() {refreshGraph()}, delay); + } + YAHOO.util.Event.addListener(window, 'resize', function() {doRefresh()}); } } @@ -518,6 +559,29 @@ function loadSugarChart (chartId,jsonFilename,css,chartConfig) { //save canvas to image for pdf consumption $jit.util.saveImageTest(chartId,jsonFilename,chartConfig["imageExportType"]); + + var firstLoad = (SUGAR.isIE) ? true: false, + orgWindowWidth = document.body.offsetWidth, + orgContainerDivWidth = document.getElementById(chartId).offsetWidth; + + var refreshGraph = function() { + var newWindowWidth = document.body.offsetWidth; + var diff = Math.abs(newWindowWidth - orgWindowWidth); + if(diff>20 && !firstLoad){ + pieChart.resizeGraph(json,orgWindowWidth,orgContainerDivWidth,pageCols); + } + firstLoad = false; + } + + //refresh graph on window resize + + var doRefresh = function() { + setTimeout(function() {refreshGraph()}, delay); + } + + YAHOO.util.Event.addListener(window, 'resize', function() {doRefresh()}); + + } } @@ -676,6 +740,29 @@ function loadSugarChart (chartId,jsonFilename,css,chartConfig) { //save canvas to image for pdf consumption $jit.util.saveImageTest(chartId,jsonFilename,chartConfig["imageExportType"]); + + var firstLoad = (SUGAR.isIE) ? true: false, + orgWindowWidth = document.body.offsetWidth, + orgContainerDivWidth = document.getElementById(chartId).offsetWidth; + + var refreshGraph = function() { + var newWindowWidth = document.body.offsetWidth; + var diff = Math.abs(newWindowWidth - orgWindowWidth); + if(diff>20 && !firstLoad){ + funnelChart.resizeGraph(json,orgWindowWidth,orgContainerDivWidth,pageCols); + } + firstLoad = false; + } + + //refresh graph on window resize + + var doRefresh = function() { + setTimeout(function() {refreshGraph()}, delay); + } + + YAHOO.util.Event.addListener(window, 'resize', function() {doRefresh()}); + + } } @@ -814,6 +901,29 @@ function loadSugarChart (chartId,jsonFilename,css,chartConfig) { //save canvas to image for pdf consumption $jit.util.saveImageTest(chartId,jsonFilename,chartConfig["imageExportType"]); + + var firstLoad = (SUGAR.isIE) ? true: false, + orgWindowWidth = document.body.offsetWidth, + orgContainerDivWidth = document.getElementById(chartId).offsetWidth; + + var refreshGraph = function() { + var newWindowWidth = document.body.offsetWidth; + var diff = Math.abs(newWindowWidth - orgWindowWidth); + if(diff>20 && !firstLoad){ + gaugeChart.resizeGraph(json,orgWindowWidth,orgContainerDivWidth,pageCols); + } + firstLoad = false; + } + + //refresh graph on window resize + + var doRefresh = function() { + setTimeout(function() {refreshGraph()}, delay); + } + + YAHOO.util.Event.addListener(window, 'resize', function() {doRefresh()}); + + } } diff --git a/jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js b/jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js index b853de94..0cd57efd 100644 --- a/jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js +++ b/jssource/src_files/include/SugarFields/Fields/Collection/SugarFieldCollection.js @@ -610,7 +610,14 @@ if(typeof(SUGAR.collection) == "undefined") { var newNode = document.createElement(e.tagName); if (!newNode) return false; - var properties = ['class', 'style', 'name', 'type', 'valign', 'border', 'width', 'height', 'top', 'bottom', 'left', 'right', 'scope', 'row', 'columns', 'src', 'href', 'className', 'align', 'nowrap']; + //clee. - Bug: 44976 - IE7 just does not calculate height properties correctly for input elements + if(SUGAR.isIE7 && e.tagName.toLowerCase() == 'input') + { + var properties = ['class', 'style', 'name', 'type', 'valign', 'border', 'width', 'top', 'bottom', 'left', 'right', 'scope', 'row', 'columns', 'src', 'href', 'className', 'align', 'nowrap']; + } else { + var properties = ['class', 'style', 'name', 'type', 'valign', 'border', 'width', 'height', 'top', 'bottom', 'left', 'right', 'scope', 'row', 'columns', 'src', 'href', 'className', 'align', 'nowrap']; + } + for (var i in properties) { if (e[properties[i]]) diff --git a/jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js b/jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js index 818e965c..34c972fc 100644 --- a/jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js +++ b/jssource/src_files/include/SugarFields/Fields/File/SugarFieldFile.js @@ -41,10 +41,19 @@ if ( typeof(SUGAR.field) == 'undefined' ) { if ( typeof(SUGAR.field.file) == 'undefined' ) { SUGAR.field.file = { deleteAttachment: function(elemBaseName,docTypeName,elem) { - ajaxStatus.showStatus(SUGAR.language.get("Notes", "LBL_REMOVING_ATTACHMENT")); + ajaxStatus.showStatus(SUGAR.language.get("app_strings", "LBL_REMOVING_ATTACHMENT")); elem.form.deleteAttachment.value=1; elem.form.action.value="EditView"; - SUGAR.dashlets.postForm(elem.form, SUGAR.field.file.deleteAttachmentCallbackGen(elemBaseName,docTypeName)); + + var callback = SUGAR.field.file.deleteAttachmentCallbackGen(elemBaseName,docTypeName); + var success = function(data) { + if(data) { + callback(data.responseText); + } + } + YAHOO.util.Connect.setForm(elem.form); + var cObj = YAHOO.util.Connect.asyncRequest('POST', 'index.php', {success: success, failure: success}); + elem.form.deleteAttachment.value=0; elem.form.action.value=""; }, @@ -54,11 +63,13 @@ if ( typeof(SUGAR.field.file) == 'undefined' ) { document.getElementById(elemBaseName+'_new').style.display = ''; ajaxStatus.hideStatus(); document.getElementById(elemBaseName+'_old').innerHTML = ''; - document.getElementById(docTypeName).disabled = false; + if(docTypeName){ + document.getElementById(docTypeName).disabled = false; + } document.getElementById(elemBaseName).value = ''; } else { document.getElementById(elemBaseName+'_new').style.display = 'none'; - ajaxStatus.flashStatus(SUGAR.language.get('Notes', 'ERR_REMOVING_ATTACHMENT'), 2000); + ajaxStatus.flashStatus(SUGAR.language.get('app_strings', 'ERR_REMOVING_ATTACHMENT'), 2000); } } }, diff --git a/jssource/src_files/include/javascript/sugar_3.js b/jssource/src_files/include/javascript/sugar_3.js index e232e3e9..bcb02271 100644 --- a/jssource/src_files/include/javascript/sugar_3.js +++ b/jssource/src_files/include/javascript/sugar_3.js @@ -107,7 +107,7 @@ function isSupportedIE() { // IE Check supports ActiveX controls if (userAgent.indexOf("msie") != -1 && userAgent.indexOf("mac") == -1 && userAgent.indexOf("opera") == -1) { var version = navigator.appVersion.match(/MSIE (.\..)/)[1] ; - if(version >= 5.5) { + if(version >= 5.5 && version < 9) { return true; } else { return false; @@ -116,6 +116,7 @@ function isSupportedIE() { } SUGAR.isIE = isSupportedIE(); +SUGAR.isIE7 = (navigator.userAgent.toLowerCase().indexOf('msie 7')!=-1); var isSafari = (navigator.userAgent.toLowerCase().indexOf('safari')!=-1); // escapes regular expression characters diff --git a/modules/ACLActions/ACLAction.php b/modules/ACLActions/ACLAction.php index 8cbfceac..2221c829 100644 --- a/modules/ACLActions/ACLAction.php +++ b/modules/ACLActions/ACLAction.php @@ -347,7 +347,7 @@ class ACLAction extends SugarBean{ */ function userHasAccess($user_id, $category, $action,$type='module', $is_owner = false){ global $current_user; - if(is_admin_for_module($current_user,$category)&& !isset($_SESSION['ACL'][$user_id][$category][$type][$action]['aclaccess'])){ + if($current_user->isAdminForModule($category)&& !isset($_SESSION['ACL'][$user_id][$category][$type][$action]['aclaccess'])){ return true; } //check if we don't have it set in the cache if not lets reload the cache diff --git a/modules/ACLRoles/DetailUserRole.php b/modules/ACLRoles/DetailUserRole.php index a220ef9d..693afc24 100644 --- a/modules/ACLRoles/DetailUserRole.php +++ b/modules/ACLRoles/DetailUserRole.php @@ -53,7 +53,7 @@ if ( !is_admin($focus) ) { $categories = ACLAction::getUserActions($_REQUEST['record'],true); //clear out any removed tabs from user display - if(!is_admin($current_user)&& !is_admin_for_module($GLOBALS['current_user'],'Users')){ + if(!$GLOBALS['current_user']->isAdminForModule('Users')){ $tabs = $focus->getPreference('display_tabs'); global $modInvisList; if(!empty($tabs)){ diff --git a/modules/ACLRoles/ListUsers.php b/modules/ACLRoles/ListUsers.php index a0c370a0..a7e97755 100644 --- a/modules/ACLRoles/ListUsers.php +++ b/modules/ACLRoles/ListUsers.php @@ -35,7 +35,7 @@ if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); * "Powered by SugarCRM". ********************************************************************************/ -if(!is_admin($current_user)&&!is_admin_for_module($GLOBALS['current_user'],'Users')){ +if(!$GLOBALS['current_user']->isAdminForModule('Users')){ sugar_die('No Access'); } $record = ''; diff --git a/modules/ACLRoles/views/view.list.php b/modules/ACLRoles/views/view.list.php index 084a893c..b6a743ed 100644 --- a/modules/ACLRoles/views/view.list.php +++ b/modules/ACLRoles/views/view.list.php @@ -41,7 +41,7 @@ class ACLRolesViewList extends ViewList { public function preDisplay() { - if (!is_admin($GLOBALS['current_user'])&& !is_admin_for_module($GLOBALS['current_user'],'Users')) + if (!$GLOBALS['current_user']->isAdminForModule('Users')) sugar_die('No Access'); $this->lv = new ListViewSmarty(); diff --git a/modules/Administration/metadata/adminpaneldefs.php b/modules/Administration/metadata/adminpaneldefs.php index 33910483..5022c6f1 100644 --- a/modules/Administration/metadata/adminpaneldefs.php +++ b/modules/Administration/metadata/adminpaneldefs.php @@ -154,7 +154,7 @@ if(file_exists('custom/modules/Administration/Ext/Administration/administration. //For users with MLA access we need to find which entries need to be shown. //lets process the $admin_group_header and apply all the access control rules. -$access = get_admin_modules_for_user($current_user); +$access = $current_user->getDeveloperModules(); foreach ($admin_group_header as $key=>$values) { $module_index = array_keys($values[3]); //get the actual links.. foreach ($module_index as $mod_key=>$mod_val) { diff --git a/modules/Campaigns/TrackDetailView.php b/modules/Campaigns/TrackDetailView.php index e3c3bc3b..2f5eed6b 100644 --- a/modules/Campaigns/TrackDetailView.php +++ b/modules/Campaigns/TrackDetailView.php @@ -136,7 +136,10 @@ if(isset($focus->campaign_type) && $focus->campaign_type == "NewsLetter"){ $smarty->assign("ADMIN_EDIT","".SugarThemeRegistry::current()->getImage("EditLayout","border='0' alt='Edit Layout' align='bottom'").""); } - + + global $xtpl; + $xtpl = $smarty; + $detailView->processListNavigation($xtpl, "CAMPAIGN", $offset, $focus->is_AuditEnabled()); // adding custom fields: require_once('modules/DynamicFields/templates/Files/DetailView.php'); diff --git a/modules/Connectors/InstallDefaultConnectors.php b/modules/Connectors/InstallDefaultConnectors.php index c40dd64a..94685818 100644 --- a/modules/Connectors/InstallDefaultConnectors.php +++ b/modules/Connectors/InstallDefaultConnectors.php @@ -40,22 +40,28 @@ $default_modules_sources = array ( 'Accounts' => array ( 'ext_rest_linkedin' => 'ext_rest_linkedin', + 'ext_rest_insideview' => 'ext_rest_insideview', ), 'Contacts' => array ( 'ext_rest_linkedin' => 'ext_rest_linkedin', + 'ext_rest_insideview' => 'ext_rest_insideview', ), 'Leads' => array ( 'ext_rest_linkedin' => 'ext_rest_linkedin', + 'ext_rest_insideview' => 'ext_rest_insideview', ), 'Prospects' => array ( 'ext_rest_linkedin' => 'ext_rest_linkedin', ), - + 'Opportunities' => + array ( + 'ext_rest_insideview' => 'ext_rest_insideview', + ), ); $previous_connectors = array(); diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/InsideView.en_us.tpl b/modules/Connectors/connectors/sources/ext/rest/insideview/InsideView.en_us.tpl new file mode 100644 index 00000000..248a29c5 --- /dev/null +++ b/modules/Connectors/connectors/sources/ext/rest/insideview/InsideView.en_us.tpl @@ -0,0 +1,133 @@ +{* +/********************************************************************************* + * SugarCRM Community Edition 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". + ********************************************************************************/ + +*} + +
+ + + + + + + +
+

+ + + + + + + +

+
+ +
+
+
+ + + + +
+ InsideView: Real-time Sales Intelligence. +
+ + + + +
+ + + + Get relevant company information, contacts, news, and social media insights.
InsideView is a FREE service that automatically displays key sales intelligence
directly in your Sugar Leads, Accounts, Contacts and Opportunities. + + +
+ + + + +
+
+  I agree to InsideView's terms of use and privacy policy. + + +
+
+ +
+ +
+
\ No newline at end of file diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php b/modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php new file mode 100644 index 00000000..c68e1228 --- /dev/null +++ b/modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php @@ -0,0 +1,209 @@ + $src ) { + // Initialize it to an empty string, so it is always set + $outArray[$dest] = ''; + + if ( is_array($src) ) { + // The source can be any one of a number of fields + // we must go deeper. + foreach ( $src as $src2 ) { + if ( isset($bean->$src2) ) { + $outArray[$dest] = $bean->$src2; + break; + } + } + } else { + if ( isset($bean->$src) ) { + $outArray[$dest] = $bean->$src; + } + } + } + + $outStr = ''; + foreach ( $outArray as $k => $v ) { + $outStr .= $k.'='.rawurlencode(html_entity_decode($v,ENT_QUOTES)).'&'; + } + + $outStr = rtrim($outStr,'&'); + + return $outStr; + } + + protected function getAccountFrameUrl($bean, $extraUrl) { + $url = self::urlBase.'analyseAccount.do?crm_context=account&'; + $fieldMap = array('crm_account_name'=>'name', + 'crm_account_id'=>'id', + 'crm_account_website'=>'website', + 'crm_account_ticker'=>'ticker_symbol', + 'crm_account_city'=>array('primary_address_city', 'secondary_address_city', 'billing_address_city', 'shipping_address_city'), + 'crm_account_state'=>array('primary_address_state', 'secondary_address_state', 'billing_address_state', 'shipping_address_state'), + 'crm_account_country'=>array('primary_address_country', 'secondary_address_country', 'billing_address_country', 'shipping_address_country'), + 'crm_account_postalcode'=>array('primary_address_postalcode', 'secondary_address_postalcode', 'billing_address_postalcode', 'shipping_address_postalcode') + ); + + $url .= $this->handleFieldMap($bean,$fieldMap).'&'.$extraUrl; + + return $url; + + } + + protected function getOpportunityFrameUrl($bean, $extraUrl) { + $url = self::urlBase.'analyseAccount.do?crm_context=opportunity&'; + $fieldMap = array('crm_account_name'=>'account_name', + 'crm_account_id'=>'account_id', + 'crm_opportunity_id'=>'id', + ); + + $url .= $this->handleFieldMap($bean,$fieldMap).'&'.$extraUrl; + + return $url; + + } + protected function getLeadFrameUrl($bean, $extraUrl) { + $url = self::urlBase.'analyseAccount.do?crm_context=lead&'; + $fieldMap = array('crm_lead_id'=>'id', + 'crm_lead_firstname'=>'first_name', + 'crm_lead_lastname'=>'last_name', + 'crm_lead_title'=>'title', + 'crm_account_id'=>'id', + 'crm_account_name'=>'account_name', + 'crm_account_website'=>'website', + ); + + $url .= $this->handleFieldMap($bean,$fieldMap).'&'.$extraUrl; + + return $url; + + } + protected function getContactFrameUrl($bean, $extraUrl) { + $url = self::urlBase.'analyseExecutive.do?crm_context=contact&'; + $fieldMap = array('crm_object_id'=>'id', + 'crm_fn'=>'first_name', + 'crm_ln'=>'last_name', + 'crm_email'=>'email', + 'crm_account_id'=>'account_id', + 'crm_account_name'=>'account_name', + ); + + $url .= $this->handleFieldMap($bean,$fieldMap).'&'.$extraUrl; + + return $url; + + } + + + public function showFrame($event, $args) { + if ( $GLOBALS['app']->controller->action != 'DetailView' ) { + return; + } + + $bean = $GLOBALS['app']->controller->bean; + + // Build the base arguments + static $userFieldMap = array('crm_user_id' => 'id', + 'crm_user_fn' => 'first_name', + 'crm_user_ln' => 'last_name', + 'crm_user_email' => 'email1', + ); + + + if ( $GLOBALS['current_user']->id != '1' ) { + $extraUrl = $this->handleFieldMap($GLOBALS['current_user'],$userFieldMap); + } else { + // Need some extra code here for the '1' admin user + $myUserFieldMap = $userFieldMap; + unset($myUserFieldMap['crm_user_id']); + $extraUrl = 'crm_user_id='.urlencode($GLOBALS['sugar_config']['unique_key']).'&'.$this->handleFieldMap($GLOBALS['current_user'],$myUserFieldMap); + } + $extraUrl .= '&crm_org_id='.urlencode($GLOBALS['sugar_config']['unique_key']) + .'&crm_org_name='.urlencode($GLOBALS['system_config']->settings['system_name']) + .'&crm_server_url='.urlencode($GLOBALS['sugar_config']['site_url']) + .'&crm_session_id=&crm_version=v62&crm_deploy_id=3&crm_size=400&is_embed_version=true'; + + // Use the per-module functions to build the frame + if ( is_a($bean,'Account') ) { + $url = $this->getAccountFrameUrl($bean, $extraUrl); + } else if ( is_a($bean,'Contact') ) { + $url = $this->getContactFrameUrl($bean, $extraUrl); + } else if ( is_a($bean,'Lead') ) { + $url = $this->getLeadFrameUrl($bean, $extraUrl); + } else if ( is_a($bean, 'Opportunity') ) { + $url = $this->getOpportunityFrameUrl($bean, $extraUrl); + } else { + $url = ''; + } + + if ( $url != '' ) { + // Check if the user should be shown the frame or not + $smarty = new Sugar_Smarty(); + $tplName = 'modules/Connectors/connectors/sources/ext/rest/insideview/InsideView.'; + if ( ! file_exists($tplName.$GLOBALS['current_language'].'.tpl') ) { + $tplName = $tplName.'en_us.tpl'; + } else { + $tplName = $tplName.$GLOBALS['current_language'].'.tpl'; + } + $smarty->assign('logo',getWebPath('modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview.png')); + $smarty->assign('video',getWebPath('modules/Connectors/connectors/sources/ext/rest/insideview/images/video.png')); + + $smarty->assign('close',getWebPath('modules/Connectors/connectors/sources/ext/rest/insideview/images/close.png')); + $smarty->assign('logo_expanded',getWebPath('modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_expanded.png')); + $smarty->assign('logo_collapsed',getWebPath('modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_collapsed.png')); + + $smarty->assign('AJAX_URL',$url); + if ( $GLOBALS['current_user']->getPreference('allowInsideView','Connectors') != 1 ) + { + $smarty->assign('showInsideView',false); + + }else { + $smarty->assign('showInsideView',true); + $smarty->assign('URL',$url); + //echo "
"; + } + echo $smarty->fetch($tplName); + } + } +} \ No newline at end of file diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/images/close.png b/modules/Connectors/connectors/sources/ext/rest/insideview/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..78e58a905adc355ba5cb874850bb8124b7afb6e3 GIT binary patch literal 1546 zcmV+l2KD)gP) zx&l&`MO8B(vavMEm*A>DI^lBCO$~0hSW4Q(GcVZ7-G@HR6tUphPn|Sr6!bE zt%*M>S(fk+sL~i-;xQj*DNG^P_{>ZPTnn+}I#acXL6ti8Sc%FxizEi!(Ssgv3D zux<78bAebm_(9XKl>t~X(KMomi9S?PQc^iKHa3iRDdXegBNY`D&%s<~BaPWKFbu#_ z@txp@ErzXjADfU*w6vq6P z58$B3L!EHBT#l};t`@LCw1C;%$1q}q+eH6JEZm7i4>GSytyb%0zN)qF2J!dr#4vOWQ>7919YUig8V7?qJ3F5wQilTpwD{f`H2>~N6ma~5c9Oux zzsNq=hXP9u6jy!(r5rerm64ILY_VA8*!~B^e4!D-AIrj%K=#kv+}!-WBuTLgXHKKV zPd`AnE6&kh5ngqoxFZ!PKR^He(b3VL$st{1PJ|p$3E&16p8b=PlPx(pIS;Q{E}^-X zE79G^y&qphiIvYFV)I&FUfw&TYlWzt-4Ksjb^~-(RaKb)j=f%V>+~C8#$t?VDD#s6 zBqbOlfZ(^RFD}zol)ulOLSTzr-ABN-kVoiE5YsG;L~U*DqcG7Ok5at?8D+FDxuT#zK3FAKVcf!Y*z{G$-`A#k5^nS(%q*L+Suei}XDw z3BwA5<0_trFqHn$`G`H2pNaIg^AYnBpRS_q?Ch+Saf1*^Q48SE>FMd|xke|E`>svN z48Ml2*O4prZN!1&PB?~sK=Y?wiHI8H4v_Bd?qNn&e4H03rs9c-iDt-L_JOa^%~y}z zRVvQ-@N<;(;t53FfnSKtw@KHsJQZ_3=VLT#v$3)9oX6wYgdA?HdFzhB_aA?af|Jwl zZ*6V;3{rv+0lEbmAqRw5F!9!%ot?c|TwGiVPik;woxX0jBgw~3qI+7~$aU7BzP`Tp zrlzK=q0wK|JLb4qt0~%Ed zw94o6xxiS!>BOu3U*fqJo(*G1z=CFvSK-y(9y$iZ>-D<(`}^AzD48LQlI@0+R##Wo zkc0WtZb|9%^z?O@L*|ySm2*EjPe>USD5dZZ?|>2_;X9 zkB?7*xg>io6PcfxnX&fv_KuLKO|t{XX}L?d|FmM_b%ERgmF#uY3iZKm3lq0Y`GMmn zAG6{pyfA?dRvckjvB|HfTPV+BqLgMnp)~UeD;Dd-u+mJWRJ1A-r(#hm$(~fXvwm5T w8e+go#i{BJ%X78RANHCmlgf0TNtPut zo6X9_(u=cFQ&Jj4Q7Eadu5NHR98^($nfmnYO?JDTR8@`WRUm<%t*g_{Nfb%Baf8Bc zH;FMZ+HW*W>a}YWIChK--MW#Km`JYo-Xo==f~*rKlIi~YNidm+3iKoR&t>3l{I%NlDt#S5TlmXPY*SNM9cwSKz<_63k}u{_&66dKfWR5w@_59ZSlkOXS_M zg(wgp8S5gpYo|RM#_!-)Uy*?OOg(y#oyVnbBHHpCKTcO)d4){qJ7LZo@)Q+O^pGLs zc=%!M9{JmlB8s93MtsBT^`(?wuX@;v`CYtlk%UmNX|kB4$_s5W6_!`sAgd%4Nuspe zU@$DjI_QTlZzW@NTm@Q+fYpSQ8-*#z4LtQ-?E|rnv=1p<{Z59TC051X90|0_c zHc+Y4NxtOvy$p_+Ufnx%__-uWW3ZpOv&=tGAi#Ktc)_Wg3knt$pFTs5igL)9cm3M6$P#g3b-R;zQ{wr#V%_;L>os=Y})Yj2Tb=n#@I z0Zq|2g8+?qDl5qX)#?~9fP$a}3HL~tkch>)xo;mia&oB0mtRsnz*MNJwl4eje=&Uc zuryGFD~v_(05CRC3ZKJ3xuFXe-c`AscJ21#_YBQ&toQ}t?_UjG^d{rm!u9p@)w;R? zp^A!=`1>SQ*&--T%P2r;4I4I)ignPzHy`WK#nit)*``iC3x$6}6UE3pwDDl)=Q&%^ z!O=mzdUX@#;A3?!*zNBi!&u4JL}WVxXB=*KZt&#EcRBMggu@kr#WG#3s#>mASI33U zpZ`4!up|se(6T03{?0&X&VMBC8*44u?F$U;+TEx6d{;v?HL0r0<$)nz$1U4hfWRrE zB#A>$bRzjP$8ar}IAp+%6V96X~4N&Nrw@s3+x}e(!JZ|yZ%_X1+u68%aGV}QIvRZPNh5n8FS_ZTd$d$9j8vA# zs^Gecb8HRlJ5oXdg}vTT*ySR^Gk(lTy6Y|y7(5WoA*5tlswhdfkP6l}e(*uAh;?$j z^;Snij~;^R@q}S$E!u?2%I4NS|9l^A*D-r`SadpPdOrGSxQcOjckWDW_TK0jGf2+N zY)X6o&W&SBBYQl?A|W!zcI`^GzI}JV_%C{oAOEjwZ@xL+h`Gi7_{WQJYf1|c%F4!fGfW=VQa9A+* z0tEwzL0+y!59|YO*3f@rF^(1$J^j?=$!lDJK&1)os9%RiMGM&+wv0v}dyux^@Ggq1 zKm3i+Kn7)n;nm93s}(TJ8C4Xstoiv~t`D&BO?Tf-zHQr@q5uqS9zI;l^#i9)X>mxW z25pB2H-+#BYT$4iK<+Na#@;dy8noZDZe6Z|$f;CRykH(NVj&j(x(MwgL`9{#mMx2C zLmL22WAEO-hL;A7xw%g(*RR`6xw%1Zi=%<{@yE%(b?bMgMM0-SADr|SKo#qBo{^%W zmPF;{$%@yzRDy%~E06_5QUfT#>hXBe_8mNAj}Q1M9h2cfYtx2tuPtkgzWHKBT`1bmp#l4N^rwVls0WBVI0Ke?Aa8=1e1MUO7*zuhcQI(}i zC;G^;*+_{fe6$EjEV|U80~?|{c+~`;lnFLlEI<;Yg?f${CQ~u)4cs<)tF;TBv1z=^ zz>1DmjCpy-f~QVh6B81CC3o+B7oyA!kqydJ79ZafIc&C`FsvkE+?HOwE(gz?@q{A* zsJEvBqE9oo!^kS4Op)BNBaihxIX!){dh(>hS6FDleO|tw+XPkg3lsqUw{#9`O(%%U674Xi2@~b_Ec0*VEguZqs#TQ6#(D@lLqpLIm&uSO85Ev&(+ja z+j@ZajJg)!i_Cx`yr+KiW>P-;j7(U(sDAw@bmi;75%iXw0h`4Q^f=&&9Fl0Xwt z_ufn9*jVDwXh9pP0K?AGQWlv{^y}Sww+99f0A#XW)r=@$X#A^rs;ch5!X#S8k3Z$x zvL(g0cdwl=7WW4quwk~Ch7EfZp6$_um?(~RFJHbsc;bYaxtys7QNb%^WLN>BUjD+u zkAvtdR8n#XJigJ)6*cGp@cc{Oy?ZBuuL&H_-g-fbjWq=^rc%a}2BegFZ$qv)4ko=isL+o7{(3A-FZ_QlcBbl-iK zac?64FyFgz)`ZR^uS!!y+mI)Jgxm=Yy3 zvlDAO4Fs(OsRo30ZQBmLc%igQW21|b5D}ziQK%n{`Yy0I!j6HG5rFW0{IM1dRDEx5 z(A2rJCL9&;s6oHx3_`xZh$RSdnw>jyAT%K$Bxhdo=ibYMLsvDwQ7~Ner9MbXbbWkJ}dx8lM#(~0px2~Klsm_A^G#q^Dqy^c+WkF z4ZrzKn!mW1l+w}|W1l`5#{T^e!AXbI&zYmmBWBjDKgrMvDs-F-5OEp)Hvi*)0{+0X z+S*%#eDK;RJ-ut@88HG71|1Lz1fqHHU=E|&ZxbM9r9yVV^PMUQEVEh35E zD?Iej)0j&}%rk zAq%M(S)j-R&pt~kM+PjY)Uzjbc;_7oVGvj6&(|6c=xW%&g(&QxhNSrT_ri*>MxPoSHj!pc~-7`FIZkK2F{;XIUR$ryvYXEbjr$=lgw3BD#YJ> zxkHCaP7Ncuki%l|=uz^2_E`eF%gpJn^^r$5;L=9U1R(N;NXf~&;aTa_1VRDfH4A_d zISQi9!H6ObO$0ifw?t;Wf&!O+*Di`N8Vhl~SUhwn7e;a-3R#dgK8|+VaGeD}`hBRX zss_}fMZK1K1a^Lr1e)r=Ya~O_!+Rg{eE4BEO%K`ajkv2FXsxGOQJSBAi5yLdNkO5-&R966%B>ya`uKSKs}Ba8^CZ5&yVs#EhAzAh+1Scu4z zHH3t3GeTt8=iF3g{+~CG1T^Mbwu}t$e%l*wkeM5W$gA7AlgjWnvAI(nJbr$&sVbm3 z74`(|m;(OV!U@+WVqz>opc!8L2ZYAw@z;(TcdS@J&V>tS+J5w-j_wT`?)D!)Zh;Y= z!Q>}{?-#<;W(s(&1q}SA5L!m5uGUg*egg^KmL;h9x|uVnYT&?fjQ0xmbgg>obPmG8 zKh1MszOSD(i^FkVbHPZPfvQ@NW@_RSQL7MXVJ>?x84Syi6_j!b-k6%&07^N^qL8Vk zb$x_^giIo!^>h9_HN5)jLoN5{{V;e!SFc(SdCq#`+p>Vj z)C^Gs0?f}`Z5}a8I?oy-qDcpl@b z2YrZIS;Xa1kPb^&Zy%`UOGJ#i0DurWcdk9aW`Lj#B3izQKF1*nb_31)6kz8prBO;v zeV6I9wLtU%ptk|R;dEHrw@)S`j9H1jFIW6@Ln`{aWD7u$v1W~yF4inwOfG;xdl;c8 zgj_lhK?BXtg(8kuxV|78sC{z#Y5-xK`nT2x*eD2-Vnmv((FW)UDWSy+Pr!nVWB#{{ z9lN$+?%W@T08H>=H+bt-K`*ItmCb->jFM#X?cU8oj{JM}3=!kvGQzdB7v=Wte+JL% z)?A83^wc8JvxKCF?R z(GUdPQvT+FtC0$4BoW@u=axqv;jnJ?Y}%y#4Z7i10PH4YN+iX^@SH?s1S(S-*H{pl zmkL|Az80#ec!Dz?LrzWu1nkSuAw&Gg=0Kmsg)q~oQT6JzYo*^-pwevVbU1coWM&F+ zv9VoB@UUBOkqv_h>MNcwVFG2t_(lw<5~29!j2UE&C}XlogZl5F4v0_$DBRf3OEN(m zP)0_Ex3RIYD9BYWXcFPOl#saw^0S|jT3)^|aOhAzLh5{or#f)yVD4L#We~3XDLOH? zJOCib>~W(Kv; zojQ&8A3eGfT+ZHiA5zGnV%xS~u@Z+!tT%M;eoVAlM<7Mi)&QcBq&95|nOeAhp%tkj zy^{s&z=0%p?6@niXU_uxq~^4K{VFjwb{hm=0WydfscqX=(9g5DcZL7(VFphjfbklS zm73DhLe6>s`j;WtcLtHw2u+kaSL5SW?-srh2!TN0_pwf=A$P!lE^EP`$1&J};4%&z zZAOlyyAcU^VJ<)uT%9(JY*7uB=zzK8B zplLxO-sX@!;@lDW+9={YMh^?tz`lJHv|8hRg@w^!MR}bUhQ}j;zU(CkH}{B?mUfIi zlv8S*7A!64awuf+L0d(2>GHZ|!UUPNZ=Zv##)7-@(SE)HZQxnEmId>RXm^F}(MS0` zNdSU27_6u;$l!YbdUE%D%}2l<87 z>-+|?6+(-!PtngSBmVwxTz=QjBNN|ebubhoBoY?qO>p7{gx(jyhw%W%9yu*-qxI28 zw+9efu}J45+OO6sgWyc#fB}>2&p%(_TC(JB=${GRk3U{#d+MnJ9Hl%Agr=Itc^<2j zkTA?LV#H|t?cX3C@8y?p@Ib|X@ZhV+GH!4>#>F%5`t|IEH$jk- zwj=u9QnS$R;l6ynbu1puW5z7z^c7nOK=8Em!4ZYqRMpS%(}HR-_r(u^udq~FmU*BkK65`fAA)fE{d=tvr!kOq@*04Jmo3s znVmz&A@0^EB+wPEeqQ$D&ZAt;}hvqgcGNeUD!#MHY4tx+iz-nze1x6O%I5uUki_&zI0Tcy?C^q0VrcyExC)sX%O% zE>~wc#I*lDWmU41(LMD^xE%Xy=$r74F+@0;8^P5E&t3;CI`?In- z@0$4d#18xR?xW&Ur|CjMB3*(&ve(y9EcAi{S%pankq>F18=P8gx0BoH1OTEa0ko0> zIv6-Gmr_zwLKchVCuq0u&T{|2zG4PNRLHVnNM>dxv|dbhR@W>lEiI!fNR8?mUE~h< zsXnCW-y4GF0fs1(krJVtlM>>oQ>TuUjx;PfI(oI$YF!Kv>=y1&zz+`ydSs{oP4tV2 zaZE&LUkr|?y1F{5t*xbohNh2H83jx$Mx%l3_9){2-Q+}6006E504tCtzQmuwiQiJp zxU>Be13?D^XNyaq_7B3N)8gXdUh(_=2>?M-DB{0|@z>ATi$MVa95*1Mti-dI@BF{Y z|0h6*pbGv<+Ifou&O@ZT~C40HH?tMf8}h QZvX%Q07*qoM6N<$f;|@~OaK4? literal 0 HcmV?d00001 diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_collapsed.png b/modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_collapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..8c77155ca9c52e17bad3b4e400141e53eede9d63 GIT binary patch literal 4931 zcmV-J6TIw+P)AhJRkX4Cn zE})2tC{(LmcH$!=i6n`n+FIhHqe(Mp5IH{h zfE2%_hS zdXP3RPo0}&nK+&&9&>Rf6LDHC`M&*@?0@(J3CYP6Hg6s&Za4YL%hh#hva-7S3Bu*| zxp(eVuZigI{Nf9OaY&z^Pm0$|ipxbZp3Spk2k}NDX@(Cc-KbGSxaRu$YZBt)NlZ&q z*Cy4}kZiM&CNq;b^wpj_M}*?YZG@?% znL-^-(gFm98C2jy9Hx-jHL)>dh>xG07!$iRGCb^eJkQB&d|)EA@Acyvh~VJC!|OE~ zP2b}E`~O&8T$0_hzK(`QMNvY}1Tx0Ok)YKfGT@a?C%NF2=PN6zqHKTfgRyaMju}7p z){FrebG%;fv0wxX@YL(aH3Be;JgrvKZ&z{2@{*04hTIAOC*E-zSGAZ_EZ32B?OLVgzWdZ`;p4`UZPzYJUbBXbLx)mjN(v2C6z*pO zSQG_ecTv%TZL8M~8GrT^-8^OtMGhH4Qbz{~%mG;5M2;~dXKE}K;*eJv=-QYVy7gog z+4lXJK3nR`3VU|$o0%CIFL_z?GNZD_^HI3L;}~PWc_qeG{lhC|4%Y37sb~)Yv<9?K zRPO_TveinCrAvt%4#JiByva0JKY8*JF)?ugG=rLRFN4gSj^pqU++3{5i1FpPx(;*6 zf%$rI8qMR>?VKyoZyY|0xc)glx6{ugOf6HVas$quRZfo|PboWhatAq1Y5(|R>O|gW zhhnoSTzL3*Kwi6ct%04;{$uLYskPsq6Tc_ov=9wHPjy`exUuQt#LvH6J|?sAJY_L3 z5eXavkO>d=9g!OfA>nUsrml(#G6Lw(VZ+Frlti_keMTeEzp1{S)~w(7WNLEK+SvGn za!*?uiQBdjr_)6{H*bDLYHBiSQc{i~4^-(e_9q_@TO#h~D=j7I`0?r9va(koUXDSS zeG>A-6C}XNq%&v8-`Ggf>C@z^ukXw2bQ$7+0X+qXCLdA>#u0BelY;c(M;|^cO!5>J z-DO{~VzBw%dy7mnW)wgKbui)QDJXcx`r2#H>2h+qO!wVqa2FOnFL!oca&6tZ9ipo} z?2R|b3z75>A8-u!-|51lScr%q9YFTBx05bB{QF(rN4p(uAix|25bLi1Hvy+TXh{K( zXQ(dP+}uLDi;Aba&z#YWKm;(UH$v@t{lri&m z7Q`{={cNni*lkNC`^3qU1AE%6WC36d zECHV0wrUme@O(4Cwal7DzWw`24}&Opcu!p&wXjkrJDb98x=E$+SlLg}tu0h>ta4Or zOl%DLHAgf0WK<^z3Zqgyuq+{O`)g~L0%*z0ac=L)lfAGA&Uf_a34MJ0TQHOpWr+cX zf8AGAl>&O@JcWfmv48(ZQ4X2Wthm-8f<3eY2MXTe;)%ZM>S_MAHVw*_Iv7Cirr!+6Urw-g^d zc+gT)Q}c@em<;3xa9$PoE+;1^e>rsM&|=m<;7;6Qt<5brWIG)yQ0yXnjV$-ZE%K#HlU-}q-Xk?P zH|g^8-$umt?E3J-ZCFF3e)w=d#tHT%ONb8*wUJ)G+jHQ+BFMd8 zqV2=iI@VvMXh&DqG<#=<-XtOK21RKAXf12VuhOPXWPIciGQfkij1qC(49bjq?m24T zutDw1#zad#a@p;?MynlYu~>dw1+x6EC^i^?^tau%!Zd5vSo4!lHcBlm)bYwI(TJu# zFx110dQFc$y3{mtW*TTYhDEI+Nq!FF`H&DhqQv0%?6Y5ZtE-Lr+}s_yapU@izWnm< z`G^QNi(cetoA=P6$&QU1(+v6fWg*W$KMJ%ylNSWHeevQa{q607e)QwO|UiSuzBykt5@o*mL@Aw!5YJ`hL(M5t{z}&wxSJUX3tAv{vofwd=9C zxVWkzLxy}P2!d0kd7Rnz`1tta?044hvWk`@$>(RA7!=4G-xsjR9YWu}#DR`=ixv@g z=#ZKhh0&v_wV;4HHg8rV*dNH9GMdR`8XICZFKJU0iTmMhih3sz5vLzNeyi+o6bj+t z3()UvskN1Z5Np(CWbAZp-+ou;yYD`R?@{`R6F-6`7}cj58U}REo41%4bxRWGJ$>45oioQ9xqNvc z=I;RAM#v2fPx~)k9Elt*gZkH~%AJ)eY*!5V9U@Edx3)&Hk`j@f)A{=ApMr)(tU-}4 zT!=&dwrDdm*MV(b@SQ$A6=|cd*sE8!POPlV(BFKs0}Mji2OliqVq&_kQhdK}wOVg3 zEiLUca^%Q)xw*MZ4<9}}B`Ygyz0qhqwQt|PmmLmAub{|M0XCXUf)--I!6;PehM5&5 zteEveg(jfIIj}U|+bYbSV^I&W;0 zbi;?Y3aP0@OmSZpeN0P0fA}w5lG!$>ngT*YwO|tgbbJg-UO+x>)nsIpGXd#Zx6Xo` zoT8sHS>vs&9O*TiM`L|5B6y|0sp)EJEmdT7pmYU@@g*fCF9GD=Oq@7ze|vj7 zUtC-~&+T^i`hm#m-TMYP97^syqEd$1WaeXgP$IzXixMd8jyve$+_~iW<{LHSC5Qo* zf87CKr9fj2aZV5^vPU$9hlTA#v`9ZzEL=V_5d`tY4CmakMWX^?HcQ57)3hjM5nTJvD{pj z*siMjz(x&378xc@QV_9%WBGCt;^GeAx4Fpe4TikDIHVB|c|7$#2u87I&l5-+_rMVZ zDDmGYQBl#ZZQFk5x^RJXpm40|fFBjeRUF?DSpYM!u(0qoTn~z@#P5qNb@j2au^(lm zr`xM_dTM7InQ@_>eRE(Qqz0ykq6fquQ1a01f0MfI5TiAU~Ik7MA?~{ zvff~*a=R~AeT>0PfzSG2ogX-B)fWVk)O}r&c&VZy&9#305$~~Me{%2N|G(aspnQ1r8p8aR!GqQj5Q9i^}S=Yja%jAv@9g8vukO+XcMVFoJb*x@J z!nJef7DVha$A%5%Qf=)blzT)GeOU(gNA({0IzF=sS3DHELxIDua6D;Z~#_0dsVMz7Ik>Y(cb>ANGJl zZNi)#>N8)R$f{!^Dht-kJRVPQVeM!i zFpokz6S%g7X)?4Uf$!}45-hSv5rlRa=6{65#2H*f#85$!wuip@>RJGI1c3AgU49B< zR=W!e$+Be0yP$8*v0}vp01>ZAO8OjSi^K8x=S&}#qmDg>8um^^<5QsQJGsGw@01!E zj*-z=gZVXt`W%jP2!idm$jeD6jar4Iq`k~RSiZ!;-jppypEgf%ahG=3urr3qlON!A z?|v8{K48kpc}S|OJLI=o3q*rKFv4c2Y2SCQSyK(#uGdePP|YVKM8g>tp^qQ;T%p#( zR|haVDwr;YQkL|3y$ktwHd3LHi7e#d#faVm`2A488M;LlI&9Axl)3-b2@~%4YQ;)Q zf|@o$JZgIJ2gxTbRrd zwc5ATF`}rZj$oe0QOe$^vd308XS(zGULiVquYSacH}(1XM%U`qt+AuO6Pa+CGWjkENga{~) z?O^@29p)d+&&&wSz&zg)+$CZ=QS_G=7jkg7i}h2wH#OLc1@$x69UaQ$J?!qrcD2r_ z^D&C=ekt)6V|SmGzhZpliazSNz#OBQ zUpAmrI^HWW@r`Gm{^bWB8I9c6- z=_kESVh)B#UYMGis{PN|PrS1&IhiXze1x{4P`9+VQ@L1}OMe>H6{Sf8iehc|Ic9`QX$kFJuoMoLYV63|+X` z%yzrT!RSz}P&AYfVy2wfXv*l;PYawR(lelA7xI#U60&r^7uai1^}gI7T2J=%LM=c002ovPDHLkV1lzi Bj~D;| literal 0 HcmV?d00001 diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_expanded.png b/modules/Connectors/connectors/sources/ext/rest/insideview/images/insideview_expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1834d6598f7e076ebab31eb14570bb06eb6a09 GIT binary patch literal 4929 zcmV-H6Ta+;P)+ZEF;1osLVXnQRj`%_belp`Q9k_9EyNghTavB1c`=Xf+nGb5?UaT zg!G%-+=Ol|oYck(Q=GdxQvZP9mo7^;R+|}>Mb=0ZEfUOzMRP6AoMKYEtY}C$&;6fad8Ww8MK^x6=ddg9EXSC=3!4}%r8UlMy#dy z*XzaUbdOM%bFRU-e0&$t{{gQiMw}mlqgA6b>Ml_x0~3+JF#wtHV1FZW10f{j zh6d`as30?d4jep~tnu+w{r>wj9OLV2YH0nYEsrK8#BYd-i7oRqHn?KT3kDJ?1JcO4SM-y@|KtXL!z8Tu@D+c z27v5sZ6!l+@b?XkLmOIOUq9mT;loohGcz|uM@I*suN1B38vr*nG*U@f`E>W$v$~;( z0M=wWQN7TdLWwoQjtG2Y5)zDC%9%__>v6;FC_=ITbqF8*_qKrid8dJa8ZvdFb zgE9pS=h$cPc=kd09%GcO1Iu{7{8Ags0JP4SLG7=Xc#l5FR0%s_UdIf zO`E2vXtpn{;lAu1+MapdgnPKb3M%<^$kpfjffONt5m~e{YGzII>6R99!ifz2X#Uof zf;RB{`SUpdca|*6=8}?lwb$anA{8IhY+JiO=PMQUWFPIfj0-F&k~<57xC5lxL$ajbG=RAf{n#x+DR z`ealm2r8peJg_1mZ_Cxy%XR7Ll9%J$-czS~VH2G1=+P6#n3z{#C@0Di6Ab^7@8rou z&@1ODD)Nc_`aO(t$com6zIGApq3_>c@b29^(N|UVklfs?L)mf>t%t%=1alHr{#dQ4 z^5x5qV6AvAFi_<~LMnvt@K=Py#C67j17G!2R`R~%$5T0z>8Mgv6y`Z_AW;M`h}I(P zIgmxW>TuXlhAAwRQTxVD%|4@`O>AEy=7(7;e01hCcO-&3iTd7 z{9BY(Ix#Wv*XNcjX~f+5-ZN)X45_K>lIPD~4*3v&XfuJG zo^>*iD=I4Hy4`M5YHBLO6@r8+{1naoys4q_rfjD}1B!LR=SUB*@gM{P5O?dXq-XTE zZXNjml$X_f%vAtB%SdbSt7TC?f==1|*)Y&x$EHnpilLzq@`w>E zqW=x_zs!63v{@e;OD-@8tCiUtM6S=fe}90xuyCt$_wHmvR+gePH}f4!m);!`8*2e@ zFM#^DxegtgBsVtRW4`OIwa$+}9<9{Zhr)R-3bC=URmKqxB4S9KQAYyxV z{^1Whv4=3@kRdYW3HD{nhz|_3kAAJO|Wzsal7rlG9`*zw1YAD``VxlCDESq}6$ zG!^0K?0m@H(QdRzGIbLP?+2Q>2djUjty{_b;Dcm>2kQYY8)pT5L_hTuwQk<5jb(Ep zBp+!^)~qqsM<1<|8XKwo`R5}LO?_af2iQT0 z<>7~yTV~EoHjEq@$)Z-3B$>l}J|Mu3C^0$SfB$FRsw%T_*swxFett^ebI-lbhlaXY z^dd*wyoU}=c5K;_Y|6_k4S4$Lk=92ZnaK-++rD(^qjGDjU>r4SKM#uaR#Xf_-5xGq zyf|2PI(5eU{1PE1#)0UQHG7!NPU+Ag$+39xT*sO<4BSGjHzeSxr{=+tWXIO6^9-X$ zn{@*QRD&tlVaXt{Mvj7KV$UhtYUO!dmSa&5@Kndbg?c!FMF&%%&$c?APw6xzK%5q`UTqx;CrKxGO=2Nw`=^gXuFC|9ZlEi@~<+izVyS zk=48RO-eA7+$BV%0=3D^$IhTcfSZC6DCqXv>B_u$hEYqiNLOIx~se1oG4MY~1 zCQVWiv4UgODiWfjzrt_xklSlbxw+9uBOda2YJ3okV$Yr@kT&jyBM4%2^na=0;SsK# zJ705MzDx#CIQI0Fj0)s>F3@p5e609Bkp+SEUVeW53Z~hZ$kKKn6&1B4Ej86%WiV1J zJ0NF7o|s7Kn>JA>#MS91pQQS?-zE?G8Lz;vweMa($X-9KU&h=TvxTxVG8Ci9bkfZZ z7ySP3S9R<%cGvm-PrdenK$5!pC5e|RDw18BHXZREJNBvj;KBd#o;=wTG|HlL3k)2l zMU^Cl=`u3xmN|32L_QC4Y7Ohm;+YKzr@bIAkZ@VEo+v`}jZm4Vb?(K-! zm5$Au%cSb+#o#$Ti&9;mKDz;mn;pS2O4Vm(77FY|M%UqrK}#u;WQCA2S|5IRCDKPN z9BQ1Wq@+M`I+uW9ihSke>rgA}P#M%94>uw02w0;7^j!|^upQA(GVB3|+KM&XwP*f2 zL>3cMesGz{8p1x=->jeg&c?CvV%I5_SUPS@-i)0)b_DFN^U-bCh^b#c3PlZk?3rh% zX~6;t@Y6P36SWLJmmgpj^`C?0Euh>PdoX5|yQqjlmMwb=^vyX| zubu!PVs!EGAE0b;I6nA*J$xDJ*kh(U@4N%i_!ubr4sPJUJEYp$V`Mg;$ND-#eGbPt z1i|)O+Bru|>%`t?RX%rjbC_o z`^{mrIiNk2y)xv(!~fHilCsb+YLwZrbmQ2XlR2VZ|Ee~p`;bEJ zeljZYpAM^BY_`ie0x&+J;at_kvMGN1azimjAR$1J_U8wbz2&EwXq&z%EhL{m1nC?`z1qc@%9#?mfup7~raY zO1AsynY9i-;N4MN48gG_G>mQ;JC^R9Joyx&@I95$8xtZ-MSj1xD&Lu(*?4APo^OP~ zFTfyfb`nK@esR$?&kuy!b*RB!EY#z>;=iAI^$feKd9}4f@eGXLf_bW6CDYZl{JP+K zbwl@WnCIV5t$#h+cdi8oW8?h$`?3CK#V^rzTnp|s`MH+$`+tA@8)wldm5%p{i+lNr zUp)TK60@26|X0yApYK~d(D61|B3;KEGypr1Hac?`@8t( zy{asd7bPVn>HmGs>^FBNByeSikI+sO>LIPI6mIXJK#v=4$&np&+!Po@ZHRP3WF$?? z$)T}%qkSGG8ZcG^V_ zMu%F3qNCUVE9FE*P+H%^B59qdBWr-w9uyQ*Z7>)%A?JRCIn{z7+_30R9pGz#J_Ep>uvjeptXAuk=;-Jv zP{y2JOgG~DQoUY(3ZNflPQl%X+@Iw2CjkZk(#Ao8kC%b900000NkvXXu0mjfk>jbZ literal 0 HcmV?d00001 diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/images/video.png b/modules/Connectors/connectors/sources/ext/rest/insideview/images/video.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e8d73b619981acedcb4edfcc4a0c9b2ef1addd GIT binary patch literal 6422 zcmV+x8R_PUP)dbVG7wVRUJ4ZXi@?ZDjy9FETkV zF)Q7;i~L zK~#90?VRn87012jKULL_=V9iYIr9Jv;9z^Offxve1amjZt3tE<(OR@(hv z@~7-dk#<+QiS|w8tHgGQo%lhq4F&_@!C+uuW|)U_y8Co@RqcyD-OOPg4-hBbyI*NE zGkyA0SADDM_gpQ0{_~&PEX(-+_-5g{E>4zZ?A^O}!-u^%p%w;+ze30UJ>cHGdpJ*C z)YfwQ z77!qW7`|RYh-&d^tp}Gx^|P)uv^Ic1DLK@Z5Ta^x_&aPQKS@*OfA>31)j~eghTzN@ zYTYizbus-urrSj|8lV&y142NOAdVg5t0=;g60J40T8)DT4?Yt?e@W;hru+3g#%jX$ z1b(N5)`qCN#^T}<%JG<*p2YWD02UV(SXt@exeAn|GciHn`yh)6dhp-@YpW4cGgE|t zM-YUptUTiW{RKJ`Es}npMq`Y2d%Wty2J%DCqy3{F@yQ?m$oR>VbWWT=XpPCTf@ot9 zj)QPrY@TDaMhHRfI5ZzTz)=cg3}G04V?;g;lpoO8zZa}6#xq#8jYbnc2oXZyx^A^v zJCjqi+7m#rqLoreDXY(?r)QX$$dOVZ1XwK1<`_zOc)rItAf+7Y!v^xD5F9>riulwi zD*9X(6$BdwAY8Zl+XD_BIPmPOd_xdY;yf`XfdEIMoDH;~l-gF5ZuYrS4$Wp`%kOM_ z3J^sR)>^vOZjf8M!Kn9-+Gg3OZxhPhQXl9@*n<3izfY1RIF5sq5@QU;81g)S4ucke z9eHwu5Y;x9Qa<;|{Y%4Ii|e}7YPE{P4dh#Esn;9CQN+!gH>ua_>LCPZZD=&d*i-4mjeRVwo%Pt1{5;RevJBt%Sy^4B zyVgZ1iRb&Y#>WdYwA&>~5`_7% zkW!N6IT%fR?>@K=!U~*P4U?vY?m7M%2lnr0W@d&)qfuF4aU8R>w8Z`U_gPq2_>1TQ zt#iB}V0QmOOr9d7B+qj^&!gU`k!Ly9T0GAq&-Di5V?FshI$7{|izuZ~Qj%pEd0qrU zRJB_BG#U+*>yo5>(tH)Lm^4E;4vrt<)oNG^GVn2J2G&xq*D+}y<+@ncCC@U($Hy^w zhFDy}0*!Wy*Up^byC+Z5o|?kh#OW#V!V519NYX4VEphqsWp3QKK^(_VP52OLfWV;R zM@-BVPNV>Gtqapv3Iw7u#Y?5S-ap!ELN*6n*Q}VZ4X(cw0^F%ZdDTl8Ou$k))aQN_H-gx7UO-Z-blIJ;Tnv&;vwW>VN zt9EE9XN3@iVaUmoCpmibC?9_KAzys)#g60I3TfI$xdCH)=kNoEJ+(c>IFzdNpS2bQ zD5q~(8ocqw8yq}%u<~Hb0VPSo&6_v5a^(t( zi;GoQcRiF+OioU6!FRI z9{7A`#?WYv!QxpU`+ zh%Z2CX$(Yl0vo%L_Bzcin9#U?lRbwM0=g6qkwP(TO^K{CKqz%R!t! zf1V2$E)0cS<2WWw)2DW<-hcmnk|g0rKl)MSEY8i%arf?BKK=AlYPH&qVp9rO>t-a* z6mgt@)#SOraSDZNw82p9+O(e*^50r?o`dUADTqxl68TXSk*4Xkp$A|{ah53mZ?{^U zJ$tr_8|8V=GlJD(kaJcHmsB-M-Dk z&p&_sU?GU(m^g{a^Sp|Z8l!pj)mN*P(d~Bm-p+iF}2&z}pZ!Nt zBUoOGtA1#m)9dxc@?JKNv>OKnVFvAzx?Na!t>oKx8OJqeh|=_WtmP9Q$wo6*&mI_PSlZ`uZ;QdPovSBvC?=BpiS3wW^II zN%;Nyzvte)dnEn-j?XN2MW@r@U;g=@sMU%|jH8HNugm@W^K{p`^plv?wN-k(h`aah za{KmI^r8rWOP4NHB1#CssZ*zRe6Em^IPK9(R!Q@ie$uDg>(S3rwAMsXk6tfA3_>!c zNBiW@W_UUeR|wL3TO>#eu=)vtaxEpr&$mEwU zwC{O^b3tKDsdWw48cnQJI7$(QA!(X&?7PQ?9)9D-4W_53clEsa`FR?R;S!8ar^8!s zy~Th3U;oO&N)HvZ2poZRC1Z}*a$uJ)U#`ekO3`YySYBS<^7%?iqO~3?_ir=4FJO6j z3DHs@JsEEG{l?+4hsyUVr`dO@n=%PKST_$A92ofB7r={XXR~lh$q-SGs-s_D~Lb zc6N4K^1+f>2e&haHkw*3L`sD=IraJ&S(>7a!Es!&EX5d?=2(L)Gwhq)gX2hauF3Me zGD}O0>}2gG@!bg>T7z97M8QeB)v7*E2brlSQAP>Z|G(q2IvxJuKNTWqt9G9p!}|Et z^z<|rFJ9d8er+u6@sPN;LVaw4D2l6qnlXl2tyc8Yf^wP|qcH}8fI+59Y`IWJB0mg6 z*4EZ`<#m>ymQ=3y4bn7ab#-;<{?g$ZA1`VdgCJmed70(qW#k}xv=us?4nOY&Phph0?`><9JNZOclD%8Z6Li4O6YP#%>a37+L1;RI|7h z)`tO3ack-xaO$Oj*Mu&Z|0FNB@MsMdz@@dil>p%2zRt~e{b^gPRkLL9q| zMLoY{$_|L*$6o34uH9c;T->$Hhv7`!+S=Oo_bSE0qh;>Q$LybSh8aWGl~f-nr| zCw+{u2nlIFrQT>TIn}|M?aLxZB0tYk9xf~(2Gwhx=izz|aTKAHLzd_y%yu8fp>?}YP;vJ=GZ7YmQJPfb=`T6;6@72Z-`VI$XJjR+0+O3HyX`%+@;Dw>U z(7}k!(uPlBB=W@|;%JRU4(jlgQiMT>u@=X5!9pA*_(2ipX3)_)ckXcP*fF43`R#U_ z2M-?X`q`TeWMN@}U;gr!yHc_x_U+p@Bo@B@`s)okY`usSLPD( zJWJ`PDN;%rjRxIb7o`+N7vbg3Z@a)oB3~(oR;#`9jT6N^c3^LpCpWa#RkHiF z*Iwf{zxmBzfTNY(!Q&O5W!Xrn%o8V0RDWx&Sy@@x@cs3ZBPFb?^@(g7XJrj2>V=e) z^!q8E=TWQIibXkaFUq{`b6xqPV*MbJBw=-RwF)up-@l()twtQjLsf9QX=^?4qa<2_ zAgDxN+0IVi*V@pTYBAn!5_m3IRwv8zA~fA@A*Dho2V|*e%My61sP9(zi;$n^8A8b6 zN@fbz{_NSa2vOL?b8~Zi_St9LxpRj&j(O#kS9T=hNg1#69LsP5#|%n0N|YAJv17-o z3AWa9;lhO-$0CFzPa;7>(RYx?z``9`W$U7*B5$3Ny3dg_xL}*`5h+fvzlsNoE&4K=25HF*t6FqOEaWu6c(7H za2%IB*SM|%A$aSpx2lw+F@`Hwu59Zym&kL?)KrU^nMthG=)8_LMX4aRi0CRu4Gz>% z$$fZS?E75F7eWw65n&M0tk>yhhOg(BIOGTTo=29Y=-l#Xd5JX3@jVYO@bO)bfBUz$ zdGV!}n3$MAO3B>Z98nbU(MKO`cuu#kS?I;QKHK8_`QNd$+U5I)rn&ZDnXgw8CTbo@ z9MO&Y=sc&_?G^66F*u$_nr66;#xsudM7W;+_$lYrZlshbpiv8{g&~3OQ>)kU zT#wE~i#OkVlQ-XdbEs0{qmMr!8YEbDhoV5(aU2}Ssl5F1f7f;KJh##_N(z(|IO~4P zO?JRj%ls(n(d~ALdJ?c4IkX3p_klWV#wBsa5Unv(`l^ zn?p*8<2al0ASr>FF5)-{nz%aD0lw_DK!Y9T<0q+kR^D_w3m-Wa_Pt!-S4N4JO(VMY^%5*)LXx z)|z+Tc?aM3t5QMF^Z4HPzDKLos&)pzzVSMF)6fnglob5qanQa-h2G;hd<=t!Gj1Pa2$u1Uw)a{*;y`JxWJVw zSBRnrM@pv0i%gbV8-AwmNPMRtI1EFM9zDwO78dnOr7X{~j5Ny#r9e3jP4DsQ*T(QfF6EmGtZjxkj`{6xf6JLOXL#k6 zS1Ru}3`0(zKF#st$GLm=E?<1{1rHuP*wi{vO0jqEUS56mRc2>rt14x9oFlk$4{^0gTvj3{&Ly=fHfBt+` zS6QCB5<=knK8Fq+;yd5@PIdAl%d)B}tgO#}GCWWYIF4h^pFhuy8#kW1f5sF6#8+N< zrSigE*R8A_V@&ntlIlbXqN-=z4x^QbYh6|3mi6ZABZSX_OP4Nj>((uf967?_!-t2; z1j|FyN~s;I<;tSlOP4P3>8GDQ)oNdllHfA*T&smVdh`fKIT)+)Jb!R(Dksk}oI!nN ztzIYapJQN6Yt8cV3jMS=J?JQh$;ru~Q0lXw*X!}oM<4O|=bv-v&>;>VK1`?689EWU z8OrkVg@pyKUcJh-YuBEt#Jt3lwV_#-aqr$ethF52zn`_$)gr2^4a#v5!VY$7Fv!Lg z=d^Yzq8f>O*L7*N3s)LZyrrWY`13>*MO?gik&72E;`=@m6BA5NPt)misMqU7=yvcr zfQ5wx?%%)9($dndJl5S{{V^kB48HGIeu$$K&Y<*L3PC<7m<__h&sZPFug;tav1#8% zllekCH!-tYXsvnp@F5Q$KHTx%-JB(RTC7*%g`?#FmM|=eqp+6cm6gJo8Wb}rsfucb zLC*S_i>Cg)K}t!#-{*UJwul{ve9G z@#Rm?M1GcKBuRqjd6go3Yz1f*78Y?Fm+}=arS@+$nuNjjit}#;lH*VhK?%l6he)NcLw~LgL zD2h06U_U?p@sA60u{c415rRg&#@gCiQFNLlNU6ScJcr|9*1ILfIC1)^RTHF!^3p67#*ggbC=1)a&x zre*M>lb`o!iTl*Y6>Iz2eD&1>l;d*Z#7T@bj~^gl+$|m$TksWV2@b;vhi?n)AT=n& zp!zw>u*MYC4fPtW@z$VVfZ+nEQvW{dIa~m*z7N9~QF4vfUkR9--A8l!6zz%jkU1rV zV9YO?Z+d^*@7UZ9<$EZ~7eAHNc14c1s7IB~N2En0|tUbERo_0>q zEb81xeP6=23F`?|YS`)9>ctj2;hC(RW_#bWeEnO6C&_&tFJ5w7*X7>5d(Yg^|EqY` kv%n=vtEsGtc3qeM3*@Yrq^%%I%m4rY07*qoM6N<$f~Ok7!TallowedModuleList = array('Accounts' => 'Accounts', 'Contacts' => 'Contacts', 'Opportunities' => 'Opportunities', 'Leads' => 'Leads'); + + parent::__construct(); + } + + public function filterAllowedModules( $moduleList ) { + // InsideView currently has no ability to talk to modules other than these four + $outModuleList = array(); + foreach ( $moduleList as $module ) { + if ( !in_array($module,$this->allowedModuleList) ) { + continue; + } else { + $outModuleList[$module] = $module; + } + } + return $outModuleList; + } + + // InsideView currently has no web service to control field mappings + public function getMapping() { + return; + } + + public function saveMappingHook($mapping) { + + $removeList = $this->allowedModuleList; + + if ( is_array($mapping['beans']) ) { + foreach($mapping['beans'] as $module => $ignore) { + unset($removeList[$module]); + + check_logic_hook_file($module, 'after_ui_frame', array(1, $module. ' InsideView frame', 'modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php', 'InsideViewLogicHook', 'showFrame') ); + } + } + + foreach ( $removeList as $module ) { + remove_logic_hook($module, 'after_ui_frame', array(1, $module. ' InsideView frame', 'modules/Connectors/connectors/sources/ext/rest/insideview/InsideViewLogicHook.php', 'InsideViewLogicHook', 'showFrame') ); + } + + return parent::saveMappingHook($mapping); + } + + + + public function getItem($args=array(), $module=null){} + public function getList($args=array(), $module=null) {} + + + public function ext_allowInsideView( $request ) { + $GLOBALS['current_user']->setPreference('allowInsideView',1,0,'Connectors'); + return true; + } +} diff --git a/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php b/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php new file mode 100644 index 00000000..ea41dc9e --- /dev/null +++ b/modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php @@ -0,0 +1,55 @@ + + array ( + 'Accounts' => + array ( + ), + 'Contacts' => + array ( + ), + 'Leads' => + array ( + ), + 'Opportunities' => + array ( + ), + ), +); +?> diff --git a/modules/Connectors/controller.php b/modules/Connectors/controller.php index a0c9e18f..a9929410 100644 --- a/modules/Connectors/controller.php +++ b/modules/Connectors/controller.php @@ -202,6 +202,29 @@ class ConnectorsController extends SugarController { function post_save(){} + function action_CallConnectorFunc() { + $this->view = 'ajax'; + $json = getJSONobj(); + + if(!empty($_REQUEST['source_id'])) + { + $source_id = $_REQUEST['source_id']; + require_once('include/connectors/sources/SourceFactory.php'); + $source = SourceFactory::getSource($source_id); + + $method = 'ext_'.$_REQUEST['source_func']; + if ( method_exists($source,$method) ) { + echo $json->encode($source->$method($_REQUEST)); + } else { + echo $json->encode(array('error'=>true,'errorMessage'=>'Could Not Find Function: '.$method.' in class: '.get_class($source))); + } + } + else + { + echo $json->encode(array('error'=>true,'errorMessage'=>'Source Id is not specified.')); + } + } + function action_CallRest() { $this->view = 'ajax'; @@ -448,9 +471,12 @@ class ConnectorsController extends SugarController { mkdir_recursive("{$dir}"); } - if(!write_array_to_file('mapping', array('beans'=>array()), "{$dir}/mapping.php")) { + $fakeMapping = array('beans'=>array()); + if(!write_array_to_file('mapping', $fakeMapping, "{$dir}/mapping.php")) { $GLOBALS['log']->fatal("Cannot write file {$dir}/mapping.php"); } + $s = SourceFactory::getSource($id); + $s->saveMappingHook($fakeMapping); } //if } //foreach @@ -498,6 +524,7 @@ class ConnectorsController extends SugarController { if(!write_array_to_file('mapping', $mapping, "{$dir}/mapping.php")) { $GLOBALS['log']->fatal("Cannot write file {$dir}/mapping.php"); } + $source->saveMappingHook($mapping); } //foreach @@ -579,6 +606,7 @@ class ConnectorsController extends SugarController { if(!write_array_to_file('mapping', $mapping, "{$dir}/mapping.php")) { $GLOBALS['log']->fatal("Cannot write file {$dir}/mapping.php"); } + $source->saveMappingHook($mapping); } //Rewrite the metadata files diff --git a/modules/Connectors/views/view.displayproperties.php b/modules/Connectors/views/view.displayproperties.php index 171d11c3..a97c19f7 100644 --- a/modules/Connectors/views/view.displayproperties.php +++ b/modules/Connectors/views/view.displayproperties.php @@ -82,7 +82,7 @@ class ViewDisplayProperties extends ViewList //Do filtering here? $count = 0; global $current_user; - $access = get_admin_modules_for_user($current_user); + $access = $current_user->getDeveloperModules(); $d = dir('modules'); while($e = $d->read()){ if(substr($e, 0, 1) == '.' || !is_dir('modules/' . $e))continue; @@ -92,6 +92,12 @@ class ViewDisplayProperties extends ViewList } } + $s = SourceFactory::getSource($source); + + // Not all sources can be connected to all modules + $enabled_modules = $s->filterAllowedModules($enabled_modules); + $disabled_modules = $s->filterAllowedModules($disabled_modules); + asort($enabled_modules); asort($disabled_modules); @@ -111,7 +117,6 @@ class ViewDisplayProperties extends ViewList $this->ss->assign('externalOnly', !empty($sources[$source]['eapm']['only'])); // We don't want to tell the user to set the properties of the connector if there aren't any - $s = SourceFactory::getSource($source); $fields = $s->getRequiredConfigFields(); $this->ss->assign('externalHasProperties', !empty($fields)); diff --git a/modules/Connectors/views/view.modifydisplay.php b/modules/Connectors/views/view.modifydisplay.php index 7d5e9e13..6215948e 100644 --- a/modules/Connectors/views/view.modifydisplay.php +++ b/modules/Connectors/views/view.modifydisplay.php @@ -76,7 +76,7 @@ class ViewModifyDisplay extends SugarView $this->ss->assign('APP', $GLOBALS['app_strings']); $this->ss->assign('theme', $GLOBALS['theme']); - echo $this->getModuleTitle(); + echo $this->getModuleTitle(false); $this->ss->display('modules/Connectors/tpls/modify_display.tpl'); } } \ No newline at end of file diff --git a/modules/Connectors/views/view.modifymapping.php b/modules/Connectors/views/view.modifymapping.php index 42139acc..9b039475 100644 --- a/modules/Connectors/views/view.modifymapping.php +++ b/modules/Connectors/views/view.modifymapping.php @@ -84,7 +84,7 @@ class ViewModifyMapping extends SugarView } $this->ss->assign('SOURCES', $connectors); - echo $this->getModuleTitle(); + echo $this->getModuleTitle(false); $this->ss->display('modules/Connectors/tpls/modify_mapping.tpl'); } } \ No newline at end of file diff --git a/modules/Connectors/views/view.modifyproperties.php b/modules/Connectors/views/view.modifyproperties.php index 5fc7701a..c808bd92 100644 --- a/modules/Connectors/views/view.modifyproperties.php +++ b/modules/Connectors/views/view.modifyproperties.php @@ -98,7 +98,7 @@ class ViewModifyProperties extends SugarView } $this->ss->assign('SOURCES', $connectorsToShow); $this->ss->assign('REQUIRED_FIELDS', $required_fields); - echo $this->getModuleTitle(); + echo $this->getModuleTitle(false); $this->ss->display('modules/Connectors/tpls/modify_properties.tpl'); } } \ No newline at end of file diff --git a/modules/Connectors/views/view.modifysearch.php b/modules/Connectors/views/view.modifysearch.php index 99a5be8d..04928f5c 100644 --- a/modules/Connectors/views/view.modifysearch.php +++ b/modules/Connectors/views/view.modifysearch.php @@ -84,7 +84,7 @@ class ViewModifySearch extends SugarView } $this->ss->assign('SOURCES', $connectors); - echo $this->getModuleTitle(); + echo $this->getModuleTitle(false); $this->ss->display('modules/Connectors/tpls/modify_search.tpl'); } } \ No newline at end of file diff --git a/modules/Contacts/Contact.php b/modules/Contacts/Contact.php index 7a4cba41..b6c7a0dd 100644 --- a/modules/Contacts/Contact.php +++ b/modules/Contacts/Contact.php @@ -361,10 +361,14 @@ class Contact extends Person { left join contacts con_reports_to on con_reports_to.id = contacts.reports_to_id where contacts.id = '".$this->id."'"; // Bug 43196 - If a contact is related to multiple accounts, make sure we pull the one we are looking for - if ( !empty($this->account_id) ) { + // Bug 44730 was introduced due to this, fix is to simply clear any whitespaces around the account_id first + + $clean_account_id = trim($this->account_id); + + if ( !empty($clean_account_id) ) { $query .= " and acc.id = '{$this->account_id}'"; } - + $result = $this->db->query($query,true," Error filling in additional detail fields: "); // Get the id and the name. diff --git a/modules/Contacts/metadata/detailviewdefs.php b/modules/Contacts/metadata/detailviewdefs.php index c35546f1..3f56ae05 100644 --- a/modules/Contacts/metadata/detailviewdefs.php +++ b/modules/Contacts/metadata/detailviewdefs.php @@ -91,6 +91,15 @@ $viewdefs['Contacts']['DetailView'] = array( array ( 'name' => 'account_name', 'label' => 'LBL_ACCOUNT_NAME', + 'displayParams' => + array ( + 'enableConnectors' => true, + 'module' => 'Contacts', + 'connectors' => + array ( + 0 => 'ext_rest_linkedin', + ), + ), ), array ( 'name' => 'phone_fax', diff --git a/modules/Documents/metadata/subpanels/default.php b/modules/Documents/metadata/subpanels/default.php index 31b761b1..d7eda080 100644 --- a/modules/Documents/metadata/subpanels/default.php +++ b/modules/Documents/metadata/subpanels/default.php @@ -94,6 +94,16 @@ $subpanel_layout = array( 'vname' => 'LBL_LIST_ACTIVE_DATE', 'width' => '10%', ), + 'get_latest'=>array( + 'widget_class' => 'SubPanelGetLatestButton', + 'module' => 'Documents', + 'width' => '5%', + ), + 'load_signed'=>array( + 'widget_class' => 'SubPanelLoadSignedButton', + 'module' => 'Documents', + 'width' => '5%', + ), 'edit_button'=>array( 'vname' => 'LBL_EDIT_BUTTON', 'widget_class' => 'SubPanelEditButton', diff --git a/modules/DynamicFields/DynamicField.php b/modules/DynamicFields/DynamicField.php index 8a9420fd..92f00309 100644 --- a/modules/DynamicFields/DynamicField.php +++ b/modules/DynamicFields/DynamicField.php @@ -544,12 +544,27 @@ class DynamicField { $this->buildCache($this->module); if($field){ if(!$is_update){ + //Do two SQL calls here in this case + //The first is to create the column in the custom table without the default value + //The second is to modify the column created in the custom table to set the default value + //We do this so that the existing entries in the custom table don't have the default value set + $field->default = ''; + $field->default_value = ''; $query = $field->get_db_add_alter_table($this->bean->table_name . '_cstm'); + if(!empty($query)){ + $GLOBALS['db']->query($query); + $field->default = $fmd->default_value; + $field->default_value = $fmd->default_value; + $query = $field->get_db_modify_alter_table($this->bean->table_name . '_cstm'); + if(!empty($query)){ + $GLOBALS['db']->query($query); + } + } }else{ $query = $field->get_db_modify_alter_table($this->bean->table_name . '_cstm'); - } - if(!empty($query)){ - $GLOBALS['db']->query($query); + if(!empty($query)){ + $GLOBALS['db']->query($query); + } } $this->saveExtendedAttributes($field, array_keys($fmd->field_defs)); } diff --git a/modules/EmailMan/EmailImage.php b/modules/EmailMan/EmailImage.php new file mode 100644 index 00000000..9dee86d5 --- /dev/null +++ b/modules/EmailMan/EmailImage.php @@ -0,0 +1,63 @@ +retrieve_by_string_fields(array('id' => $_REQUEST['id'], 'parent_type' => "Emails"))) { + die("Not a Valid Entry Point"); +} + +$location = $GLOBALS['sugar_config']['upload_dir']."/" . $_REQUEST['id']; + +$mime = getimagesize($location); + +if(!empty($mime)) { + header("Content-Type: {$mime['mime']}"); +} else { + header("Content-Type: image/png"); +} + + +readfile($location); + + diff --git a/modules/Emails/EmailUI.css b/modules/Emails/EmailUI.css index a49db9a6..f3fa44b8 100644 --- a/modules/Emails/EmailUI.css +++ b/modules/Emails/EmailUI.css @@ -268,6 +268,8 @@ li.yuimenuitem-disabled { } #lefttabs .yui-content { border: none; + overflow: auto; + } #lefttabs .yui-dt-empty { diff --git a/modules/Employees/controller.php b/modules/Employees/controller.php index 82952b54..4695495a 100644 --- a/modules/Employees/controller.php +++ b/modules/Employees/controller.php @@ -49,7 +49,7 @@ class EmployeesController extends SugarController{ protected function action_delete() { - if($_REQUEST['record'] != $GLOBALS['current_user']->id && (is_admin($GLOBALS['current_user'])||is_admin_for_module($GLOBALS['current_user'],'Users'))) + if($_REQUEST['record'] != $GLOBALS['current_user']->id && $GLOBALS['current_user']->isAdminForModule('Users')) { $u = new User(); $u->retrieve($_REQUEST['record']); diff --git a/modules/Employees/views/view.detail.php b/modules/Employees/views/view.detail.php index 7b3e3f1b..4d0cfbc0 100644 --- a/modules/Employees/views/view.detail.php +++ b/modules/Employees/views/view.detail.php @@ -62,7 +62,7 @@ class EmployeesViewDetail extends ViewDetail { } $showDeleteButton = FALSE; - if( $_REQUEST['record'] != $GLOBALS['current_user']->id && ( is_admin($GLOBALS['current_user']) || is_admin_for_module($GLOBALS['current_user'],'Users')) ) + if( $_REQUEST['record'] != $GLOBALS['current_user']->id && $GLOBALS['current_user']->isAdminForModule('Users') ) { $showDeleteButton = TRUE; if( empty($this->bean->user_name) ) //Indicates just employee diff --git a/modules/Employees/views/view.list.php b/modules/Employees/views/view.list.php index 953c57c9..7a92c454 100644 --- a/modules/Employees/views/view.list.php +++ b/modules/Employees/views/view.list.php @@ -45,7 +45,7 @@ class EmployeesViewList extends ViewList $this->lv = new ListViewSmarty(); $this->lv->delete = false; $this->lv->email = false; - if (!is_admin($GLOBALS['current_user'])&& !is_admin_for_module($GLOBALS['current_user'],'Users')){ + if (!$GLOBALS['current_user']->isAdminForModule('Users')){ $this->lv->multiSelect = false; } } @@ -61,7 +61,7 @@ class EmployeesViewList extends ViewList $this->lv->ss->assign("SEARCH",true); $tplFile = 'include/ListView/ListViewGeneric.tpl'; - if (!is_admin($GLOBALS['current_user'])&& !is_admin_for_module($GLOBALS['current_user'],'Users')){ + if (!$GLOBALS['current_user']->isAdminForModule('Users')){ $tplFile = 'include/ListView/ListViewNoMassUpdate.tpl'; } $this->lv->setup($this->seed, $tplFile, $this->where, $this->params); diff --git a/modules/Home/quicksearchQuery.php b/modules/Home/quicksearchQuery.php index 0584bda6..b213a92d 100644 --- a/modules/Home/quicksearchQuery.php +++ b/modules/Home/quicksearchQuery.php @@ -132,7 +132,7 @@ class quicksearchQuery { foreach($args['modules'] as $module) { require_once($beanFiles[$beanList[$module]]); - $focus = new $beanList[$module]; + $focus = new $beanList[$module]; $query_orderby = ''; if (!empty($args['order'])) { @@ -167,6 +167,13 @@ class quicksearchQuery { for($i = 0; $i < count($list_return); $i++) { $list_arr['fields'][$i]= array(); $list_arr['fields'][$i]['module']= $list_return[$i]->object_name; + + //C.L.: Bug 43395 - For Quicksearch, do not return values with salutation and title formatting + if($list_return[$i] instanceof Person) + { + $list_return[$i]->createLocaleFormattedName = false; + } + $listData = $list_return[$i]->get_list_view_data(); foreach($args['field_list'] as $field) { @@ -217,64 +224,6 @@ class quicksearchQuery { return $list_arr; } - /** - * get_contact_array - * - */ - function get_contact_array($args) { - $json = getJSONobj(); - global $sugar_config, $beanFiles, $beanList, $locale; - - if($sugar_config['list_max_entries_per_page'] < ($args['limit'] + 1)) // override query limits - $sugar_config['list_max_entries_per_page'] = ($args['limit'] + 1); - - $list_return = array(); - - foreach($args['modules'] as $module) { - require_once($beanFiles[$beanList[$module]]); - $focus = new $beanList[$module]; - - $query_orderby = ''; - if (!empty($args['order'])) { - $query_orderby = $args['order']; - } - $query_limit = ''; - if (!empty($args['limit'])) { - $query_limit = $args['limit']; - } - $query_where = $this->constructWhere($args, $focus); - $list_arr = array(); - if($focus->ACLAccess('ListView', true)) { - $curlist = $focus->get_list($query_orderby, $query_where, 0, $query_limit, -1, 0); - $list_return = array_merge($list_return,$curlist['list']); - } - } - $list_arr['totalCount']=count($list_return); - $list_arr['fields']= array(); - for($i = 0; $i < count($list_return); $i++) { - $list_arr['fields'][$i]= array(); - $list_arr['fields'][$i]['module']= $list_return[$i]->object_name; - $contactName = ""; - foreach($args['field_list'] as $field) { - // We are overriding the contact_id param and the reports_to_id param to change to 'id' - if(preg_match('/reports_to_id$/s',$field) || preg_match('/contact_id$/s',$field)) { // We are overriding the reports_to_id param to change to 'id' - $list_arr['fields'][$i][$field] = $list_return[$i]->id; - } - else { - $list_arr['fields'][$i][$field] = $list_return[$i]->$field; - } - } //foreach - - $contactName = $locale->getLocaleFormattedName($list_arr['fields'][$i]['first_name'], - $list_arr['fields'][$i]['last_name'], - $list_arr['fields'][$i]['salutation']); - - $list_arr['fields'][$i][$args['field_list'][0]] = $contactName; - } //for - - $str = $json->encodeReal($list_arr); - return $str; - } /** * Returns the list of users, faster than using query method for Users module diff --git a/modules/Import/views/view.step2.php b/modules/Import/views/view.step2.php index f3d512df..2f8e6329 100644 --- a/modules/Import/views/view.step2.php +++ b/modules/Import/views/view.step2.php @@ -210,6 +210,10 @@ class ImportViewStep2 extends SugarView "INSTRUCTION_STEP" => $mod_strings["LBL_{$lang_key}_NUM_$i"], ); } + if(!isset($mod_strings["LBL_IMPORT_{$lang_key}_TITLE"])){ + $lang_key = 'CUSTOM'; + } + $this->ss->assign("INSTRUCTIONS_TITLE",$mod_strings["LBL_IMPORT_{$lang_key}_TITLE"]); $this->ss->assign("instructions",$instructions); } diff --git a/modules/Import/views/view.step4.php b/modules/Import/views/view.step4.php index 24398b69..71f6f5c4 100644 --- a/modules/Import/views/view.step4.php +++ b/modules/Import/views/view.step4.php @@ -493,7 +493,7 @@ class ImportViewStep4 extends SugarView $list_of_users=$focus->sync_contact; //and set it to false for the save $focus->sync_contact=false; - } else if($focus->object_name == "User" && !empty($current_user) && $focus->is_admin && !is_admin($current_user) && is_admin_for_module($current_user, 'Users')) { + } else if($focus->object_name == "User" && !empty($current_user) && $current_user->isAdminForModule( 'Users')) { sugar_die($GLOBALS['mod_strings']['ERR_IMPORT_SYSTEM_ADMININSTRATOR']); } //bug# 40260 setting it true as the module in focus is involved in an import diff --git a/modules/InboundEmail/EditView.html b/modules/InboundEmail/EditView.html index 392ea2ea..3edaadf5 100644 --- a/modules/InboundEmail/EditView.html +++ b/modules/InboundEmail/EditView.html @@ -198,7 +198,7 @@ - {MOD.LBL_FROM_ADDR}:{APP.LBL_REQUIRED_SYMBOL}  + {MOD.LBL_FROM_ADDR}:{APP.LBL_REQUIRED_SYMBOL}  diff --git a/modules/InboundEmail/EditView.php b/modules/InboundEmail/EditView.php index 07259840..a55dda13 100644 --- a/modules/InboundEmail/EditView.php +++ b/modules/InboundEmail/EditView.php @@ -79,7 +79,8 @@ if($focus->mailbox_type == 'bounce') else unset($domMailBoxType['bounce']); -if(isset($_REQUEST['isDuplicate']) && $_REQUEST['isDuplicate'] == 'true') { +$isDuplicate = isset($_REQUEST['isDuplicate']) && $_REQUEST['isDuplicate'] == 'true'; +if($isDuplicate) { $GLOBALS['log']->debug("isDuplicate found - duplicating record of id: ".$focus->id); $origin_id = $focus->id; $focus->id = ""; @@ -192,6 +193,14 @@ if(isset($focus->id)) { // javascript $javascript->setSugarBean($focus); $javascript->setFormName('EditView'); + +//If we are creating a duplicate, remove the email_password from being required since this +//can be derived from the InboundEmail we are duplicating from +if($isDuplicate && isset($focus->required_fields['email_password'])) +{ + unset($focus->required_fields['email_password']); +} + $javascript->addRequiredFields(); $javascript->addFieldGeneric('email_user', 'alpha', $mod_strings['LBL_LOGIN'], true); $javascript->addFieldGeneric('email_password', 'alpha', $mod_strings['LBL_PASSWORD'], $validatePass); diff --git a/modules/InboundEmail/language/en_us.lang.php b/modules/InboundEmail/language/en_us.lang.php index fc83435c..b9cef6ce 100644 --- a/modules/InboundEmail/language/en_us.lang.php +++ b/modules/InboundEmail/language/en_us.lang.php @@ -90,6 +90,7 @@ $mod_strings = array( 'LBL_FOUND_MAILBOXES' => 'Found the following usable folders.
Click one to choose it:', 'LBL_FOUND_OPTIMUM_MSG' => '
Found optimum settings. Press the button below to apply them to your mail account.', 'LBL_FROM_ADDR' => '"From" Address', + 'LBL_FROM_ADDR_DESC' => "The email address provided here might not appear in the 'From' address section of the email sent due to restrictions imposed by the mail service provider. In these circumstances, the email address defined in the outgoing mail server will be used.", 'LBL_FROM_NAME_ADDR' => 'From Name/Email', 'LBL_FROM_NAME' => '"From" Name', 'LBL_GROUP_QUEUE' => 'Assign To Group', diff --git a/modules/ModuleBuilder/Module/StudioBrowser.php b/modules/ModuleBuilder/Module/StudioBrowser.php index 45c8895e..17bffc8e 100644 --- a/modules/ModuleBuilder/Module/StudioBrowser.php +++ b/modules/ModuleBuilder/Module/StudioBrowser.php @@ -46,11 +46,11 @@ class StudioBrowser{ function loadModules(){ global $current_user; - $access = get_admin_modules_for_user($current_user); + $access = $current_user->getDeveloperModules(); $d = dir('modules'); while($e = $d->read()){ if(substr($e, 0, 1) == '.' || !is_dir('modules/' . $e))continue; - if(file_exists('modules/' . $e . '/metadata/studio.php') && isset($GLOBALS [ 'beanList' ][$e]) && (in_array($e, $access) || is_admin($current_user))) // installed modules must also exist in the beanList + if(file_exists('modules/' . $e . '/metadata/studio.php') && isset($GLOBALS [ 'beanList' ][$e]) && (in_array($e, $access) || $current_user->isAdmin())) // installed modules must also exist in the beanList { $this->modules[$e] = StudioModuleFactory::getStudioModule( $e ) ; } diff --git a/modules/ModuleBuilder/controller.php b/modules/ModuleBuilder/controller.php index be09ee7c..1c20bcff 100644 --- a/modules/ModuleBuilder/controller.php +++ b/modules/ModuleBuilder/controller.php @@ -84,10 +84,10 @@ class ModuleBuilderController extends SugarController function process(){ $GLOBALS [ 'log' ]->info ( get_class($this).":" ) ; global $current_user; - $access = get_admin_modules_for_user($current_user); - if(is_admin($current_user) || (is_admin_for_any_module($current_user) && !isset($_REQUEST['view_module']) && (isset($_REQUEST['action']) && $_REQUEST['action'] != 'package'))|| + $access = $current_user->getDeveloperModules(); + if($current_user->isAdmin() || ($current_user->isDeveloperForAnyModule() && !isset($_REQUEST['view_module']) && (isset($_REQUEST['action']) && $_REQUEST['action'] != 'package'))|| (isset($_REQUEST['view_module']) && (in_array($_REQUEST['view_module'], $access)|| empty($_REQUEST['view_module']))) || - (isset($_REQUEST['type']) && (($_REQUEST['type']=='dropdowns' && is_admin_for_any_module($current_user))|| + (isset($_REQUEST['type']) && (($_REQUEST['type']=='dropdowns' && $current_user->isDeveloperForAnyModule())|| ($_REQUEST['type']=='studio' && displayStudioForCurrentUser() == true)))) { $this->hasAccess = true; diff --git a/modules/ModuleBuilder/views/view.module.php b/modules/ModuleBuilder/views/view.module.php index 86e1b288..1f82cbaa 100644 --- a/modules/ModuleBuilder/views/view.module.php +++ b/modules/ModuleBuilder/views/view.module.php @@ -38,6 +38,8 @@ require_once('modules/ModuleBuilder/MB/AjaxCompose.php'); class ViewModule extends SugarView { + var $mbModule; + /** * @see SugarView::_getModuleTitleParams() */ @@ -62,11 +64,11 @@ class ViewModule extends SugarView $package = $mb->packages[$_REQUEST['view_package']]; $module_name = (!empty($_REQUEST['view_module']))?$_REQUEST['view_module']:''; $package->getModule($module_name); - $this->module = $package->modules[$module_name]; + $this->mbModule = $package->modules[$module_name]; $this->loadPackageHelp($module_name); // set up the list of either available types for a new module, or implemented types for an existing one - $types = (empty($module_name)) ? MBModule::getTypes() : $this->module->mbvardefs->templates ; + $types = (empty($module_name)) ? MBModule::getTypes() : $this->mbModule->mbvardefs->templates ; foreach( $types as $type=>$definition) { @@ -76,7 +78,7 @@ class ViewModule extends SugarView $smarty->assign('types',$translated_type); $smarty->assign('package', $package); - $smarty->assign('module', $this->module); + $smarty->assign('module', $this->mbModule); $smarty->assign('mod_strings', $mod_strings); $ajax = new AjaxCompose(); @@ -96,7 +98,7 @@ class ViewModule extends SugarView $name ) { - $this->module->help['default'] = (empty($name))?'create':'modify'; - $this->module->help['group'] = 'module'; + $this->mbModule->help['default'] = (empty($name))?'create':'modify'; + $this->mbModule->help['group'] = 'module'; } } \ No newline at end of file diff --git a/modules/ModuleBuilder/views/view.modulefields.php b/modules/ModuleBuilder/views/view.modulefields.php index 55728829..0eca18e8 100644 --- a/modules/ModuleBuilder/views/view.modulefields.php +++ b/modules/ModuleBuilder/views/view.modulefields.php @@ -39,6 +39,8 @@ require_once('modules/ModuleBuilder/views/view.modulefield.php'); class ViewModulefields extends SugarView { + var $mbModule; + /** * @see SugarView::_getModuleTitleParams() */ @@ -111,12 +113,12 @@ class ViewModulefields extends SugarView $package = $mb->packages[$_REQUEST['view_package']]; $package->getModule($module_name); - $this->module = $package->modules[$module_name]; + $this->mbModule = $package->modules[$module_name]; $this->loadPackageHelp($module_name); - $this->module->getVardefs(true); - $this->module->mbvardefs->vardefs['fields'] = array_reverse($this->module->mbvardefs->vardefs['fields'], true); + $this->mbModule->getVardefs(true); + $this->mbModule->mbvardefs->vardefs['fields'] = array_reverse($this->mbModule->mbvardefs->vardefs['fields'], true); $loadedFields = array(); - foreach($this->module->mbvardefs->vardefs['fields'] as $k=>$v){ + foreach($this->mbModule->mbvardefs->vardefs['fields'] as $k=>$v){ if($k != $module_name) $titleLBL[$k]=translate("LBL_".strtoupper($k),'ModuleBuilder'); else{ @@ -125,23 +127,23 @@ class ViewModulefields extends SugarView foreach($v as $field => $def) { if (isset($loadedFields[$field])) - unset($this->module->mbvardefs->vardefs['fields'][$k][$field]); + unset($this->mbModule->mbvardefs->vardefs['fields'][$k][$field]); else $loadedFields[$field] = true; } } - $this->module->mbvardefs->vardefs['fields'][$module_name] = $this->cullFields($this->module->mbvardefs->vardefs['fields'][$module_name]); - if(file_exists($this->module->path. '/language/'.$GLOBALS['current_language'].'.lang.php')){ - include($this->module->path .'/language/'. $GLOBALS['current_language'].'.lang.php'); - $this->module->setModStrings($GLOBALS['current_language'],$mod_strings); + $this->mbModule->mbvardefs->vardefs['fields'][$module_name] = $this->cullFields($this->mbModule->mbvardefs->vardefs['fields'][$module_name]); + if(file_exists($this->mbModule->path. '/language/'.$GLOBALS['current_language'].'.lang.php')){ + include($this->mbModule->path .'/language/'. $GLOBALS['current_language'].'.lang.php'); + $this->mbModule->setModStrings($GLOBALS['current_language'],$mod_strings); } - elseif(file_exists($this->module->path. '/language/en_us.lang.php')){ - include($this->module->path .'/language/en_us.lang.php'); - $this->module->setModStrings('en_us',$mod_strings); + elseif(file_exists($this->mbModule->path. '/language/en_us.lang.php')){ + include($this->mbModule->path .'/language/en_us.lang.php'); + $this->mbModule->setModStrings('en_us',$mod_strings); } $smarty->assign('title', $titleLBL); $smarty->assign('package', $package); - $smarty->assign('module', $this->module); + $smarty->assign('module', $this->mbModule); $smarty->assign('editLabelsMb','1'); //need to merge MB labels and studio labels. quick fix for now. @@ -163,8 +165,9 @@ class ViewModulefields extends SugarView $name ) { - $this->module->help['default'] = (empty($name))?'create':'modify'; - $this->module->help['group'] = 'module'; + $this->mbModule->help['default'] = (empty($name))?'create':'modify'; + $this->mbModule->help['group'] = 'module'; + $this->mbModule->help['group'] = 'module'; } function cullFields( diff --git a/modules/MySettings/StoreQuery.php b/modules/MySettings/StoreQuery.php index 7fa56891..499de02e 100644 --- a/modules/MySettings/StoreQuery.php +++ b/modules/MySettings/StoreQuery.php @@ -68,7 +68,7 @@ class StoreQuery{ if(!empty($value) && preg_match('/^(start_range_|end_range_|range_)?(.*?)(_advanced|_basic)$/', $key, $match)) { $field = $match[2]; - if(isset($bean->field_defs[$field]['type'])) + if(isset($bean->field_defs[$field]['type']) && empty($bean->field_defs[$field]['disable_num_format'])) { $type = $bean->field_defs[$field]['type']; @@ -147,7 +147,7 @@ class StoreQuery{ if(!empty($value) && !empty($bean) && preg_match('/^(start_range_|end_range_|range_)?(.*?)(_advanced|_basic)$/', $key, $match)) { $field = $match[2]; - if(isset($bean->field_defs[$field]['type'])) + if(isset($bean->field_defs[$field]['type']) && empty($bean->field_defs[$field]['disable_num_format'])) { $type = $bean->field_defs[$field]['type']; diff --git a/modules/Prospects/Prospect.php b/modules/Prospects/Prospect.php index 005a1ed2..1f2b0a2b 100644 --- a/modules/Prospects/Prospect.php +++ b/modules/Prospects/Prospect.php @@ -147,33 +147,25 @@ class Prospect extends Person { } - function fill_in_additional_list_fields() { - global $locale; - - $full_name = $locale->getLocaleFormattedName($this->first_name, $this->last_name, $this->salutation, $this->title); - $this->name = $full_name; - $this->full_name = $full_name; - $this->email_and_name1 = $full_name." <".$this->email1.">"; + function fill_in_additional_list_fields() + { + parent::fill_in_additional_list_fields(); + $this->_create_proper_name_field(); + $this->email_and_name1 = $this->full_name." <".$this->email1.">"; } - function fill_in_additional_detail_fields() { - global $locale; - parent::fill_in_additional_detail_fields(); - $full_name = $locale->getLocaleFormattedName($this->first_name, $this->last_name, $this->salutation, $this->title); - $this->name = $full_name; - $this->full_name = $full_name; + function fill_in_additional_detail_fields() + { + parent::fill_in_additional_list_fields(); + $this->_create_proper_name_field(); } function get_list_view_data() { - global $locale, $current_user; - - $full_name = $locale->getLocaleFormattedName($this->first_name, $this->last_name, $this->salutation, $this->title); - $this->name = $full_name; - $this->full_name = $full_name; - + global $current_user; + $this->_create_proper_name_field(); $temp_array = $this->get_list_view_array(); - $temp_array["ENCODED_NAME"] = $full_name; - $temp_array["FULL_NAME"] = $full_name; + $temp_array["ENCODED_NAME"] = $this->full_name; + $temp_array["FULL_NAME"] = $this->full_name; $temp_array["EMAIL1"] = $this->emailAddress->getPrimaryAddress($this); $this->email1 = $temp_array['EMAIL1']; $temp_array["EMAIL1_LINK"] = $current_user->getEmailLink('email1', $this, '', '', 'ListView'); diff --git a/modules/SavedSearch/SavedSearch.php b/modules/SavedSearch/SavedSearch.php index 89d7a335..5e969648 100644 --- a/modules/SavedSearch/SavedSearch.php +++ b/modules/SavedSearch/SavedSearch.php @@ -281,7 +281,7 @@ class SavedSearch extends SugarBean { if(!empty($value) && preg_match('/^(start_range_|end_range_|range_)?(.*?)(_advanced|_basic)$/', $input, $match)) { $field = $match[2]; - if(isset($searchModuleBean->field_defs[$field]['type'])) + if(isset($searchModuleBean->field_defs[$field]['type']) && empty($searchModuleBean->field_defs[$field]['disable_num_format'])) { $type = $searchModuleBean->field_defs[$field]['type']; @@ -375,7 +375,7 @@ class SavedSearch extends SugarBean { if(isset($searchModuleBean) && !empty($val) && preg_match('/^(start_range_|end_range_|range_)?(.*?)(_advanced|_basic)$/', $key, $match)) { $field = $match[2]; - if(isset($searchModuleBean->field_defs[$field]['type'])) + if(isset($searchModuleBean->field_defs[$field]['type']) && empty($searchModuleBean->field_defs[$field]['disable_num_format'])) { $type = $searchModuleBean->field_defs[$field]['type']; diff --git a/modules/Trackers/store/TrackerSessionsDatabaseStore.php b/modules/Trackers/store/TrackerSessionsDatabaseStore.php index 4270a07f..3f34b420 100644 --- a/modules/Trackers/store/TrackerSessionsDatabaseStore.php +++ b/modules/Trackers/store/TrackerSessionsDatabaseStore.php @@ -48,6 +48,12 @@ class TrackerSessionsDatabaseStore implements Store { public function flush($monitor) { $metrics = $monitor->getMetrics(); + + if(isset($monitor->client_ip) && strlen($monitor->client_ip) > 20) + { + $monitor->client_ip = substr($monitor->client_ip, 0, 20); + } + $columns = array(); $values = array(); foreach($metrics as $name=>$metric) { diff --git a/modules/UpgradeWizard/SugarMerge/EditViewMerge.php b/modules/UpgradeWizard/SugarMerge/EditViewMerge.php index 1b2c9c17..e1c24464 100644 --- a/modules/UpgradeWizard/SugarMerge/EditViewMerge.php +++ b/modules/UpgradeWizard/SugarMerge/EditViewMerge.php @@ -524,8 +524,10 @@ class EditViewMerge{ { //this is to handle the situation in Calls/Meetings where we updated the templateMeta and will fail if we don't update this. //long term we should not do this and should provide a way for calls/meetings to update themselves. - if( isset($this->customData[$this->module][$this->viewDefs][$this->templateMetaName]) && (!$this->module == 'Calls' || !$this->module == 'Meetings') ) - $this->newData[$this->module][$this->viewDefs][$this->templateMetaName] = $this->customData[$this->module][$this->viewDefs][$this->templateMetaName]; + if( isset($this->customData[$this->module][$this->viewDefs][$this->templateMetaName]) && strcmp(strtolower($this->module), 'calls') != 0 && strcmp(strtolower($this->module), 'meetings') != 0 ) + { + $this->newData[$this->module][$this->viewDefs][$this->templateMetaName] = $this->customData[$this->module][$this->viewDefs][$this->templateMetaName]; + } } /** diff --git a/modules/UpgradeWizard/commit.php b/modules/UpgradeWizard/commit.php index 13683f16..028a7124 100644 --- a/modules/UpgradeWizard/commit.php +++ b/modules/UpgradeWizard/commit.php @@ -266,7 +266,7 @@ $uwMain = $upgrade_directories_not_found; //Also add the three-way merge here. The idea is after the 451 html files have //been converted run the 3-way merge. If 500 then just run the 3-way merge - $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt'); + $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt' || $manifest['name'] == 'SugarCE to SugarCorp' || $manifest['name'] == 'SugarCE to SugarUlt'); if(file_exists('modules/UpgradeWizard/SugarMerge/SugarMerge.php')){ require_once('modules/UpgradeWizard/SugarMerge/SugarMerge.php'); diff --git a/modules/UpgradeWizard/end.php b/modules/UpgradeWizard/end.php index 3b6e5082..df458133 100644 --- a/modules/UpgradeWizard/end.php +++ b/modules/UpgradeWizard/end.php @@ -64,7 +64,11 @@ require_once("modules/Administration/QuickRepairAndRebuild.php"); $rac = new RepairAndClear(); $rac->clearVardefs(); $rac->rebuildExtensions(); -$rac->clearExternalAPICache(); +//bug: 44431 - defensive check to ensure the method exists since upgrades to 6.2.0 may not have this method define yet. +if(method_exists($rac, 'clearExternalAPICache')) +{ + $rac->clearExternalAPICache(); +} $repairedTables = array(); @@ -109,7 +113,7 @@ foreach ($dictionary as $meta) { logThis('database repaired', $path); -$ce_to_pro_ent = isset($_SESSION['upgrade_from_flavor']) && ($_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarPro' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarEnt'); +$ce_to_pro_ent = isset($_SESSION['upgrade_from_flavor']) && ($_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarPro' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarEnt' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarCorp' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarUlt'); logThis(" Start Rebuilding the config file again", $path); @@ -195,6 +199,11 @@ if($_SESSION['current_db_version'] < '610' && function_exists('upgrade_connector upgrade_connectors($path); } +// Enable the InsideView connector by default +if($_SESSION['current_db_version'] < '621' && function_exists('upgradeEnableInsideViewConnector')) { + upgradeEnableInsideViewConnector(); +} + if ($_SESSION['current_db_version'] < '620' && ($sugar_config['dbconfig']['db_type'] == 'mssql' || $sugar_config['dbconfig']['db_type'] == 'oci8')) { repair_long_relationship_names($path); diff --git a/modules/UpgradeWizard/preflight.php b/modules/UpgradeWizard/preflight.php index fe470b2c..2b2d08fc 100644 --- a/modules/UpgradeWizard/preflight.php +++ b/modules/UpgradeWizard/preflight.php @@ -300,6 +300,12 @@ $diffs =''; case 'SugarCE to SugarEnt': $sqlFile = $current_version.'_ce_to_ent_'.$db->dbType; break; + case 'SugarCE to SugarCorp': + $sqlFile = $current_version.'_ce_to_corp_'.$db->dbType; + break; + case 'SugarCE to SugarUlt': + $sqlFile = $current_version.'_ce_to_ult_'.$db->dbType; + break; case 'SugarPro to SugarEnt': $sqlFile = $current_version.'_pro_to_ent_'.$db->dbType; break; diff --git a/modules/UpgradeWizard/silentUpgrade.php b/modules/UpgradeWizard/silentUpgrade.php index 8dff387f..c81e26e5 100644 --- a/modules/UpgradeWizard/silentUpgrade.php +++ b/modules/UpgradeWizard/silentUpgrade.php @@ -42,7 +42,16 @@ function build_argument_string($arguments=array()) { $argument_string = ''; $count = 0; foreach($arguments as $arg) { - if($count != 0) { + if($count != 0) + { + //If current directory or parent directory is specified, substitute with full path + if($arg == '.') + { + $arg = getcwd(); + } else if ($arg == '..') { + $dir = getcwd(); + $arg = substr($dir, 0, strrpos($dir, DIRECTORY_SEPARATOR)); + } $argument_string .= ' ' . escapeshellarg($arg); } $count++; diff --git a/modules/UpgradeWizard/silentUpgrade_dce_step1.php b/modules/UpgradeWizard/silentUpgrade_dce_step1.php index 3524fe7c..085d9a02 100644 --- a/modules/UpgradeWizard/silentUpgrade_dce_step1.php +++ b/modules/UpgradeWizard/silentUpgrade_dce_step1.php @@ -560,7 +560,7 @@ if($upgradeType == constant('DCE_INSTANCE')){ exit(1); } - $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt'); + $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt' || $manifest['name'] == 'SugarCE to SugarCorp' || $manifest['name'] == 'SugarCE to SugarUlt'); $_SESSION['upgrade_from_flavor'] = $manifest['name']; //get the latest uw_utils.php diff --git a/modules/UpgradeWizard/silentUpgrade_dce_step2.php b/modules/UpgradeWizard/silentUpgrade_dce_step2.php index 2104f696..d075ca6d 100644 --- a/modules/UpgradeWizard/silentUpgrade_dce_step2.php +++ b/modules/UpgradeWizard/silentUpgrade_dce_step2.php @@ -538,7 +538,7 @@ if($upgradeType == constant('DCE_INSTANCE')){ require_once("{$newtemplate_path}/modules/UpgradeWizard/uw_utils.php"); } - $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt'); + $ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt' || $manifest['name'] == 'SugarCE to SugarCorp' || $manifest['name'] == 'SugarCE to SugarUlt'); $_SESSION['upgrade_from_flavor'] = $manifest['name']; //check for db upgrade diff --git a/modules/UpgradeWizard/silentUpgrade_step1.php b/modules/UpgradeWizard/silentUpgrade_step1.php index c1b1ef58..68061f38 100644 --- a/modules/UpgradeWizard/silentUpgrade_step1.php +++ b/modules/UpgradeWizard/silentUpgrade_step1.php @@ -690,7 +690,7 @@ if(is_file("{$cwd}/{$sugar_config['upload_dir']}upgrades/temp/manifest.php")) { exit(1); } -$ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt'); +$ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt' || $manifest['name'] == 'SugarCE to SugarCorp' || $manifest['name'] == 'SugarCE to SugarUlt'); $_SESSION['upgrade_from_flavor'] = $manifest['name']; global $sugar_config; @@ -723,8 +723,10 @@ foreach($parserFiles as $file) { else{ $targetFile = str_replace(clean_path($zipBasePath), $cwd, $srcFile); - if(!is_dir(dirname($targetFile))) { - mkdir_recursive(dirname($targetFile)); // make sure the directory exists + if(!file_exists(dirname($targetFile))) + { + logThis("Create directory " . dirname($targetFile), $path); + mkdir_recursive(str_replace($argv[3], '', dirname($targetFile))); // make sure the directory exists } if(!file_exists($targetFile)) diff --git a/modules/UpgradeWizard/silentUpgrade_step2.php b/modules/UpgradeWizard/silentUpgrade_step2.php index a6c10458..6d4a3f04 100644 --- a/modules/UpgradeWizard/silentUpgrade_step2.php +++ b/modules/UpgradeWizard/silentUpgrade_step2.php @@ -309,6 +309,12 @@ $errors = array(); $unzip_dir = clean_path("{$cwd}/{$sugar_config['upload_dir']}upgrades/temp"); $install_file = clean_path("{$cwd}/{$sugar_config['upload_dir']}upgrades/patch/".basename($argv[1])); +if(!file_exists("{$sugar_config['upload_dir']}upgrades/patch")) +{ + logThis("Create directory " . dirname($install_file), $path); + mkdir_recursive("{$sugar_config['upload_dir']}upgrades/patch"); +} + $_SESSION['unzip_dir'] = $unzip_dir; $_SESSION['install_file'] = $install_file; $_SESSION['zip_from_dir'] = $zip_from_dir; @@ -392,7 +398,11 @@ require_once("modules/Administration/QuickRepairAndRebuild.php"); $rac = new RepairAndClear(); $rac->clearVardefs(); $rac->rebuildExtensions(); -$rac->clearExternalAPICache(); +//bug: 44431 - defensive check to ensure the method exists since upgrades to 6.2.0 may not have this method define yet. +if(method_exists($rac, 'clearExternalAPICache')) +{ + $rac->clearExternalAPICache(); +} $repairedTables = array(); foreach ($beanFiles as $bean => $file) { @@ -447,7 +457,7 @@ logThis('Start rebuild relationships.', $path); logThis('End rebuild relationships.', $path); include("{$cwd}/{$sugar_config['upload_dir']}upgrades/temp/manifest.php"); -$ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt'); +$ce_to_pro_ent = isset($manifest['name']) && ($manifest['name'] == 'SugarCE to SugarPro' || $manifest['name'] == 'SugarCE to SugarEnt' || $manifest['name'] == 'SugarCE to SugarCorp' || $manifest['name'] == 'SugarCE to SugarUlt'); $origVersion = getSilentUpgradeVar('origVersion'); if(!$origVersion){ global $silent_upgrade_vars_loaded; @@ -507,6 +517,14 @@ if($origVersion < '610' && function_exists('upgrade_connectors')) upgrade_connectors($path); } +// Enable the InsideView connector by default +if($origVersion < '621' && function_exists('upgradeEnableInsideViewConnector')) { + logThis("Looks like we need to enable the InsideView connector\n",$path); + upgradeEnableInsideViewConnector($path); +} + + + //bug: 36845 - ability to provide global search support for custom modules if($origVersion < '620' && function_exists('add_unified_search_to_custom_modules_vardefs')){ logThis('Add global search for custom modules start .', $path); diff --git a/modules/UpgradeWizard/uw_utils.php b/modules/UpgradeWizard/uw_utils.php index e8816e48..14172d93 100644 --- a/modules/UpgradeWizard/uw_utils.php +++ b/modules/UpgradeWizard/uw_utils.php @@ -592,17 +592,12 @@ function deleteCache(){ //Clean modules from cache if(is_dir($GLOBALS['sugar_config']['cache_dir'].'modules')){ $allModFiles = array(); - $allModFiles = findAllFiles($GLOBALS['sugar_config']['cache_dir'].'modules',$allModFiles,true); + $allModFiles = findAllFiles($GLOBALS['sugar_config']['cache_dir'].'modules',$allModFiles); foreach($allModFiles as $file) { if(file_exists($file)) { - if(is_dir($file)) - { - rmdir_recursive($file); - } else { - unlink($file); - } + unlink($file); } } } @@ -4194,7 +4189,7 @@ function upgradeModulesForTeam() { } //while //Update the team_set_id and default_team columns - $ce_to_pro_or_ent = (isset($_SESSION['upgrade_from_flavor']) && ($_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarPro' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarEnt')); + $ce_to_pro_or_ent = (isset($_SESSION['upgrade_from_flavor']) && ($_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarPro' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarEnt' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarCorp' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarUlt')); //Update team_set_id if($ce_to_pro_or_ent) { @@ -4842,6 +4837,47 @@ function upgrade_connectors($path='') { logThis('End upgrade_connectors', $path); } +/** + * Enable the InsideView connector for the four default modules. + */ +function upgradeEnableInsideViewConnector($path='') +{ + logThis('Begin upgradeEnableInsideViewConnector', $path); + + // Load up the existing mapping and hand it to the InsideView connector to have it setup the correct logic hooks + $mapFile = 'modules/Connectors/connectors/sources/ext/rest/insideview/mapping.php'; + if ( file_exists('custom/'.$mapFile) ) { + logThis('Found CUSTOM mappings', $path); + require('custom/'.$mapFile); + } else { + logThis('Used default mapping', $path); + require($mapFile); + } + + require_once('include/connectors/sources/SourceFactory.php'); + $source = SourceFactory::getSource('ext_rest_insideview'); + + // $mapping is brought in from the mapping.php file above + $source->saveMappingHook($mapping); + + require_once('include/connectors/utils/ConnectorUtils.php'); + ConnectorUtils::installSource('ext_rest_insideview'); + + // Now time to set the various modules to active, because this part ignores the default config + require(CONNECTOR_DISPLAY_CONFIG_FILE); + // $modules_sources come from that config file + foreach ( $source->allowedModuleList as $module ) { + $modules_sources[$module]['ext_rest_insideview'] = 'ext_rest_insideview'; + } + if(!write_array_to_file('modules_sources', $modules_sources, CONNECTOR_DISPLAY_CONFIG_FILE)) { + //Log error and return empty array + logThis("Cannot write \$modules_sources to " . CONNECTOR_DISPLAY_CONFIG_FILE,$path); + } + + logThis('End upgradeEnableInsideViewConnector', $path); + +} + function repair_long_relationship_names($path='') { logThis("Begin repair_long_relationship_names", $path); @@ -5087,7 +5123,7 @@ function unlinkUpgradeFiles($version) if($version < '620') { - logThis('start upgrade for DocumentRevisions classic files (EditView.html, EditView.php, DetailView.html, DetailView.php)'); + logThis('start upgrade for DocumentRevisions classic files (EditView.html, EditView.php, DetailView.html, DetailView.php, Save.php)'); //Use a md5 comparison check to see if we can just remove the file where an exact match is found if($version < '610') @@ -5097,6 +5133,7 @@ function unlinkUpgradeFiles($version) 'modules/DocumentRevisions/DetailView.php' => 'd8606cdcd0281ae9443b2580a43eb5b3', 'modules/DocumentRevisions/EditView.php' => 'c7a1c3ef2bb30e3f5a11d122b3c55ff1', 'modules/DocumentRevisions/EditView.html' => '7d360ca703863c957f40b3719babe8c8', + 'modules/DocumentRevisions/Save.php' => 'd7e39293a5fb4d605ca2046e7d1fcf28', ); } else { $dr_files = array( @@ -5104,6 +5141,7 @@ function unlinkUpgradeFiles($version) 'modules/DocumentRevisions/DetailView.php' => '20edf45dd785469c484fbddff1a3f8f2', 'modules/DocumentRevisions/EditView.php' => 'fb31958496f04031b2851dcb4ce87d50', 'modules/DocumentRevisions/EditView.html' => 'b8cada4fa6fada2b4e4928226d8b81ee', + 'modules/DocumentRevisions/Save.php' => '7fb62e4ebff879bafc07a08da62902aa', ); } @@ -5159,4 +5197,4 @@ if (!function_exists("getValidDBName")) } return strtolower ( $result ) ; } -} \ No newline at end of file +} diff --git a/modules/Users/DetailView.php b/modules/Users/DetailView.php index 6a81e4f7..21badf34 100644 --- a/modules/Users/DetailView.php +++ b/modules/Users/DetailView.php @@ -50,11 +50,11 @@ global $current_user; global $theme; global $app_strings; global $mod_strings; -if (!is_admin($current_user) && !is_admin_for_module($GLOBALS['current_user'],'Users') +if (!is_admin($current_user) && !$GLOBALS['current_user']->isAdminForModule('Users') && ($_REQUEST['record'] != $current_user->id)) sugar_die("Unauthorized access to administration."); $is_current_admin=is_admin($current_user) - ||is_admin_for_module($GLOBALS['current_user'],'Users'); + ||$GLOBALS['current_user']->isAdminForModule('Users'); $focus = new User(); @@ -167,7 +167,7 @@ if($reminder_time != -1){ $user_type_label=$mod_strings['LBL_REGULAR_USER']; $usertype='RegularUser'; -if((is_admin($current_user) || $_REQUEST['record'] == $current_user->id || is_admin_for_module($current_user,'Users')) && $focus->is_admin == '1'){ +if((is_admin($current_user) || $_REQUEST['record'] == $current_user->id || $current_user->isAdminForModule('Users')) && $focus->is_admin == '1'){ $user_type_label=$mod_strings['LBL_ADMIN_USER']; $usertype='Administrator'; } @@ -217,10 +217,10 @@ if ((is_admin($current_user) || $_REQUEST['record'] == $current_user->id && $sugar_config['lock_default_user_name']) { $buttons .= " "; } -elseif (is_admin($current_user)|| (is_admin_for_module($GLOBALS['current_user'],'Users')&& !$focus->is_admin) +elseif (is_admin($current_user)|| ($GLOBALS['current_user']->isAdminForModule('Users')&& !$focus->is_admin) || $_REQUEST['record'] == $current_user->id) { $buttons .= " "; - if ((is_admin($current_user)|| is_admin_for_module($GLOBALS['current_user'],'Users') + if ((is_admin($current_user)|| $GLOBALS['current_user']->isAdminForModule('Users') ) ){ if (!$current_user->is_group){ @@ -262,7 +262,7 @@ $chooser = new TemplateGroupChooser(); $controller = new TabController(); //if(is_admin($current_user) || $controller->get_users_can_edit()) -if(is_admin($current_user)||is_admin_for_module($GLOBALS['current_user'],'Users')) +if(is_admin($current_user)||$GLOBALS['current_user']->isAdminForModule('Users')) { $chooser->display_third_tabs = true; $chooser->args['third_name'] = 'remove_tabs'; diff --git a/modules/Users/EditView.php b/modules/Users/EditView.php index 26035c52..4a984b77 100644 --- a/modules/Users/EditView.php +++ b/modules/Users/EditView.php @@ -60,7 +60,7 @@ $admin->retrieveSettings(); $focus = new User(); $is_current_admin=is_admin($current_user) - ||is_admin_for_module($GLOBALS['current_user'],'Users'); + ||$GLOBALS['current_user']->isAdminForModule('Users'); $is_super_admin = is_admin($current_user); if(isset($_REQUEST['record'])) { @@ -68,7 +68,7 @@ if(isset($_REQUEST['record'])) { $focus->retrieve($_REQUEST['record']); } -if(!$is_super_admin && is_admin_for_module($GLOBALS['current_user'],'Users') && $focus->is_admin == 1) sugar_die("Unauthorized access to administrator."); +if(!$is_super_admin && $GLOBALS['current_user']->isAdminForModule('Users') && $focus->is_admin == 1) sugar_die("Unauthorized access to administrator."); if(isset($_REQUEST['isDuplicate']) && $_REQUEST['isDuplicate'] == 'true') { $focus->id = ""; @@ -208,7 +208,7 @@ if($focus->getPreference('no_opps') == 'on') { // check if the user has access to the User Management -$sugar_smarty->assign('USER_ADMIN',is_admin_for_module($current_user,'Users')&& !is_admin($current_user)); +$sugar_smarty->assign('USER_ADMIN',$current_user->isAdminForModule('Users')&& !is_admin($current_user)); /////////////////////////////////////////////////////////////////////////////// diff --git a/modules/Users/Menu.php b/modules/Users/Menu.php index 96f876f2..cc578b48 100644 --- a/modules/Users/Menu.php +++ b/modules/Users/Menu.php @@ -47,7 +47,7 @@ global $mod_strings, $app_strings; global $current_user, $sugar_config; $module_menu=Array(); -if(is_admin($current_user)||is_admin_for_module($GLOBALS['current_user'],'Users') +if($GLOBALS['current_user']->isAdminForModule('Users') ) { diff --git a/modules/Users/Save.php b/modules/Users/Save.php index 044c4277..0c602963 100644 --- a/modules/Users/Save.php +++ b/modules/Users/Save.php @@ -61,11 +61,11 @@ parse_str($remove_tabs_def,$REMOVE_ARR); if (isset($_POST['id'])) sugar_die("Unauthorized access to administration."); if (isset($_POST['record']) && !is_admin($current_user) - && !is_admin_for_module($GLOBALS['current_user'],'Users') + && !$GLOBALS['current_user']->isAdminForModule('Users') && $_POST['record'] != $current_user->id) sugar_die("Unauthorized access to administration."); elseif (!isset($_POST['record']) && !is_admin($current_user) - && !is_admin_for_module($GLOBALS['current_user'],'Users')) + && !$GLOBALS['current_user']->isAdminForModule('Users')) sugar_die ("Unauthorized access to user administration."); $focus = new User(); $focus->retrieve($_POST['record']); @@ -76,13 +76,13 @@ if(empty($focus->user_name)) $newUser = true; else $newUser = false; -if(!$current_user->is_admin && !is_admin_for_module($GLOBALS['current_user'],'Users') +if(!$current_user->is_admin && !$GLOBALS['current_user']->isAdminForModule('Users') && $current_user->id != $focus->id) { $GLOBALS['log']->fatal("SECURITY:Non-Admin ". $current_user->id . " attempted to change settings for user:". $focus->id); header("Location: index.php?module=Users&action=Logout"); exit; } -if(!$current_user->is_admin && !is_admin_for_module($GLOBALS['current_user'],'Users') +if(!$current_user->is_admin && !$GLOBALS['current_user']->isAdminForModule('Users') && !empty($_POST['is_admin'])) { $GLOBALS['log']->fatal("SECURITY:Non-Admin ". $current_user->id . " attempted to change is_admin settings for user:". $focus->id); header("Location: index.php?module=Users&action=Logout"); diff --git a/modules/Users/User.php b/modules/Users/User.php index f9dafaf4..1c81719c 100644 --- a/modules/Users/User.php +++ b/modules/Users/User.php @@ -702,7 +702,7 @@ EOQ; $old_user_hash = strtolower(md5($user_password)); - if (!is_admin($current_user) && !is_admin_for_module($current_user,'Users')) { + if (!$current_user->isAdminForModule('Users')) { //check old password first $query = "SELECT user_name FROM $this->table_name WHERE user_hash='$old_user_hash' AND id='$this->id'"; $result = $this->db->query($query, true); @@ -1275,6 +1275,164 @@ EOQ; } + /* + * + * Here are the multi level admin access check functions. + * + */ + /** + * Helper function to remap some modules around ACL wise + * + * @return string + */ + protected function _fixupModuleForACL($module) { + if($module=='ContractTypes') { + $module = 'Contracts'; + } + if(preg_match('/Product[a-zA-Z]*/',$module)) { + $module = 'Products'; + } + + return $module; + } + /** + * Helper function that enumerates the list of modules and checks if they are an admin/dev. + * The code was just too similar to copy and paste. + * + * @return array + */ + protected function _getModulesForACL($type='dev'){ + $isDev = $type=='dev'; + $isAdmin = $type=='admin'; + + global $beanList; + $myModules = array(); + + if (!is_array($beanList) ) { + return $myModules; + } + + // These modules don't take kindly to the studio trying to play about with them. + static $ignoredModuleList = array('iFrames','Feeds','Home','Dashboard','Calendar','Activities','Reports'); + + + $actions = ACLAction::getUserActions($this->id); + + foreach ($beanList as $module=>$val) { + // Remap the module name + $module = $this->_fixupModuleForACL($module); + if (in_array($module,$myModules)) { + // Already have the module in the list + continue; + } + if (in_array($module,$ignoredModuleList)) { + // You can't develop on these modules. + continue; + } + + $focus = SugarModule::get($module)->loadBean(); + if ( $focus instanceOf SugarBean ) { + $key = $focus->acltype; + } else { + $key = 'module'; + } + + if (($this->isAdmin() && isset($actions[$module][$key])) + ) { + $myModules[] = $module; + } + } + + return $myModules; + } + /** + * Is this user a system wide admin + * + * @return bool + */ + public function isAdmin() { + if(isset($this->is_admin) + &&($this->is_admin == '1' || $this->is_admin === 'on')){ + return true; + } + return false; + } + /** + * Is this user a developer for any module + * + * @return bool + */ + public function isDeveloperForAnyModule() { + if ($this->isAdmin()) { + return true; + } + return false; + } + /** + * List the modules a user has developer access to + * + * @return array + */ + public function getDeveloperModules() { + static $developerModules; + if (!isset($_SESSION[$this->user_name.'_get_developer_modules_for_user']) ) { + $_SESSION[$this->user_name.'_get_developer_modules_for_user'] = $this->_getModulesForACL('dev'); + } + + return $_SESSION[$this->user_name.'_get_developer_modules_for_user']; + } + /** + * Is this user a developer for the specified module + * + * @return bool + */ + public function isDeveloperForModule($module) { + if ($this->isAdmin()) { + return true; + } + + $devModules = $this->getDeveloperModules(); + + $module = $this->_fixupModuleForACL($module); + + if (in_array($module,$devModules) ) { + return true; + } + + return false; + } + /** + * List the modules a user has admin access to + * + * @return array + */ + public function getAdminModules() { + if (!isset($_SESSION[$this->user_name.'_get_admin_modules_for_user']) ) { + $_SESSION[$this->user_name.'_get_admin_modules_for_user'] = $this->_getModulesForACL('admin'); + } + + return $_SESSION[$this->user_name.'_get_admin_modules_for_user']; + } + /** + * Is this user an admin for the specified module + * + * @return bool + */ + public function isAdminForModule($module) { + if ($this->isAdmin()) { + return true; + } + + $adminModules = $this->getAdminModules(); + + $module = $this->_fixupModuleForACL($module); + + if (in_array($module,$adminModules) ) { + return true; + } + + return false; + } /** * Whether or not based on the user's locale if we should show the last name first. * @@ -1294,18 +1452,41 @@ EOQ; function create_new_list_query($order_by, $where,$filter=array(),$params=array(), $show_deleted = 0,$join_type='', $return_array = false,$parentbean=null, $singleSelect = false) { //call parent method, specifying for array to be returned - $ret_array = parent::create_new_list_query($order_by, $where,$filter,$params, $show_deleted,$join_type, true,$parentbean, $singleSelect); + $ret_array = parent::create_new_list_query($order_by, $where,$filter,$params, $show_deleted,$join_type, true,$parentbean, $singleSelect); - //if this is being called from webservices, then run additional code - if(!empty($GLOBALS['soap_server_object'])){ + //if this is being called from webservices, then run additional code + if(!empty($GLOBALS['soap_server_object'])){ - //if this is a single select, then secondary queries are being run that may result in duplicate rows being returned through the - //left joins with meetings/tasks/call. Add a group by to return one user record (bug 40250) - if($singleSelect) + //if this is a single select, then secondary queries are being run that may result in duplicate rows being returned through the + //left joins with meetings/tasks/call. We need to change the left joins to include a null check (bug 40250) + if($singleSelect) { - $ret_array['order_by'] = ' Group By '.$this->table_name.'.id '.$ret_array['order_by']; + //retrieve the 'from' string and make lowercase for easier manipulation + $left_str = strtolower($ret_array['from']); + $lefts = explode('left join', $left_str); + $new_left_str = ''; + + //explode on the left joins and process each one + foreach($lefts as $ljVal){ + //grab the join alias + $onPos = strpos( $ljVal, ' on'); + if($onPos === false){ + $new_left_str .=' '.$ljVal.' '; + continue; + } + $spacePos = strrpos(substr($ljVal, 0, $onPos),' '); + $alias = substr($ljVal,$spacePos,$onPos-$spacePos); + + //add null check to end of the Join statement + $ljVal =' LEFT JOIN '.$ljVal.' and '.$alias.'.id is null '; + + //add statement into new string + $new_left_str .= $ljVal; + } + //replace the old string with the new one + $ret_array['from'] = $new_left_str; } - } + } //return array or query string if($return_array) diff --git a/modules/Users/authentication/SAMLAuthenticate/index.php b/modules/Users/authentication/SAMLAuthenticate/index.php index f66be426..58203725 100644 --- a/modules/Users/authentication/SAMLAuthenticate/index.php +++ b/modules/Users/authentication/SAMLAuthenticate/index.php @@ -28,8 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. require 'modules/Users/authentication/SAMLAuthenticate/settings.php'; require 'modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php'; - $authrequest = new AuthRequest(); - $authrequest->user_settings = get_user_settings(); - $url = $authrequest->create(); +$authrequest = new SamlAuthRequest(get_saml_settings()); +$url = $authrequest->create(); - header("Location: $url"); \ No newline at end of file +header("Location: $url"); \ No newline at end of file diff --git a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php index 59f778ea..293d9ca6 100644 --- a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php +++ b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml.php @@ -25,7 +25,7 @@ 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. ********************************************************************************/ - + require_once 'saml/authrequest.php'; require_once 'saml/response.php'; require_once 'saml/settings.php'; diff --git a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php index 6108e15d..8d407ba5 100644 --- a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php +++ b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/authrequest.php @@ -25,40 +25,62 @@ 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. ********************************************************************************/ + + /** + * Create a SAML authorization request. + */ + class SamlAuthRequest { + /** + * A SamlResponse class provided to the constructor. + */ + private $settings; - class authrequest { - public $user_settings; + /** + * Construct the response object. + * + * @param SamlResponse $settings + * A SamlResponse settings object containing the necessary + * x509 certicate to decode the XML. + */ + function __construct($settings) { + $this->settings = $settings; + } + /** + * Generate the request. + * + * @return + * A fully qualified URL that can be redirected to in order to process + * the authorization request. + */ public function create() { - $id = $this->generateUniqueID(42); + $id = $this->generateUniqueID(20); $issue_instant = $this->getTimestamp(); - $request = - "". - "".const_issuer."\n". - "\n". + $request = + "settings->assertion_consumer_service_url."\">". + "".$this->settings->issuer."\n". + "settings->name_identifier_format."\" AllowCreate=\"true\">\n". "". "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport\n". ""; - - $deflated_request = gzdeflate($request); $base64_request = base64_encode($deflated_request); $encoded_request = urlencode($base64_request); - return $this->user_settings->idp_sso_target_url."?SAMLRequest=".$encoded_request; + return $this->settings->idp_sso_target_url."?SAMLRequest=".$encoded_request; } - + private function generateUniqueID($length) { $chars = "abcdef0123456789"; $chars_len = strlen($chars); $uniqueID = ""; for ($i = 0; $i < $length; $i++) $uniqueID .= substr($chars,rand(0,15),1); - return $uniqueID; + return "_".$uniqueID; } - + private function getTimestamp() { date_default_timezone_set('UTC'); return strftime("%Y-%m-%dT%H:%M:%SZ"); diff --git a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php index 1614adac..2f839e59 100644 --- a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php +++ b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/response.php @@ -25,32 +25,69 @@ 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. ********************************************************************************/ + require 'xmlsec.php'; + /** + * Parse the SAML response and maintain the XML for it. + */ class SamlResponse { + /** + * A SamlResponse class provided to the constructor. + */ + private $settings; + + /** + * The decoded, unprocessed XML assertion provided to the constructor. + */ + public $assertion; + + /** + * A DOMDocument class loaded from the $assertion. + */ + public $xml; + + // At this time these private members are unused. private $nameid; - private $xml; private $xpath; - - public $user_settings; - - function __construct($val) { - // $this->xml = new SimpleXMLElement(base64_decode($val)); - $this->xml = new DOMDocument(); - $this->xml->loadXML(base64_decode($val)); + /** + * Construct the response object. + * + * @param SamlResponse $settings + * A SamlResponse settings object containing the necessary + * x509 certicate to decode the XML. + * @param string $assertion + * A UUEncoded SAML assertion from the IdP. + */ + function __construct($settings, $assertion) { + $this->settings = $settings; + $this->assertion = base64_decode($assertion); + $this->xml = new DOMDocument(); + $this->xml->loadXML($this->assertion); } - + + /** + * Determine if the SAML Response is valid using the certificate. + * + * @return + * TRUE if the document passes. This could throw a generic Exception + * if the document or key cannot be found. + */ function is_valid() { - $xmlsec = new XmlSec($this->xml); - $xmlsec->x509certificate = $this->user_settings->x509certificate; + $xmlsec = new SamlXmlSec($this->settings, $this->xml); return $xmlsec->is_valid(); } - + + /** + * Get the NameID provided by the SAML response from the IdP. + */ function get_nameid() { $xpath = new DOMXPath($this->xml); + $xpath->registerNamespace("samlp","urn:oasis:names:tc:SAML:2.0:protocol"); + $xpath->registerNamespace("saml","urn:oasis:names:tc:SAML:2.0:assertion"); $query = "/samlp:Response/saml:Assertion/saml:Subject/saml:NameID"; - + $entries = $xpath->query($query); return $entries->item(0)->nodeValue; } diff --git a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php index 69d35465..483e270c 100644 --- a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php +++ b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/settings.php @@ -25,7 +25,37 @@ 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. ********************************************************************************/ - class settings { + + /** + * Holds SAML settings for the SamlResponse and SamlAuthRequest classes. + * + * These settings need to be filled in by the user prior to being used. + */ + class SamlSettings { + /** + * The URL to submit SAML authentication requests to. + */ + var $idp_sso_target_url = ''; + + /** + * The x509 certificate used to authenticate the request. + */ + var $x509certificate = ''; + + /** + * The URL where to the SAML Response/SAML Assertion will be posted. + */ + var $assertion_consumer_service_url = ''; + + /** + * The name of the application. + */ + var $issuer = "php-saml"; + + /** + * Specifies what format to return the authentication token, i.e, the email address. + */ + var $name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"; } ?> \ No newline at end of file diff --git a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/xmlsec.php b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/xmlsec.php index 2e095206..99967879 100644 --- a/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/xmlsec.php +++ b/modules/Users/authentication/SAMLAuthenticate/lib/onelogin/saml/xmlsec.php @@ -25,20 +25,72 @@ 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. ********************************************************************************/ + require(dirname(__FILE__) . '/../../xmlseclibs/xmlseclibs.php'); - class XmlSec { - public $x509certificate; - private $doc; - - function __construct($val) { - $this->doc = $val; + /** + * Determine if the SAML response is valid using a provided x509 certificate. + */ + class SamlXmlSec { + /** + * A SamlResponse class provided to the constructor. + */ + private $settings; + + /** + * The documentument to be tested. + */ + private $document; + + /** + * Construct the SamlXmlSec object. + * + * @param SamlResponse $settings + * A SamlResponse settings object containing the necessary + * x509 certicate to test the document. + * @param string $document + * The document to test. + */ + function __construct($settings, $document) { + $this->settings = $settings; + $this->document = $document; } + + + /** + * Determine if the document passes the security test. + * + * @return + * TRUE if the document passes. This could throw a generic Exception + * if the document or key cannot be found. + */ + function validateNumAssertions(){ + $rootNode = $this->document; //->documentElement->ownerDocument; + $assertionNodes = $rootNode->getElementsByTagName('Assertion'); + return ($assertionNodes->length == 1); + } + + function validateTimestamps(){ + $rootNode = $this->document; + $timestampNodes = $rootNode->getElementsByTagName('Conditions'); + for($i=0;$i<$timestampNodes->length;$i++){ + $nbAttribute = $timestampNodes->item($i)->attributes->getNamedItem("NotBefore"); + $naAttribute = $timestampNodes->item($i)->attributes->getNamedItem("NotOnOrAfter"); + if($nbAttribute && strtotime($nbAttribute->textContent) > time()){ + return false; + } + if($naAttribute && strtotime($naAttribute->textContent) <= time()){ + return false; + } + } + return true; + } + function is_valid() { $objXMLSecDSig = new XMLSecurityDSig(); - $objDSig = $objXMLSecDSig->locateSignature($this->doc); + $objDSig = $objXMLSecDSig->locateSignature($this->document); if (! $objDSig) { throw new Exception("Cannot locate Signature Node"); } @@ -46,7 +98,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. $objXMLSecDSig->idKeys = array('ID'); $retVal = $objXMLSecDSig->validateReference(); - if (! $retVal) { throw new Exception("Reference Validation Failed"); } @@ -57,13 +108,24 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } $key = NULL; + $singleAssertion = $this->validateNumAssertions(); + if (!$singleAssertion){ + throw new Exception("Only one SAMLAssertion allowed"); + } + + $validTimestamps = $this->validateTimestamps(); + if (!$validTimestamps){ + throw new Exception("SAMLAssertion conditions not met"); + } + $objKeyInfo = XMLSecEnc::staticLocateKeyInfo($objKey, $objDSig); - $objKey->loadKey($this->x509certificate, FALSE, true); - + $objKey->loadKey($this->settings->x509certificate, FALSE, true); + $result = $objXMLSecDSig->verify($objKey); return $result; } - } -?> \ No newline at end of file + } + +?> diff --git a/modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php b/modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php index 8fae7a34..2d468a04 100644 --- a/modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php +++ b/modules/Users/authentication/SAMLAuthenticate/lib/xmlseclibs/xmlseclibs.php @@ -755,7 +755,7 @@ class XMLSecurityDSig { if ($node->localName == 'InclusiveNamespaces') { if ($pfx = $node->getAttribute('PrefixList')) { $arpfx = array(); - $pfxlist = split(" ", $pfx); + $pfxlist = preg_split("/\s/", $pfx); foreach ($pfxlist AS $pfx) { $val = trim($pfx); if (! empty($val)) { diff --git a/modules/Users/authentication/SAMLAuthenticate/settings.php b/modules/Users/authentication/SAMLAuthenticate/settings.php index d89edbf3..64afc64f 100644 --- a/modules/Users/authentication/SAMLAuthenticate/settings.php +++ b/modules/Users/authentication/SAMLAuthenticate/settings.php @@ -25,26 +25,31 @@ 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. ********************************************************************************/ - // these are account wide configuration settings - - // the URL where to the SAML Response/SAML Assertion will be posted - define('const_assertion_consumer_service_url', $GLOBALS['sugar_config']['site_url']. "/index.php?module=Users&action=Authenticate"); - // name of this application - define('const_issuer', "php-saml"); - // tells the IdP to return the email address of the current user - define('const_name_identifier_format', "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"); - - function get_user_settings() { + +/** + * Return a SamlSettings object with user settings. + * + * @return SamlSettings object + */ +function saml_get_settings() +{ // this function should be modified to return the SAML settings for the current user - $settings = new Settings(); + $settings = new SamlSettings(); // when using Service Provider Initiated SSO (starting at index.php), this URL asks the IdP to authenticate the user. $settings->idp_sso_target_url = $GLOBALS['sugar_config']['SAML_loginurl']; // the certificate for the users account in the IdP $settings->x509certificate = $GLOBALS['sugar_config']['SAML_X509Cert']; + + // The URL where to the SAML Response/SAML Assertion will be posted + $settings->assertion_consumer_service_url = $GLOBALS['sugar_config']['site_url']. "/index.php?module=Users&action=Authenticate"; + + // Name of this application + $settings->issuer = "php-saml"; + + // Tells the IdP to return the email address of the current user + $settings->name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"; return $settings; - } - -?> +} diff --git a/modules/Users/controller.php b/modules/Users/controller.php index e9b1d0ca..77359dcd 100644 --- a/modules/Users/controller.php +++ b/modules/Users/controller.php @@ -47,8 +47,8 @@ class UsersController extends SugarController { protected function action_delete() { - if($_REQUEST['record'] != $GLOBALS['current_user']->id && (is_admin($GLOBALS['current_user'])||is_admin_for_module($GLOBALS['current_user'],'Users') - )) + if($_REQUEST['record'] != $GLOBALS['current_user']->id && ($GLOBALS['current_user']->isAdminForModule('Users') + )) { $u = new User(); $u->retrieve($_REQUEST['record']); diff --git a/modules/Users/metadata/subpaneldefs.php b/modules/Users/metadata/subpaneldefs.php index 76663397..6129ffa3 100644 --- a/modules/Users/metadata/subpaneldefs.php +++ b/modules/Users/metadata/subpaneldefs.php @@ -113,7 +113,7 @@ $layout_defs['UserRoles'] = array( ), ); global $current_user; -if(is_admin($current_user)|| is_admin_for_module($current_user, 'Users')){ +if($current_user->isAdminForModule('Users')){ $layout_defs['UserRoles']['subpanel_setup']['aclroles']['subpanel_name'] = 'admin'; }else{ $layout_defs['UserRoles']['subpanel_setup']['aclroles']['top_buttons'] = array(); diff --git a/modules/Users/reassignUserRecords.php b/modules/Users/reassignUserRecords.php index c5a55bba..0d77970c 100644 --- a/modules/Users/reassignUserRecords.php +++ b/modules/Users/reassignUserRecords.php @@ -40,8 +40,7 @@ global $mod_strings; $mod_strings_users = $mod_strings; global $current_user; -if(!is_admin($current_user) - && !is_admin_for_module($GLOBALS['current_user'],'Users') +if(!$GLOBALS['current_user']->isAdminForModule('Users') ){ sugar_die("You cannot access this page."); } diff --git a/modules/Users/views/view.list.php b/modules/Users/views/view.list.php index 526a621d..ab1c166d 100644 --- a/modules/Users/views/view.list.php +++ b/modules/Users/views/view.list.php @@ -41,8 +41,8 @@ class UsersViewList extends ViewList { public function preDisplay() { - if ( !is_admin($GLOBALS['current_user']) - && !is_admin_for_module($GLOBALS['current_user'],'Users') ) { + if ( !$GLOBALS['current_user']->isAdminForModule('Users') + ) { //instead of just dying here with unauthorized access will send the user back to his/her settings SugarApplication::redirect('index.php?module=Users&action=DetailView&record='.$GLOBALS['current_user']->id); } diff --git a/soap/SoapHelperFunctions.php b/soap/SoapHelperFunctions.php index 1fbc930c..5047de3f 100644 --- a/soap/SoapHelperFunctions.php +++ b/soap/SoapHelperFunctions.php @@ -111,6 +111,29 @@ function get_field_list($value, $translate=true){ $list['release_name']['options'] = $options_ret; } } + if($value->module_dir == 'Emails'){ + $fields = array('from_addr_name', 'reply_to_addr', 'to_addrs_names', 'cc_addrs_names', 'bcc_addrs_names'); + foreach($fields as $field){ + $var = $value->field_defs[$field]; + + $required = 0; + $entry = array(); + $entry['name'] = $var['name']; + $entry['type'] = $var['type']; + if($translate) { + $entry['label'] = isset($var['vname']) ? translate($var['vname'], $value->module_dir) : $var['name']; + } else { + $entry['label'] = isset($var['vname']) ? $var['vname'] : $var['name']; + } + $entry['required'] = $required; + $entry['options'] = array(); + if(isset($var['default'])) { + $entry['default_value'] = $var['default']; + } + + $list[$var['name']] = $entry; + } + } if(isset($value->assigned_user_name) && isset($list['assigned_user_id'])) { $list['assigned_user_name'] = $list['assigned_user_id']; diff --git a/soap/SoapSugarUsers.php b/soap/SoapSugarUsers.php index d253ad9b..9f771b8b 100644 --- a/soap/SoapSugarUsers.php +++ b/soap/SoapSugarUsers.php @@ -350,6 +350,10 @@ function get_entry_list($session, $module_name, $query, $order_by,$offset, $sele $output_list = array(); + $isEmailModule = false; + if($module_name == 'Emails'){ + $isEmailModule = true; + } // retrieve the vardef information on the bean's fields. $field_list = array(); foreach($list as $value) @@ -357,6 +361,9 @@ function get_entry_list($session, $module_name, $query, $order_by,$offset, $sele if(isset($value->emailAddress)){ $value->emailAddress->handleLegacyRetrieve($value); } + if($isEmailModule){ + $value->retrieveEmailText(); + } $value->fill_in_additional_detail_fields(); $output_list[] = get_return_value($value, $module_name); if(empty($field_list)){ @@ -519,9 +526,19 @@ function set_entry($session,$module_name, $name_value_list){ $seed = new $class_name(); foreach($name_value_list as $value){ - if($value['name'] == 'id'){ - $seed->retrieve($value['value']); - break; + if($value['name'] == 'id' && isset($value['value']) && strlen($value['value']) > 0){ + $result = $seed->retrieve($value['value']); + //bug: 44680 - check to ensure the user has access before proceeding. + if(is_null($result)) + { + $error->set_error('no_access'); + return array('id'=>-1, 'error'=>$error->get_soap_array()); + } + else + { + break; + } + } } foreach($name_value_list as $value){ diff --git a/sugar_version.php b/sugar_version.php index 7b5b996a..bc43eb5e 100644 --- a/sugar_version.php +++ b/sugar_version.php @@ -38,10 +38,10 @@ -$sugar_version = '6.2.0'; -$sugar_db_version = '6.2.0'; +$sugar_version = '6.2.1'; +$sugar_db_version = '6.2.1'; $sugar_flavor = 'CE'; -$sugar_build = '6354'; -$sugar_timestamp = '2011-05-31 03:07pm'; +$sugar_build = '6405'; +$sugar_timestamp = '2011-07-13 08:13pm'; ?> diff --git a/tests/PHPUnit/ChangeLog.markdown b/tests/PHPUnit/ChangeLog.markdown index f97eb7a0..85298d71 100755 --- a/tests/PHPUnit/ChangeLog.markdown +++ b/tests/PHPUnit/ChangeLog.markdown @@ -3,6 +3,13 @@ PHPUnit 3.5 This is the list of changes for the PHPUnit 3.5 release series. +PHPUnit 3.5.14 +-------------- + +* Fixed GH-222: `assertAttribute*()` is too strict. +* Fixed grouping of TestDox messages. Test method names should only be grouped if they are part of a sequence, starting with the initial test method not ending in a number. +* `stream_resolve_include_path()` is now used when available. + PHPUnit 3.5.13 -------------- diff --git a/tests/PHPUnit/File/Iterator.php b/tests/PHPUnit/File/Iterator.php index e4db9f62..aa0022b4 100755 --- a/tests/PHPUnit/File/Iterator.php +++ b/tests/PHPUnit/File/Iterator.php @@ -2,7 +2,7 @@ /** * php-file-iterator * - * Copyright (c) 2009-2010, Sebastian Bergmann . + * Copyright (c) 2009-2011, Sebastian Bergmann . * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -36,7 +36,7 @@ * * @package File * @author Sebastian Bergmann - * @copyright 2009-2010 Sebastian Bergmann + * @copyright 2009-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @since File available since Release 1.0.0 */ @@ -46,9 +46,9 @@ * suffix(es). Hidden files and files from hidden directories are also filtered. * * @author Sebastian Bergmann - * @copyright 2009-2010 Sebastian Bergmann + * @copyright 2009-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.2.3 + * @version Release: 1.2.6 * @link http://github.com/sebastianbergmann/php-file-iterator/tree * @since Class available since Release 1.0.0 */ @@ -86,7 +86,7 @@ class File_Iterator extends FilterIterator */ public function __construct(Iterator $iterator, array $suffixes = array(), array $prefixes = array(), array $exclude = array(), $basepath = NULL) { - $exclude = array_map('realpath', $exclude); + $exclude = array_filter(array_map('realpath', $exclude)); if ($basepath !== NULL) { $basepath = realpath($basepath); diff --git a/tests/PHPUnit/File/Iterator/Factory.php b/tests/PHPUnit/File/Iterator/Factory.php index 34f7bf5a..b10729b3 100755 --- a/tests/PHPUnit/File/Iterator/Factory.php +++ b/tests/PHPUnit/File/Iterator/Factory.php @@ -2,7 +2,7 @@ /** * php-file-iterator * - * Copyright (c) 2009-2010, Sebastian Bergmann . + * Copyright (c) 2009-2011, Sebastian Bergmann . * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -36,7 +36,7 @@ * * @package File * @author Sebastian Bergmann - * @copyright 2009-2010 Sebastian Bergmann + * @copyright 2009-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @since File available since Release 1.1.0 */ @@ -49,9 +49,9 @@ require_once 'File/Iterator.php'; * path. * * @author Sebastian Bergmann - * @copyright 2009-2010 Sebastian Bergmann + * @copyright 2009-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.2.3 + * @version Release: 1.2.6 * @link http://github.com/sebastianbergmann/php-file-iterator/tree * @since Class available since Release 1.1.0 */ @@ -140,7 +140,11 @@ class File_Iterator_Factory ); foreach ($iterator as $file) { - $result[] = $file->getRealPath(); + $file = $file->getRealPath(); + + if ($file) { + $result[] = $file; + } } foreach ($paths as $path) { @@ -149,7 +153,7 @@ class File_Iterator_Factory } } - return $result; + return array_unique($result); } } ?> diff --git a/tests/PHPUnit/PHPUnit/Extensions/GroupTestSuite.php b/tests/PHPUnit/PHPUnit/Extensions/GroupTestSuite.php index 4c7900a2..bb84df0c 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/GroupTestSuite.php +++ b/tests/PHPUnit/PHPUnit/Extensions/GroupTestSuite.php @@ -60,7 +60,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/OutputTestCase.php b/tests/PHPUnit/PHPUnit/Extensions/OutputTestCase.php index 853c2d4c..8da2346a 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/OutputTestCase.php +++ b/tests/PHPUnit/PHPUnit/Extensions/OutputTestCase.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase.php b/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase.php index 43ca2747..71b381d7 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase.php +++ b/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase.php @@ -63,7 +63,7 @@ require_once 'PHP/Timer.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.4 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase/Logger.php b/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase/Logger.php index bbb6e60e..0d27a5eb 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase/Logger.php +++ b/tests/PHPUnit/PHPUnit/Extensions/PhptTestCase/Logger.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.4 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/PhptTestSuite.php b/tests/PHPUnit/PHPUnit/Extensions/PhptTestSuite.php index 3612866b..c5f7d448 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/PhptTestSuite.php +++ b/tests/PHPUnit/PHPUnit/Extensions/PhptTestSuite.php @@ -53,7 +53,7 @@ require_once 'File/Iterator/Factory.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.4 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/RepeatedTest.php b/tests/PHPUnit/PHPUnit/Extensions/RepeatedTest.php index e6e48ac0..34d48823 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/RepeatedTest.php +++ b/tests/PHPUnit/PHPUnit/Extensions/RepeatedTest.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/Given.php b/tests/PHPUnit/PHPUnit/Extensions/Story/Given.php index f5753e61..b9c2623b 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/Given.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/Given.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter.php b/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter.php index 674fc1f1..ecb3aedb 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/HTML.php b/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/HTML.php index 0b10feb1..805092da 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/HTML.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/HTML.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/Text.php b/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/Text.php index 03eb450e..1a3cc914 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/Text.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/ResultPrinter/Text.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/Scenario.php b/tests/PHPUnit/PHPUnit/Extensions/Story/Scenario.php index 9258d7c6..3ac94cf4 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/Scenario.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/Scenario.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/Step.php b/tests/PHPUnit/PHPUnit/Extensions/Story/Step.php index 2093cf36..2f42ce4e 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/Step.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/Step.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/TestCase.php b/tests/PHPUnit/PHPUnit/Extensions/Story/TestCase.php index 707d6e01..6be29c6b 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/TestCase.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/TestCase.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/Then.php b/tests/PHPUnit/PHPUnit/Extensions/Story/Then.php index ca0a2608..dd746ad2 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/Then.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/Then.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/Story/When.php b/tests/PHPUnit/PHPUnit/Extensions/Story/When.php index e2f7df36..66d13ac3 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/Story/When.php +++ b/tests/PHPUnit/PHPUnit/Extensions/Story/When.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/TestDecorator.php b/tests/PHPUnit/PHPUnit/Extensions/TestDecorator.php index 7ca26997..50a4e252 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/TestDecorator.php +++ b/tests/PHPUnit/PHPUnit/Extensions/TestDecorator.php @@ -55,7 +55,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/TicketListener.php b/tests/PHPUnit/PHPUnit/Extensions/TicketListener.php index fe479846..c9e2d70a 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/TicketListener.php +++ b/tests/PHPUnit/PHPUnit/Extensions/TicketListener.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GitHub.php b/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GitHub.php index 6ffdb405..11c277a3 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GitHub.php +++ b/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GitHub.php @@ -51,7 +51,7 @@ * @author Raphael Stolt * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GoogleCode.php b/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GoogleCode.php index 26718d5b..96e7e1d7 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GoogleCode.php +++ b/tests/PHPUnit/PHPUnit/Extensions/TicketListener/GoogleCode.php @@ -51,7 +51,7 @@ * @author Jan Sorgalla * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Extensions/TicketListener/Trac.php b/tests/PHPUnit/PHPUnit/Extensions/TicketListener/Trac.php index ed47aefc..1e323cc9 100755 --- a/tests/PHPUnit/PHPUnit/Extensions/TicketListener/Trac.php +++ b/tests/PHPUnit/PHPUnit/Extensions/TicketListener/Trac.php @@ -74,7 +74,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.4 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Assert.php b/tests/PHPUnit/PHPUnit/Framework/Assert.php index f83cd8f6..02ce907f 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Assert.php +++ b/tests/PHPUnit/PHPUnit/Framework/Assert.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php b/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php index 168c4129..b8de30e5 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php +++ b/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php @@ -365,6 +365,7 @@ function assertAttributeNotSame($expected, $actualAttributeName, $actualClassOrO * @param mixed $classOrObject * @param string $message * @since Method available since Release 3.4.0 + * @deprecated */ function assertAttributeNotType($expected, $attributeName, $classOrObject, $message = '') { @@ -393,6 +394,7 @@ function assertAttributeSame($expected, $actualAttributeName, $actualClassOrObje * @param mixed $classOrObject * @param string $message * @since Method available since Release 3.4.0 + * @deprecated */ function assertAttributeType($expected, $attributeName, $classOrObject, $message = '') { @@ -815,6 +817,7 @@ function assertNotTag($matcher, $actual, $message = '', $isHtml = TRUE) * @param mixed $actual * @param string $message * @since Method available since Release 2.2.0 + * @deprecated */ function assertNotType($expected, $actual, $message = '') { @@ -1260,6 +1263,7 @@ function assertTrue($condition, $message = '') * @param string $expected * @param mixed $actual * @param string $message + * @deprecated */ function assertType($expected, $actual, $message = '') { diff --git a/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php.in b/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php.in new file mode 100755 index 00000000..1c5089d5 --- /dev/null +++ b/tests/PHPUnit/PHPUnit/Framework/Assert/Functions.php.in @@ -0,0 +1,44 @@ +. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Sebastian Bergmann nor the names of his + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS 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 + * COPYRIGHT OWNER OR 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. + * + * @package PHPUnit + * @subpackage Framework + * @author Sebastian Bergmann + * @copyright 2002-2011 Sebastian Bergmann + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + * @link http://www.phpunit.de/ + * @since File available since Release 3.5.0 + */{functions} diff --git a/tests/PHPUnit/PHPUnit/Framework/AssertionFailedError.php b/tests/PHPUnit/PHPUnit/Framework/AssertionFailedError.php index 91385b1e..c8d3f156 100755 --- a/tests/PHPUnit/PHPUnit/Framework/AssertionFailedError.php +++ b/tests/PHPUnit/PHPUnit/Framework/AssertionFailedError.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure.php b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure.php index 2529ebfa..31dac8ed 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure.php +++ b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Array.php b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Array.php index d37b6426..f77b409d 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Array.php +++ b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Array.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Object.php b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Object.php index 1627ade4..04f62157 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Object.php +++ b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Object.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Scalar.php b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Scalar.php index a222b214..7e981aca 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Scalar.php +++ b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Scalar.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/String.php b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/String.php index b5e828d0..67361ae2 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/String.php +++ b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/String.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Type.php b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Type.php index c94241cd..12b000f7 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Type.php +++ b/tests/PHPUnit/PHPUnit/Framework/ComparisonFailure/Type.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint.php b/tests/PHPUnit/PHPUnit/Framework/Constraint.php index 368d87e6..5ba4edb5 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/And.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/And.php index fa6a7f05..fa372a16 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/And.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/And.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/ArrayHasKey.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/ArrayHasKey.php index c4d20cc5..9903fac1 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/ArrayHasKey.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/ArrayHasKey.php @@ -56,7 +56,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/Attribute.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/Attribute.php index 778bff5b..e17cd5bf 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/Attribute.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/Attribute.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasAttribute.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasAttribute.php index 64416f48..fd87b4ab 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasAttribute.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasAttribute.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php index d8623d42..10bc8c0f 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/FileExists.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/FileExists.php index 3cbb4b0e..51733e45 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/FileExists.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/FileExists.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/GreaterThan.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/GreaterThan.php index 55a585ac..8ad85c3c 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/GreaterThan.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/GreaterThan.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsAnything.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsAnything.php index 60987864..fb8574e9 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsAnything.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsAnything.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEmpty.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEmpty.php index 2266fdfc..733a2ce4 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEmpty.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEmpty.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEqual.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEqual.php index e58976af..579ddc9a 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEqual.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsEqual.php @@ -59,7 +59,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsFalse.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsFalse.php index 9ffc1c01..156acd84 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsFalse.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsFalse.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsIdentical.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsIdentical.php index 826893d6..6c7beec3 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsIdentical.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsIdentical.php @@ -59,7 +59,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsInstanceOf.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsInstanceOf.php index 6140ed2d..95cfb1c0 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsInstanceOf.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsInstanceOf.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsNull.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsNull.php index f6e72b2e..c1795259 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsNull.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsNull.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsTrue.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsTrue.php index 23f0f66e..fede1262 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsTrue.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsTrue.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsType.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsType.php index 3da4a534..38d8af75 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/IsType.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/IsType.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/LessThan.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/LessThan.php index 80c816a6..c5602854 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/LessThan.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/LessThan.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/Not.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/Not.php index 4d60fb21..59bab419 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/Not.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/Not.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php index f3f0f5e4..e63fe5d1 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/Or.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/Or.php index 7c6f9d01..356571b1 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/Or.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/Or.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/PCREMatch.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/PCREMatch.php index 223e5494..c0e0c79e 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/PCREMatch.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/PCREMatch.php @@ -57,7 +57,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringContains.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringContains.php index d367c5da..af19a551 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringContains.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringContains.php @@ -57,7 +57,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringEndsWith.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringEndsWith.php index 11e635f9..0e873630 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringEndsWith.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringEndsWith.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringMatches.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringMatches.php index b37a8f6d..48a6b58f 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringMatches.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringMatches.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringStartsWith.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringStartsWith.php index ae0ddcf3..02339ce1 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/StringStartsWith.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/StringStartsWith.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContains.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContains.php index 5c91c969..6dbf7da6 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContains.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContains.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php index 9e51ea0f..6cb299a5 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.4 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Constraint/Xor.php b/tests/PHPUnit/PHPUnit/Framework/Constraint/Xor.php index a90c4583..63e6d021 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Constraint/Xor.php +++ b/tests/PHPUnit/PHPUnit/Framework/Constraint/Xor.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Error.php b/tests/PHPUnit/PHPUnit/Framework/Error.php index fdc9a772..3beeee68 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Error.php +++ b/tests/PHPUnit/PHPUnit/Framework/Error.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.2.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Error/Notice.php b/tests/PHPUnit/PHPUnit/Framework/Error/Notice.php index b25808fc..25f5b653 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Error/Notice.php +++ b/tests/PHPUnit/PHPUnit/Framework/Error/Notice.php @@ -56,7 +56,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Error/Warning.php b/tests/PHPUnit/PHPUnit/Framework/Error/Warning.php index c775cde6..44825658 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Error/Warning.php +++ b/tests/PHPUnit/PHPUnit/Framework/Error/Warning.php @@ -56,7 +56,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Exception.php b/tests/PHPUnit/PHPUnit/Framework/Exception.php index 0c88607c..181ecc73 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Exception.php +++ b/tests/PHPUnit/PHPUnit/Framework/Exception.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/ExpectationFailedException.php b/tests/PHPUnit/PHPUnit/Framework/ExpectationFailedException.php index a454bc05..4b250b0a 100755 --- a/tests/PHPUnit/PHPUnit/Framework/ExpectationFailedException.php +++ b/tests/PHPUnit/PHPUnit/Framework/ExpectationFailedException.php @@ -55,7 +55,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/IncompleteTest.php b/tests/PHPUnit/PHPUnit/Framework/IncompleteTest.php index ab6191fb..4d375930 100755 --- a/tests/PHPUnit/PHPUnit/Framework/IncompleteTest.php +++ b/tests/PHPUnit/PHPUnit/Framework/IncompleteTest.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/IncompleteTestError.php b/tests/PHPUnit/PHPUnit/Framework/IncompleteTestError.php index 7be7e070..084e89c6 100755 --- a/tests/PHPUnit/PHPUnit/Framework/IncompleteTestError.php +++ b/tests/PHPUnit/PHPUnit/Framework/IncompleteTestError.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Identity.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Identity.php index 3fe86125..b46901ed 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Identity.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Identity.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php index 366b85b9..09a1deb9 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Match.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Match.php index 48a44986..5454ac18 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Match.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Match.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php index 37e7f443..d76246b3 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Namespace.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Namespace.php index 6ce0128f..300d9cf9 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Namespace.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Namespace.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php index 707bd5ad..4fd7677f 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Stub.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Stub.php index 5081b00b..d50bb875 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Stub.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/Stub.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator.php index 4c082f1d..ecc5137a 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator.php @@ -51,7 +51,7 @@ require_once 'Text/Template.php'; * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ @@ -80,15 +80,20 @@ class PHPUnit_Framework_MockObject_Generator 'continue' => TRUE, 'declare' => TRUE, 'default' => TRUE, + 'die' => TRUE, 'do' => TRUE, + 'echo' => TRUE, 'else' => TRUE, 'elseif' => TRUE, + 'empty' => TRUE, 'enddeclare' => TRUE, 'endfor' => TRUE, 'endforeach' => TRUE, 'endif' => TRUE, 'endswitch' => TRUE, 'endwhile' => TRUE, + 'eval' => TRUE, + 'exit' => TRUE, 'extends' => TRUE, 'final' => TRUE, 'for' => TRUE, @@ -98,18 +103,27 @@ class PHPUnit_Framework_MockObject_Generator 'goto' => TRUE, 'if' => TRUE, 'implements' => TRUE, - 'interface' => TRUE, + 'include' => TRUE, + 'include_once' => TRUE, 'instanceof' => TRUE, + 'interface' => TRUE, + 'isset' => TRUE, + 'list' => TRUE, 'namespace' => TRUE, 'new' => TRUE, 'or' => TRUE, + 'print' => TRUE, 'private' => TRUE, 'protected' => TRUE, 'public' => TRUE, + 'require' => TRUE, + 'require_once' => TRUE, + 'return' => TRUE, 'static' => TRUE, 'switch' => TRUE, 'throw' => TRUE, 'try' => TRUE, + 'unset' => TRUE, 'use' => TRUE, 'var' => TRUE, 'while' => TRUE, @@ -399,7 +413,10 @@ class PHPUnit_Framework_MockObject_Generator if (!empty($mockClassName['namespaceName'])) { $prologue = 'namespace ' . $mockClassName['namespaceName'] . - ";\n\n" . $prologue; + " {\n\n" . $prologue . "}\n\n" . + "namespace {\n\n"; + + $epilogue = "\n\n}"; } $cloneTemplate = new Text_Template( @@ -491,6 +508,7 @@ class PHPUnit_Framework_MockObject_Generator $classTemplate->setVar( array( 'prologue' => isset($prologue) ? $prologue : '', + 'epilogue' => isset($epilogue) ? $epilogue : '', 'class_declaration' => self::generateMockClassDeclaration( $mockClassName, $isInterface ), @@ -513,6 +531,10 @@ class PHPUnit_Framework_MockObject_Generator */ protected static function generateMockClassName($originalClassName, $mockClassName) { + if ($originalClassName[0] == '\\') { + $originalClassName = substr($originalClassName, 1); + } + $classNameParts = explode('\\', $originalClassName); if (count($classNameParts) > 1) { diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator/mocked_class.tpl.dist b/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator/mocked_class.tpl.dist index 03226f27..feabdc01 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator/mocked_class.tpl.dist +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Generator/mocked_class.tpl.dist @@ -43,4 +43,4 @@ self::$staticInvocationMocker = NULL; $this->invocationMocker = NULL; } -} +}{epilogue} diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation.php index c12e1c4b..5bb86ed2 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Object.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Object.php index 5b5371c4..e29b0db2 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Object.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Object.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Static.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Static.php index 6182ec46..41617442 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Static.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invocation/Static.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/InvocationMocker.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/InvocationMocker.php index 5c012fb4..f75da3a0 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/InvocationMocker.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/InvocationMocker.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invokable.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invokable.php index 2c00ab95..e73d63bf 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Invokable.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Invokable.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher.php index a541012a..1798093b 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher.php @@ -55,7 +55,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php index 2520c059..dc2a995c 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php @@ -50,7 +50,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php index 08766bac..7caeb442 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Invocation.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Invocation.php index 7d85e99c..402559a2 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Invocation.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Invocation.php @@ -50,7 +50,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php index 9ae93939..ab443501 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php @@ -56,7 +56,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php index 2f9755ca..5b8e1154 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php index 42222681..00d245b7 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php @@ -54,7 +54,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php index b41d2bbd..b23490a3 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 * @abstract diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/MethodName.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/MethodName.php index f294803f..e8a5d422 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/MethodName.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/MethodName.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Parameters.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Parameters.php index 0f1abfea..66641387 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Parameters.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/Parameters.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php index d2ecc5e9..ba3de090 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 * @abstract diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/MockObject.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/MockObject.php index bcc0b9a2..4817e862 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/MockObject.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/MockObject.php @@ -50,7 +50,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub.php index bc1bd3e3..638d22c7 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php index 814f3e35..ff8ab22c 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Exception.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Exception.php index f6604fba..9b451130 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Exception.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Exception.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php index fffebaa5..2ed18cee 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Return.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Return.php index a034c480..e8eb34a0 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Return.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/Return.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php index e49fa8b5..3e24981e 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php index 82ff93fc..23952dba 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Class available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/MockObject/Verifiable.php b/tests/PHPUnit/PHPUnit/Framework/MockObject/Verifiable.php index 427cabaa..b48728d1 100755 --- a/tests/PHPUnit/PHPUnit/Framework/MockObject/Verifiable.php +++ b/tests/PHPUnit/PHPUnit/Framework/MockObject/Verifiable.php @@ -49,7 +49,7 @@ * @author Sebastian Bergmann * @copyright 2010-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.0.8 + * @version Release: 1.0.9 * @link http://github.com/sebastianbergmann/phpunit-mock-objects * @since Interface available since Release 1.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/SelfDescribing.php b/tests/PHPUnit/PHPUnit/Framework/SelfDescribing.php index c9566172..4a21f230 100755 --- a/tests/PHPUnit/PHPUnit/Framework/SelfDescribing.php +++ b/tests/PHPUnit/PHPUnit/Framework/SelfDescribing.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/SkippedTest.php b/tests/PHPUnit/PHPUnit/Framework/SkippedTest.php index 6e2d6d08..503a0a48 100755 --- a/tests/PHPUnit/PHPUnit/Framework/SkippedTest.php +++ b/tests/PHPUnit/PHPUnit/Framework/SkippedTest.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/SkippedTestError.php b/tests/PHPUnit/PHPUnit/Framework/SkippedTestError.php index bc105faf..5d22e508 100755 --- a/tests/PHPUnit/PHPUnit/Framework/SkippedTestError.php +++ b/tests/PHPUnit/PHPUnit/Framework/SkippedTestError.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/SkippedTestSuiteError.php b/tests/PHPUnit/PHPUnit/Framework/SkippedTestSuiteError.php index c0439233..9f6b5c74 100755 --- a/tests/PHPUnit/PHPUnit/Framework/SkippedTestSuiteError.php +++ b/tests/PHPUnit/PHPUnit/Framework/SkippedTestSuiteError.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/SyntheticError.php b/tests/PHPUnit/PHPUnit/Framework/SyntheticError.php index d48c93b3..7a3e2d30 100755 --- a/tests/PHPUnit/PHPUnit/Framework/SyntheticError.php +++ b/tests/PHPUnit/PHPUnit/Framework/SyntheticError.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Test.php b/tests/PHPUnit/PHPUnit/Framework/Test.php index 34b37e94..63ac4e1b 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Test.php +++ b/tests/PHPUnit/PHPUnit/Framework/Test.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/TestCase.php b/tests/PHPUnit/PHPUnit/Framework/TestCase.php index a078af46..eeaf29db 100755 --- a/tests/PHPUnit/PHPUnit/Framework/TestCase.php +++ b/tests/PHPUnit/PHPUnit/Framework/TestCase.php @@ -94,7 +94,7 @@ require_once 'Text/Template.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/TestFailure.php b/tests/PHPUnit/PHPUnit/Framework/TestFailure.php index 46d8ae55..b78803fa 100755 --- a/tests/PHPUnit/PHPUnit/Framework/TestFailure.php +++ b/tests/PHPUnit/PHPUnit/Framework/TestFailure.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/TestListener.php b/tests/PHPUnit/PHPUnit/Framework/TestListener.php index 19deac24..c9e51e59 100755 --- a/tests/PHPUnit/PHPUnit/Framework/TestListener.php +++ b/tests/PHPUnit/PHPUnit/Framework/TestListener.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/TestResult.php b/tests/PHPUnit/PHPUnit/Framework/TestResult.php index 034f42ee..1ededf89 100755 --- a/tests/PHPUnit/PHPUnit/Framework/TestResult.php +++ b/tests/PHPUnit/PHPUnit/Framework/TestResult.php @@ -54,7 +54,7 @@ require_once 'PHP/Timer.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/TestSuite.php b/tests/PHPUnit/PHPUnit/Framework/TestSuite.php index a07e02fa..45acd934 100755 --- a/tests/PHPUnit/PHPUnit/Framework/TestSuite.php +++ b/tests/PHPUnit/PHPUnit/Framework/TestSuite.php @@ -78,7 +78,7 @@ require_once 'PHP/CodeCoverage.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/TestSuite/DataProvider.php b/tests/PHPUnit/PHPUnit/Framework/TestSuite/DataProvider.php index 25f0aee1..e2becf98 100755 --- a/tests/PHPUnit/PHPUnit/Framework/TestSuite/DataProvider.php +++ b/tests/PHPUnit/PHPUnit/Framework/TestSuite/DataProvider.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Framework/Warning.php b/tests/PHPUnit/PHPUnit/Framework/Warning.php index 8a0980c7..d201c6d5 100755 --- a/tests/PHPUnit/PHPUnit/Framework/Warning.php +++ b/tests/PHPUnit/PHPUnit/Framework/Warning.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Runner/BaseTestRunner.php b/tests/PHPUnit/PHPUnit/Runner/BaseTestRunner.php index 24375786..d4f99e3a 100755 --- a/tests/PHPUnit/PHPUnit/Runner/BaseTestRunner.php +++ b/tests/PHPUnit/PHPUnit/Runner/BaseTestRunner.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Runner/IncludePathTestCollector.php b/tests/PHPUnit/PHPUnit/Runner/IncludePathTestCollector.php index 95a8c940..bf6f1312 100755 --- a/tests/PHPUnit/PHPUnit/Runner/IncludePathTestCollector.php +++ b/tests/PHPUnit/PHPUnit/Runner/IncludePathTestCollector.php @@ -63,7 +63,7 @@ require_once 'File/Iterator/Factory.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Runner/StandardTestSuiteLoader.php b/tests/PHPUnit/PHPUnit/Runner/StandardTestSuiteLoader.php index d8cca65a..3fd14c67 100755 --- a/tests/PHPUnit/PHPUnit/Runner/StandardTestSuiteLoader.php +++ b/tests/PHPUnit/PHPUnit/Runner/StandardTestSuiteLoader.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Runner/TestCollector.php b/tests/PHPUnit/PHPUnit/Runner/TestCollector.php index 1160dde7..a9a99a50 100755 --- a/tests/PHPUnit/PHPUnit/Runner/TestCollector.php +++ b/tests/PHPUnit/PHPUnit/Runner/TestCollector.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Runner/TestSuiteLoader.php b/tests/PHPUnit/PHPUnit/Runner/TestSuiteLoader.php index ef41299a..2129e1d1 100755 --- a/tests/PHPUnit/PHPUnit/Runner/TestSuiteLoader.php +++ b/tests/PHPUnit/PHPUnit/Runner/TestSuiteLoader.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Runner/Version.php b/tests/PHPUnit/PHPUnit/Runner/Version.php index 31c50a49..849ddefb 100755 --- a/tests/PHPUnit/PHPUnit/Runner/Version.php +++ b/tests/PHPUnit/PHPUnit/Runner/Version.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ @@ -64,7 +64,7 @@ class PHPUnit_Runner_Version */ public static function id() { - return '3.5.13'; + return '3.5.14'; } /** @@ -72,6 +72,6 @@ class PHPUnit_Runner_Version */ public static function getVersionString() { - return 'PHPUnit 3.5.13 by Sebastian Bergmann.'; + return 'PHPUnit 3.5.14 by Sebastian Bergmann.'; } } diff --git a/tests/PHPUnit/PHPUnit/TextUI/Command.php b/tests/PHPUnit/PHPUnit/TextUI/Command.php index c7006e41..36d75a26 100755 --- a/tests/PHPUnit/PHPUnit/TextUI/Command.php +++ b/tests/PHPUnit/PHPUnit/TextUI/Command.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/TextUI/ResultPrinter.php b/tests/PHPUnit/PHPUnit/TextUI/ResultPrinter.php index b56d9e6a..421a1381 100755 --- a/tests/PHPUnit/PHPUnit/TextUI/ResultPrinter.php +++ b/tests/PHPUnit/PHPUnit/TextUI/ResultPrinter.php @@ -53,7 +53,7 @@ require_once 'PHP/Timer.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/TextUI/TestRunner.php b/tests/PHPUnit/PHPUnit/TextUI/TestRunner.php index f03f4d44..a5572d25 100755 --- a/tests/PHPUnit/PHPUnit/TextUI/TestRunner.php +++ b/tests/PHPUnit/PHPUnit/TextUI/TestRunner.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Class.php b/tests/PHPUnit/PHPUnit/Util/Class.php index dc397e06..f31777e0 100755 --- a/tests/PHPUnit/PHPUnit/Util/Class.php +++ b/tests/PHPUnit/PHPUnit/Util/Class.php @@ -55,7 +55,7 @@ if (!defined('T_NAMESPACE')) { * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.0 */ @@ -299,10 +299,6 @@ class PHPUnit_Util_Class throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string'); } - PHPUnit_Framework_Assert::assertObjectHasAttribute( - $attributeName, $object - ); - try { $attribute = new ReflectionProperty($object, $attributeName); } @@ -321,27 +317,29 @@ class PHPUnit_Util_Class } } - if ($attribute == NULL || $attribute->isPublic()) { - return $object->$attributeName; - } else { - $array = (array)$object; - $protectedName = "\0*\0" . $attributeName; - - if (array_key_exists($protectedName, $array)) { - return $array[$protectedName]; + if (isset($attribute)) { + if ($attribute == NULL || $attribute->isPublic()) { + return $object->$attributeName; } else { - $classes = self::getHierarchy(get_class($object)); + $array = (array)$object; + $protectedName = "\0*\0" . $attributeName; + + if (array_key_exists($protectedName, $array)) { + return $array[$protectedName]; + } else { + $classes = self::getHierarchy(get_class($object)); - foreach ($classes as $class) { - $privateName = sprintf( - "\0%s\0%s", + foreach ($classes as $class) { + $privateName = sprintf( + "\0%s\0%s", - $class, - $attributeName - ); + $class, + $attributeName + ); - if (array_key_exists($privateName, $array)) { - return $array[$privateName]; + if (array_key_exists($privateName, $array)) { + return $array[$privateName]; + } } } } diff --git a/tests/PHPUnit/PHPUnit/Util/Configuration.php b/tests/PHPUnit/PHPUnit/Util/Configuration.php index 8382810c..fbf16c78 100755 --- a/tests/PHPUnit/PHPUnit/Util/Configuration.php +++ b/tests/PHPUnit/PHPUnit/Util/Configuration.php @@ -166,7 +166,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.2.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature.php b/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature.php index 6931f6aa..0b71c3f0 100755 --- a/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature.php +++ b/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2010 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Interface available since Release 3.5.7 */ diff --git a/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature/Logger.php b/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature/Logger.php index 8f013e66..dca3c4cf 100755 --- a/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature/Logger.php +++ b/tests/PHPUnit/PHPUnit/Util/DeprecatedFeature/Logger.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2010 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.7 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Diff.php b/tests/PHPUnit/PHPUnit/Util/Diff.php index 69a2a8f2..338099c5 100755 --- a/tests/PHPUnit/PHPUnit/Util/Diff.php +++ b/tests/PHPUnit/PHPUnit/Util/Diff.php @@ -53,7 +53,7 @@ * @author Kore Nordmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/ErrorHandler.php b/tests/PHPUnit/PHPUnit/Util/ErrorHandler.php index 9fe949ba..9342ff85 100755 --- a/tests/PHPUnit/PHPUnit/Util/ErrorHandler.php +++ b/tests/PHPUnit/PHPUnit/Util/ErrorHandler.php @@ -57,7 +57,7 @@ require_once 'PHPUnit/Framework/Error/Warning.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/File.php b/tests/PHPUnit/PHPUnit/Util/File.php index 95eea0b5..b4bf1b44 100755 --- a/tests/PHPUnit/PHPUnit/Util/File.php +++ b/tests/PHPUnit/PHPUnit/Util/File.php @@ -55,7 +55,7 @@ if (!defined('T_NAMESPACE')) { * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Fileloader.php b/tests/PHPUnit/PHPUnit/Util/Fileloader.php index 6d7cd9e8..3bdaa6f4 100755 --- a/tests/PHPUnit/PHPUnit/Util/Fileloader.php +++ b/tests/PHPUnit/PHPUnit/Util/Fileloader.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: @package_version@ + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Filesystem.php b/tests/PHPUnit/PHPUnit/Util/Filesystem.php index 5a647f28..561626e3 100755 --- a/tests/PHPUnit/PHPUnit/Util/Filesystem.php +++ b/tests/PHPUnit/PHPUnit/Util/Filesystem.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ @@ -121,7 +121,8 @@ class PHPUnit_Util_Filesystem } /** - * Wrapper for file_exists() that searches the include_path. + * Implementation of stream_resolve_include_path() in PHP + * for version before PHP 5.3.2. * * @param string $file * @return mixed @@ -130,6 +131,10 @@ class PHPUnit_Util_Filesystem */ public static function fileExistsInIncludePath($file) { + if (function_exists('stream_resolve_include_path')) { + return stream_resolve_include_path($file); + } + if (file_exists($file)) { return realpath($file); } diff --git a/tests/PHPUnit/PHPUnit/Util/Filter.php b/tests/PHPUnit/PHPUnit/Util/Filter.php index 15a94dfc..ab48ba82 100755 --- a/tests/PHPUnit/PHPUnit/Util/Filter.php +++ b/tests/PHPUnit/PHPUnit/Util/Filter.php @@ -53,7 +53,7 @@ require_once 'File/Iterator/Factory.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Getopt.php b/tests/PHPUnit/PHPUnit/Util/Getopt.php index cdca68d7..d04c8881 100755 --- a/tests/PHPUnit/PHPUnit/Util/Getopt.php +++ b/tests/PHPUnit/PHPUnit/Util/Getopt.php @@ -52,7 +52,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/GlobalState.php b/tests/PHPUnit/PHPUnit/Util/GlobalState.php index 32825aaf..1cacc5a0 100755 --- a/tests/PHPUnit/PHPUnit/Util/GlobalState.php +++ b/tests/PHPUnit/PHPUnit/Util/GlobalState.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/InvalidArgumentHelper.php b/tests/PHPUnit/PHPUnit/Util/InvalidArgumentHelper.php index 1fe101c5..1465f30f 100755 --- a/tests/PHPUnit/PHPUnit/Util/InvalidArgumentHelper.php +++ b/tests/PHPUnit/PHPUnit/Util/InvalidArgumentHelper.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Log/DBUS.php b/tests/PHPUnit/PHPUnit/Util/Log/DBUS.php index fa42b6f3..83464a7e 100755 --- a/tests/PHPUnit/PHPUnit/Util/Log/DBUS.php +++ b/tests/PHPUnit/PHPUnit/Util/Log/DBUS.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Log/JSON.php b/tests/PHPUnit/PHPUnit/Util/Log/JSON.php index 04d190ad..ba21be55 100755 --- a/tests/PHPUnit/PHPUnit/Util/Log/JSON.php +++ b/tests/PHPUnit/PHPUnit/Util/Log/JSON.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Log/JUnit.php b/tests/PHPUnit/PHPUnit/Util/Log/JUnit.php index 1b4d7254..b56f4758 100755 --- a/tests/PHPUnit/PHPUnit/Util/Log/JUnit.php +++ b/tests/PHPUnit/PHPUnit/Util/Log/JUnit.php @@ -53,7 +53,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Log/TAP.php b/tests/PHPUnit/PHPUnit/Util/Log/TAP.php index fabad78f..1796b264 100755 --- a/tests/PHPUnit/PHPUnit/Util/Log/TAP.php +++ b/tests/PHPUnit/PHPUnit/Util/Log/TAP.php @@ -54,7 +54,7 @@ require_once 'SymfonyComponents/YAML/sfYamlDumper.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Log/XHProf.php b/tests/PHPUnit/PHPUnit/Util/Log/XHProf.php index 42d8a145..0e6084bf 100755 --- a/tests/PHPUnit/PHPUnit/Util/Log/XHProf.php +++ b/tests/PHPUnit/PHPUnit/Util/Log/XHProf.php @@ -81,7 +81,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/PHP.php b/tests/PHPUnit/PHPUnit/Util/PHP.php index 21fc4c2c..ecf7c033 100755 --- a/tests/PHPUnit/PHPUnit/Util/PHP.php +++ b/tests/PHPUnit/PHPUnit/Util/PHP.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: @package_version@ + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.4.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/PHP/Default.php b/tests/PHPUnit/PHPUnit/Util/PHP/Default.php index b4a3d764..f0d99a75 100755 --- a/tests/PHPUnit/PHPUnit/Util/PHP/Default.php +++ b/tests/PHPUnit/PHPUnit/Util/PHP/Default.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.12 */ diff --git a/tests/PHPUnit/PHPUnit/Util/PHP/Windows.php b/tests/PHPUnit/PHPUnit/Util/PHP/Windows.php index eb27dfea..3a3e0cf7 100755 --- a/tests/PHPUnit/PHPUnit/Util/PHP/Windows.php +++ b/tests/PHPUnit/PHPUnit/Util/PHP/Windows.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.5.12 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Printer.php b/tests/PHPUnit/PHPUnit/Util/Printer.php index 406f6864..da0567c1 100755 --- a/tests/PHPUnit/PHPUnit/Util/Printer.php +++ b/tests/PHPUnit/PHPUnit/Util/Printer.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Skeleton.php b/tests/PHPUnit/PHPUnit/Util/Skeleton.php index cbab0d69..ed9e8487 100755 --- a/tests/PHPUnit/PHPUnit/Util/Skeleton.php +++ b/tests/PHPUnit/PHPUnit/Util/Skeleton.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Skeleton/Class.php b/tests/PHPUnit/PHPUnit/Util/Skeleton/Class.php index 54e512df..1360e221 100755 --- a/tests/PHPUnit/PHPUnit/Util/Skeleton/Class.php +++ b/tests/PHPUnit/PHPUnit/Util/Skeleton/Class.php @@ -53,7 +53,7 @@ require_once 'Text/Template.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Skeleton/Test.php b/tests/PHPUnit/PHPUnit/Util/Skeleton/Test.php index d9338ee6..cc221cae 100755 --- a/tests/PHPUnit/PHPUnit/Util/Skeleton/Test.php +++ b/tests/PHPUnit/PHPUnit/Util/Skeleton/Test.php @@ -53,7 +53,7 @@ require_once 'Text/Template.php'; * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.3.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Test.php b/tests/PHPUnit/PHPUnit/Util/Test.php index 85e6b0ec..52fae1fc 100755 --- a/tests/PHPUnit/PHPUnit/Util/Test.php +++ b/tests/PHPUnit/PHPUnit/Util/Test.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/TestDox/NamePrettifier.php b/tests/PHPUnit/PHPUnit/Util/TestDox/NamePrettifier.php index a3c43542..1d85659c 100755 --- a/tests/PHPUnit/PHPUnit/Util/TestDox/NamePrettifier.php +++ b/tests/PHPUnit/PHPUnit/Util/TestDox/NamePrettifier.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ @@ -109,11 +109,11 @@ class PHPUnit_Util_TestDox_NamePrettifier return $buffer; } - $string = preg_replace('#\d+$#', '', $name); + $string = preg_replace('#\d+$#', '', $name, -1, $count); if (in_array($string, $this->strings)) { $name = $string; - } else { + } else if ($count == 0) { $this->strings[] = $string; } diff --git a/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter.php b/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter.php index 097ec889..85d25d5d 100755 --- a/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter.php +++ b/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php b/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php index ecd72b66..a9bd6067 100755 --- a/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php +++ b/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/Text.php b/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/Text.php index cb5923ab..65958a32 100755 --- a/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/Text.php +++ b/tests/PHPUnit/PHPUnit/Util/TestDox/ResultPrinter/Text.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 2.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/TestSuiteIterator.php b/tests/PHPUnit/PHPUnit/Util/TestSuiteIterator.php index 044bcde1..25bcbab9 100755 --- a/tests/PHPUnit/PHPUnit/Util/TestSuiteIterator.php +++ b/tests/PHPUnit/PHPUnit/Util/TestSuiteIterator.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.1.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/Type.php b/tests/PHPUnit/PHPUnit/Util/Type.php index 043f8a4c..ca43122f 100755 --- a/tests/PHPUnit/PHPUnit/Util/Type.php +++ b/tests/PHPUnit/PHPUnit/Util/Type.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.0.0 */ diff --git a/tests/PHPUnit/PHPUnit/Util/XML.php b/tests/PHPUnit/PHPUnit/Util/XML.php index 646d3b71..b8d48f93 100755 --- a/tests/PHPUnit/PHPUnit/Util/XML.php +++ b/tests/PHPUnit/PHPUnit/Util/XML.php @@ -51,7 +51,7 @@ * @author Sebastian Bergmann * @copyright 2002-2011 Sebastian Bergmann * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 3.5.13 + * @version Release: 3.5.14 * @link http://www.phpunit.de/ * @since Class available since Release 3.2.0 */ diff --git a/tests/SugarTestEmailUtilities.php b/tests/SugarTestEmailUtilities.php index a312ffb1..afe7e3ed 100755 --- a/tests/SugarTestEmailUtilities.php +++ b/tests/SugarTestEmailUtilities.php @@ -82,8 +82,8 @@ class SugarTestEmailUtilities private static function createEmailsBeansRelationship($email_id, $parent_type, $parent_id) { $unique_id = create_guid(); - $GLOBALS['db']->query("INSERT INTO emails_beans SET id = '{$unique_id}', email_id = '{$email_id}', bean_id = '{$parent_id}', ". - "bean_module = '{$parent_type}', date_modified = '".gmdate('Y-m-d H:i:s')."', deleted = 0"); + $GLOBALS['db']->query("INSERT INTO emails_beans ( id, email_id, bean_id, bean_module, date_modified, deleted ) ". + "VALUES ( '{$unique_id}', '{$email_id}', '{$parent_id}', '{$parent_type}', '".gmdate('Y-m-d H:i:s')."', 0)"); } private static function removeCreatedEmailBeansRelationships(){ diff --git a/tests/include/Popup/Bug44324Test.php b/tests/include/Popup/Bug44324Test.php new file mode 100755 index 00000000..6b869804 --- /dev/null +++ b/tests/include/Popup/Bug44324Test.php @@ -0,0 +1,83 @@ +contact = SugarTestContactUtilities::createContact(); + $this->contact->salutation = 'Ms.'; + $this->contact->first_name = 'Lady'; + $this->contact->last_name = 'Gaga'; + //Save contact with salutation + $this->contact->save(); + } + + public function tearDown() + { + SugarTestUserUtilities::removeAllCreatedAnonymousUsers(); + unset($GLOBALS['current_user']); + SugarTestContactUtilities::removeAllCreatedContacts(); + } + + public function testSearchNamePopulatedCorrectly() + { + require_once('include/Popups/PopupSmarty.php'); + $popupSmarty = new PopupSmarty($this->contact, $this->contact->module_dir); + $this->contact->_create_proper_name_field(); + $search_data = array(); + $search_data[] = array('ID'=>$this->contact->id, 'NAME'=>$this->contact->name, 'FIRST_NAME'=>$this->contact->first_name, 'LAST_NAME'=>$this->contact->last_name); + + $data = array('data'=>$search_data); + $data['pageData']['offsets']['lastOffsetOnPage'] = 0; + $data['pageData']['offsets']['current'] = 0; + $popupSmarty->data = $data; + $popupSmarty->fieldDefs = array(); + $popupSmarty->view= 'popup'; + $popupSmarty->tpl = 'include/Popups/tpls/PopupGeneric.tpl'; + $this->expectOutputRegex('/\"NAME\":\"Lady Gaga\"/', 'Assert that NAME value was set to "Lady Gaga"'); + echo $popupSmarty->display(); + } + +} + +?> diff --git a/tests/include/SubPanel/Bug41738Test.php b/tests/include/SubPanel/Bug41738Test.php index 45fed24c..a7a55f9c 100755 --- a/tests/include/SubPanel/Bug41738Test.php +++ b/tests/include/SubPanel/Bug41738Test.php @@ -107,7 +107,7 @@ function subpanelCollectionWithSpecificQueryMeetings($params) $query = "SELECT meetings.id , meetings.name , meetings.status , 0 reply_to_status , ' ' contact_name , ' ' contact_id , ' ' contact_name_owner , ' ' contact_name_mod , meetings.parent_id , meetings.parent_type , meetings.date_modified , jt1.user_name assigned_user_name , jt1.created_by assigned_user_name_owner , 'Users' assigned_user_name_mod, ' ' filename , meetings.assigned_user_id , 'meetings' panel_name FROM meetings LEFT JOIN users jt1 ON jt1.id= meetings.assigned_user_id AND jt1.deleted=0 AND jt1.deleted=0 - WHERE ( meetings.parent_type = \"Opportunities\" + WHERE ( meetings.parent_type = 'Opportunities' AND meetings.deleted=0 AND (meetings.status='Held' OR meetings.status='Not Held') AND meetings.parent_id IN( @@ -125,7 +125,7 @@ function subpanelCollectionWithSpecificQueryTasks($params) $query = "SELECT tasks.id , tasks.name , tasks.status , 0 reply_to_status , ' ' contact_name , ' ' contact_id , ' ' contact_name_owner , ' ' contact_name_mod , tasks.parent_id , tasks.parent_type , tasks.date_modified , jt1.user_name assigned_user_name , jt1.created_by assigned_user_name_owner , 'Users' assigned_user_name_mod, ' ' filename , tasks.assigned_user_id , 'tasks' panel_name FROM tasks LEFT JOIN users jt1 ON jt1.id= tasks.assigned_user_id AND jt1.deleted=0 AND jt1.deleted=0 - WHERE ( tasks.parent_type = \"Opportunities\" + WHERE ( tasks.parent_type = 'Opportunities' AND tasks.deleted=0 AND (tasks.status='Completed' OR tasks.status='Deferred') AND tasks.parent_id IN( diff --git a/tests/include/SugarObjects/Bug32797Test.php b/tests/include/SugarObjects/Bug32797Test.php new file mode 100755 index 00000000..a1ee83f7 --- /dev/null +++ b/tests/include/SugarObjects/Bug32797Test.php @@ -0,0 +1,104 @@ +_old_sugar_config = $GLOBALS['sugar_config']; + $GLOBALS['sugar_config'] = array('require_accounts' => false); + } + + public function tearDown() + { + $config = SugarConfig::getInstance(); + $config->clearCache(); + $GLOBALS['sugar_config'] = $this->_old_sugar_config; + } + + public function vardefProvider() + { + return array( + array( + array('fields' => array('account_name' => array('required' => true))), + array('fields' => array('account_name' => array('required' => false))) + ), + array( + array('fields' => array('account_name' => array('required' => false))), + array('fields' => array('account_name' => array('required' => false))) + ), + array( + array('fields' => array('account_name' => array('required' => null))), + array('fields' => array('account_name' => array('required' => false))) + ), + array( + array('fields' => array('account_name' => array())), + array('fields' => array('account_name' => array())) + ), + array( + array('fields' => array()), + array('fields' => array()) + ) + ); + } + + /** + * @dataProvider vardefProvider + */ + public function testApplyGlobalAccountRequirements($vardef, $vardefToCompare) + { + $this->assertEquals($vardefToCompare, VardefManager::applyGlobalAccountRequirements($vardef)); + } + + public function vardefProvider1() + { + return array( + array( + array('fields' => array('account_name' => array('required' => true))), + array('fields' => array('account_name' => array('required' => true))) + ), + array( + array('fields' => array('account_name' => array('required' => false))), + array('fields' => array('account_name' => array('required' => true))) + ) + ); + } + + /** + * @dataProvider vardefProvider1 + */ + public function testApplyGlobalAccountRequirements1($vardef, $vardefToCompare) + { + $GLOBALS['sugar_config']['require_accounts'] = true; + $this->assertEquals($vardefToCompare, VardefManager::applyGlobalAccountRequirements($vardef)); + } + + public function vardefProvider2() + { + return array( + array( + array('fields' => array('account_name' => array('required' => true))), + array('fields' => array('account_name' => array('required' => true))) + ), + array( + array('fields' => array('account_name' => array('required' => false))), + array('fields' => array('account_name' => array('required' => false))) + ) + ); + } + + /** + * @dataProvider vardefProvider2 + */ + public function testApplyGlobalAccountRequirements2($vardef, $vardefToCompare) + { + unset($GLOBALS['sugar_config']['require_accounts']); + $this->assertEquals($vardefToCompare, VardefManager::applyGlobalAccountRequirements($vardef)); + } +} \ No newline at end of file diff --git a/tests/modules/Documents/Bug43560Test.php b/tests/modules/Documents/Bug43560Test.php index c523c948..ab821e10 100755 --- a/tests/modules/Documents/Bug43560Test.php +++ b/tests/modules/Documents/Bug43560Test.php @@ -63,9 +63,9 @@ class Bug43560Test extends Sugar_PHPUnit_Framework_TestCase } function testRevisionSave() { - $ret = $GLOBALS['db']->query("SELECT COUNT(*) AS rowcount FROM document_revisions WHERE document_id = '{$this->doc->id}'"); + $ret = $GLOBALS['db']->query("SELECT COUNT(*) AS rowcount1 FROM document_revisions WHERE document_id = '{$this->doc->id}'"); $row = $GLOBALS['db']->fetchByAssoc($ret); - $this->assertEquals($row['rowcount'],0,'We created an empty revision'); + $this->assertEquals($row['rowcount1'],0,'We created an empty revision'); $ret = $GLOBALS['db']->query("SELECT document_revision_id FROM documents WHERE id = '{$this->doc->id}'"); $row = $GLOBALS['db']->fetchByAssoc($ret); @@ -75,9 +75,9 @@ class Bug43560Test extends Sugar_PHPUnit_Framework_TestCase $revision_stuff = array('file' => base64_encode('Pickles has an extravagant beard of pine fur.'), 'filename' => 'a_file_about_pickles.txt', 'id' => $this->doc->id, 'revision' => '1'); $revisionId = $ds->saveFile($revision_stuff); - $ret = $GLOBALS['db']->query("SELECT COUNT(*) AS rowcount FROM document_revisions WHERE document_id = '{$this->doc->id}'"); + $ret = $GLOBALS['db']->query("SELECT COUNT(*) AS rowcount1 FROM document_revisions WHERE document_id = '{$this->doc->id}'"); $row = $GLOBALS['db']->fetchByAssoc($ret); - $this->assertEquals($row['rowcount'],1,'We didn\'t create a revision when we should have'); + $this->assertEquals($row['rowcount1'],1,'We didn\'t create a revision when we should have'); $ret = $GLOBALS['db']->query("SELECT document_revision_id FROM documents WHERE id = '{$this->doc->id}'"); $row = $GLOBALS['db']->fetchByAssoc($ret); @@ -90,9 +90,9 @@ class Bug43560Test extends Sugar_PHPUnit_Framework_TestCase $newDoc->document_revision_id = $revisionId; $newDoc->save(FALSE); - $ret = $GLOBALS['db']->query("SELECT COUNT(*) AS rowcount FROM document_revisions WHERE document_id = '{$this->doc->id}'"); + $ret = $GLOBALS['db']->query("SELECT COUNT(*) AS rowcount1 FROM document_revisions WHERE document_id = '{$this->doc->id}'"); $row = $GLOBALS['db']->fetchByAssoc($ret); - $this->assertEquals($row['rowcount'],1,'We didn\'t create a revision when we should have'); + $this->assertEquals($row['rowcount1'],1,'We didn\'t create a revision when we should have'); $ret = $GLOBALS['db']->query("SELECT document_revision_id FROM documents WHERE id = '{$this->doc->id}'"); $row = $GLOBALS['db']->fetchByAssoc($ret); diff --git a/tests/modules/DynamicFields/Bug34993Test.php b/tests/modules/DynamicFields/Bug34993Test.php new file mode 100755 index 00000000..5e6f1e4f --- /dev/null +++ b/tests/modules/DynamicFields/Bug34993Test.php @@ -0,0 +1,173 @@ +accountMockBean = $this->getMock('Account' , array('hasCustomFields')); + $this->_tablename = 'test' . date("YmdHis"); + if ( isset($GLOBALS['installing']) ) + { + $this->_old_installing = $GLOBALS['installing']; + } + $GLOBALS['installing'] = true; + + $GLOBALS['db']->createTableParams($this->_tablename . '_cstm', + array( + 'id_c' => array ( + 'name' => 'id_c', + 'type' => 'id', + ), + ), + array() + ); + $GLOBALS['db']->query("INSERT INTO {$this->_tablename}_cstm (id_c) VALUES ('12345')"); + + //Safety check in case the previous run had failed + $GLOBALS['db']->query("DELETE FROM fields_meta_data WHERE id in ('Accountsbug34993_test_c', 'Accountsbug34993_test2_c')"); + } + + public function tearDown() + { + $GLOBALS['db']->dropTableName($this->_tablename . '_cstm'); + $GLOBALS['db']->query("DELETE FROM fields_meta_data WHERE id in ('Accountsbug34993_test_c', 'Accountsbug34993_test2_c')"); + if ( isset($this->_old_installing) ) { + $GLOBALS['installing'] = $this->_old_installing; + } else { + unset($GLOBALS['installing']); + } + + if(file_exists('custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_bug34993_test_c.php')) + { + unlink('custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_bug34993_test_c.php'); + } + + if(file_exists('custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_bug34993_test2_c.php')) + { + unlink('custom/Extension/modules/Accounts/Ext/Vardefs/sugarfield_bug34993_test2_c.php'); + } + + VardefManager::clearVardef('Accounts', 'Account'); + VardefManager::refreshVardefs('Accounts', 'Account'); + } + + public function testCustomFieldDefaultValue() + { + require_once('modules/DynamicFields/templates/Fields/TemplateText.php'); + require_once('modules/DynamicFields/DynamicField.php'); + require_once('modules/DynamicFields/FieldCases.php'); + + //Simulate create a custom text field with a default value set to 123 + $templateText = get_widget('varchar'); + $templateText->type = 'varchar'; + $templateText->view = 'edit'; + $templateText->label = 'CUSTOM TEST'; + $templateText->name = 'bug34993_test'; + $templateText->size = 20; + $templateText->len = 255; + $templateText->required = false; + $templateText->default = '123'; + $templateText->default_value = '123'; + $templateText->comment = ''; + $templateText->audited = 0; + $templateText->massupdate = 0; + $templateText->importable = true; + $templateText->duplicate_merge = 0; + $templateText->reportable = 1; + $templateText->ext1 = NULL; + $templateText->ext2 = NULL; + $templateText->ext3 = NULL; + $templateText->ext4 = NULL; + + $bean = $this->accountMockBean; + $bean->custom_fields = new DynamicField($bean->module_dir); + $bean->custom_fields->setup($bean); + + $bean->expects($this->any()) + ->method('hasCustomFields') + ->will($this->returnValue(true)); + $bean->table_name = $this->_tablename; + $bean->id = '12345'; + $bean->custom_fields->addFieldObject($templateText); + $bean->custom_fields->retrieve(); + $this->assertEquals($bean->id_c, '12345', "Assert that the custom table exists"); + $this->assertEquals($bean->bug34993_test_c, NULL, "Assert that the custom text field has a default value set to NULL"); + + + //Simulate create a custom text field with a default value set to 123 + $templateText = get_widget('enum'); + $templateText->type = 'enum'; + $templateText->view = 'edit'; + $templateText->label = 'CUSTOM TEST2'; + $templateText->name = 'bug34993_test2'; + $templateText->size = 20; + $templateText->len = 255; + $templateText->required = false; + $templateText->default = '123'; + $templateText->default_value = '123'; + $templateText->comment = ''; + $templateText->audited = 0; + $templateText->massupdate = 0; + $templateText->importable = true; + $templateText->duplicate_merge = 0; + $templateText->reportable = 1; + $templateText->ext1 = 'account_type_dom'; + $templateText->ext2 = NULL; + $templateText->ext3 = NULL; + $templateText->ext4 = NULL; + + $bean = $this->accountMockBean; + $bean->custom_fields = new DynamicField($bean->module_dir); + $bean->custom_fields->setup($bean); + + $bean->expects($this->any()) + ->method('hasCustomFields') + ->will($this->returnValue(true)); + $bean->table_name = $this->_tablename; + $bean->id = '12345'; + $bean->custom_fields->addFieldObject($templateText); + $bean->custom_fields->retrieve(); + $this->assertEquals($bean->id_c, '12345', "Assert that the custom table exists"); + $this->assertEquals($bean->bug34993_test2_c, NULL, "Assert that the custom enum field has a default value set to NULL"); + } +} diff --git a/tests/modules/Home/Bug43395Test.php b/tests/modules/Home/Bug43395Test.php new file mode 100755 index 00000000..31b3c445 --- /dev/null +++ b/tests/modules/Home/Bug43395Test.php @@ -0,0 +1,65 @@ +retrieve('1'); + $GLOBALS['current_user'] = $user; + self::$contact = SugarTestContactUtilities::createContact(); + self::$contact->first_name = 'Bug43395'; + self::$contact->last_name = 'Test'; + self::$contact->salutation = 'Mr.'; + self::$contact->save(); + } + + public static function tearDownAfterClass() + { + unset($_REQUEST['data']); + unset($_REQUEST['query']); + SugarTestContactUtilities::removeAllCreatedContacts(); + } + + public function testFormatResults() + { + $_REQUEST = array(); + $_REQUEST['data'] = '{"form":"search_form","method":"query","modules":["Contacts"],"group":"or","field_list":["name","id"],"populate_list":["contact_c_basic","contact_id_c_basic"],"required_list":["parent_id"],"conditions":[{"name":"name","op":"like_custom","end":"%","value":""}],"order":"name","limit":"30","no_match_text":"No Match"}'; + $_REQUEST['query'] = self::$contact->first_name; + require_once 'modules/Home/quicksearchQuery.php'; + + $json = getJSONobj(); + $data = $json->decode(html_entity_decode($_REQUEST['data'])); + if(isset($_REQUEST['query']) && !empty($_REQUEST['query'])){ + foreach($data['conditions'] as $k=>$v){ + if(empty($data['conditions'][$k]['value'])){ + $data['conditions'][$k]['value']=$_REQUEST['query']; + } + } + } + self::$quickSearch = new quicksearchQuery(); + $result = self::$quickSearch->query($data); + $resultBean = $json->decodeReal($result); + $this->assertEquals($resultBean['fields'][0]['name'], self::$contact->first_name . ' ' . self::$contact->last_name, 'Assert that the quicksearch returns a contact name without salutation'); + } + + public function testPersonLocaleNameFormattting() + { + $GLOBALS['current_user']->setPreference('default_locale_name_format', 's f l'); + + self::$contact->createLocaleFormattedName = true; + self::$contact->_create_proper_name_field(); + $this->assertEquals(self::$contact->name, 'Mr. Bug43395 Test', 'Assert that _create_proper_name_field with createLocaleFormattedName set to true returns salutation'); + + self::$contact->createLocaleFormattedName = false; + self::$contact->_create_proper_name_field(); + $this->assertEquals(self::$contact->name, 'Bug43395 Test', 'Assert that _create_proper_name_field with createLocaleFormattedName set to false does not return salutation'); + } + +} +?> \ No newline at end of file diff --git a/tests/modules/Import/ImportFieldSanitizeTest.php b/tests/modules/Import/ImportFieldSanitizeTest.php index 0238b632..1542a5f4 100755 --- a/tests/modules/Import/ImportFieldSanitizeTest.php +++ b/tests/modules/Import/ImportFieldSanitizeTest.php @@ -824,7 +824,7 @@ class ImportFieldSanitizeTest extends Sugar_PHPUnit_Framework_TestCase $relaterow = $focus->db->fetchByAssoc($result); $this->assertTrue(empty($focus->account_id),'Category ID should not be set'); - $this->assertNull($relaterow,'Record should not be added to the related table'); + $this->assertFalse($relaterow,'Record should not be added to the related table'); $GLOBALS['db']->query("DELETE FROM accounts where id = '{$relaterow['id']}'"); } @@ -866,7 +866,7 @@ class ImportFieldSanitizeTest extends Sugar_PHPUnit_Framework_TestCase $relaterow = $focus->db->fetchByAssoc($result); $this->assertTrue(empty($focus->account_id),'Category ID should not be set'); - $this->assertNull($relaterow,'Record should not be added to the related table'); + $this->assertFalse($relaterow,'Record should not be added to the related table'); $GLOBALS['db']->query("DELETE FROM accounts where id = '{$relaterow['id']}'"); } @@ -1006,7 +1006,7 @@ class ImportFieldSanitizeTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query( "SELECT id FROM accounts where name = '$account_name'"); $relaterow = $focus->db->fetchByAssoc($result); - $this->assertNull($relaterow,'Record should not have been created'); + $this->assertFalse($relaterow,'Record should not have been created'); if ( $relaterow ) $GLOBALS['db']->query("DELETE FROM accounts where id = '{$relaterow['id']}'"); } @@ -1064,7 +1064,7 @@ class ImportFieldSanitizeTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query( "SELECT id FROM accounts where name = '$account_name'"); $relaterow = $focus->db->fetchByAssoc($result); - $this->assertNull($relaterow,'Record should not have been created'); + $this->assertFalse($relaterow,'Record should not have been created'); if ( $relaterow ) $GLOBALS['db']->query("DELETE FROM accounts where id = '{$relaterow['id']}'"); } diff --git a/tests/modules/Import/ImportMapTest.php b/tests/modules/Import/ImportMapTest.php index a89e6a01..a4b8dffe 100755 --- a/tests/modules/Import/ImportMapTest.php +++ b/tests/modules/Import/ImportMapTest.php @@ -94,7 +94,7 @@ class ImportMapTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query($query); - $this->assertNull($GLOBALS['db']->fetchByAssoc($result),'Row not added'); + $this->assertFalse($GLOBALS['db']->fetchByAssoc($result),'Row not added'); } public function testSaveEmptyEnclosure() @@ -111,7 +111,7 @@ class ImportMapTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query($query); - $this->assertNotNull($GLOBALS['db']->fetchByAssoc($result),'Row not added'); + $this->assertTrue($GLOBALS['db']->fetchByAssoc($result) != false,'Row not added'); } public function testSetAndGetMapping() diff --git a/tests/modules/Import/UsersLastImportTest.php b/tests/modules/Import/UsersLastImportTest.php index 1187216e..d4c43a89 100755 --- a/tests/modules/Import/UsersLastImportTest.php +++ b/tests/modules/Import/UsersLastImportTest.php @@ -110,7 +110,7 @@ class UsersLastImportTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query($query); - $this->assertNull($GLOBALS['db']->fetchByAssoc($result),'There should not be any records in the table now'); + $this->assertFalse($GLOBALS['db']->fetchByAssoc($result),'There should not be any records in the table now'); } public function testUndo() @@ -129,7 +129,7 @@ class UsersLastImportTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query($query); - $this->assertNull($GLOBALS['db']->fetchByAssoc($result),'There should not be any records in the table now'); + $this->assertFalse($GLOBALS['db']->fetchByAssoc($result),'There should not be any records in the table now'); } /** @@ -173,11 +173,11 @@ class UsersLastImportTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query("SELECT * FROM email_addr_bean_rel where id = '{$this->email_addr_bean_rel_id}'"); $rows = $GLOBALS['db']->fetchByAssoc($result); - $this->assertNull($rows); + $this->assertFalse($rows); $result = $GLOBALS['db']->query("SELECT * FROM email_addresses where id = '{$this->email_address_id}'"); $rows = $GLOBALS['db']->fetchByAssoc($result); - $this->assertNull($rows); + $this->assertFalse($rows); $GLOBALS['db']->query("DELETE FROM users_last_import WHERE id = '{$last_import->id}'"); } @@ -197,7 +197,7 @@ class UsersLastImportTest extends Sugar_PHPUnit_Framework_TestCase $result = $GLOBALS['db']->query($query); - $this->assertNull($GLOBALS['db']->fetchByAssoc($result),'There should not be any records in the table now'); + $this->assertFalse($GLOBALS['db']->fetchByAssoc($result),'There should not be any records in the table now'); } diff --git a/tests/modules/ModuleBuilder/views/Bug44372Test.php b/tests/modules/ModuleBuilder/views/Bug44372Test.php new file mode 100755 index 00000000..9d2ab8c2 --- /dev/null +++ b/tests/modules/ModuleBuilder/views/Bug44372Test.php @@ -0,0 +1,58 @@ +"", + "module"=>"" + ); + $view = new ViewModule(); + ob_start(); + $view->display(); + ob_clean(); + $this->assertTrue(is_string($view->module), "Assert that view class variable module is not an object"); + } + +} + +?> \ No newline at end of file diff --git a/tests/modules/SavedSearch/Bug44908Test.php b/tests/modules/SavedSearch/Bug44908Test.php new file mode 100755 index 00000000..ec250518 --- /dev/null +++ b/tests/modules/SavedSearch/Bug44908Test.php @@ -0,0 +1,65 @@ +query = $query; + $storeQuery->populateRequest(); + $this->assertEquals('1,2,3,4,5', $_REQUEST['bug_number_advanced'], "Assert that bug search string 1,2,3,4,5 was not formatted"); + } + +} \ No newline at end of file diff --git a/tests/modules/UpgradeWizard/Bug44414Test.php b/tests/modules/UpgradeWizard/Bug44414Test.php new file mode 100755 index 00000000..e65016c7 --- /dev/null +++ b/tests/modules/UpgradeWizard/Bug44414Test.php @@ -0,0 +1,99 @@ +save_file)) + { + //This really shouldn't be happening, but just in case... + $this->has_save_file = true; + $this->backup_file = $this->save_file . '.' . gmmktime() . '.bak'; + copy($this->save_file, $this->backup_file); + } else { + if(!file_exists('modules/DocumentRevisions')) + { + mkdir_recursive('modules/DocumentRevisions'); + } + //Create the test file + write_array_to_file("test", array(), $this->save_file); + } + } + + public function tearDown() + { + if($this->has_save_file) + { + copy($this->backup_file, $this->save_file); + unlink($this->backup_file); + } else { + if(file_exists($this->save_file)) + { + unlink($this->save_file); + } + } + + if(file_exists($this->save_file . '.suback.bak')) + { + unlink($this->save_file . '.suback.bak'); + } + } + + public function testUnlinkUpgradeFiles600() + { + $this->assertTrue(file_exists($this->save_file), 'Assert the ' . $this->save_file . ' exists'); + unlinkUpgradeFiles('600'); + $this->assertFalse(file_exists($this->save_file), 'Assert the ' . $this->save_file . ' no longer exists'); + $this->assertTrue(file_exists($this->save_file . '.suback.bak'), 'Assert the ' . $this->save_file . '.suback.bak file exists'); + } + + public function testUnlinkUpgradeFiles610() + { + $this->assertTrue(file_exists($this->save_file), 'Assert the ' . $this->save_file . ' exists'); + unlinkUpgradeFiles('610'); + $this->assertFalse(file_exists($this->save_file), 'Assert the ' . $this->save_file . ' no longer exists'); + $this->assertTrue(file_exists($this->save_file . '.suback.bak'), 'Assert the ' . $this->save_file . '.suback.bak file exists'); + } +} \ No newline at end of file diff --git a/tests/modules/UpgradeWizard/SugarMerge/Bug44472Test.php b/tests/modules/UpgradeWizard/SugarMerge/Bug44472Test.php new file mode 100755 index 00000000..328b0e24 --- /dev/null +++ b/tests/modules/UpgradeWizard/SugarMerge/Bug44472Test.php @@ -0,0 +1,126 @@ +useOutputBuffering = false; +} + + +function tearDown() { + SugarTestMergeUtilities::teardownFiles(); +} + + +function test620TemplateMetaMergeOnCases() +{ + require_once 'modules/UpgradeWizard/SugarMerge/EditViewMerge.php'; + $this->merge = new EditViewMerge(); + $this->merge->merge('Cases', 'tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/oob/modules/Cases/metadata/editviewdefs.php', 'modules/Cases/metadata/editviewdefs.php', 'custom/modules/Cases/metadata/editviewdefs.php'); + $this->assertTrue(file_exists('custom/modules/Cases/metadata/editviewdefs.php.suback.php')); + require('custom/modules/Cases/metadata/editviewdefs.php'); + $this->assertTrue(isset($viewdefs['Cases']['EditView']['templateMeta']['form']), 'Assert that the form key is kept on the customized templateMeta section for Cases'); +} + +function test620TemplateMetaMergeOnMeetings() +{ + require_once 'modules/UpgradeWizard/SugarMerge/EditViewMerge.php'; + $this->merge = new EditViewMergeMock(); + $this->merge->setModule('Meetings'); + $data = array(); + $data['Meetings'] = array('EditView'=>array('templateMeta'=>array('form'))); + $this->merge->setCustomData($data); + $newData = array(); + $newData['Meetings'] = array('EditView'=>array('templateMeta'=>array())); + $this->merge->setNewData($newData); + $this->merge->testMergeTemplateMeta(); + $newData = $this->merge->getNewData(); + $this->assertTrue(!isset($newData['Meetings']['EditView']['templateMeta']['form']), 'Assert that we do not take customized templateMeta section for Meetings'); +} + +function test620TemplateMetaMergeOnCalls() +{ + require_once 'modules/UpgradeWizard/SugarMerge/EditViewMerge.php'; + $this->merge = new EditViewMergeMock(); + $this->merge->setModule('Calls'); + $data = array(); + $data['Calls'] = array('EditView'=>array('templateMeta'=>array('form'))); + $this->merge->setCustomData($data); + $newData = array(); + $newData['Calls'] = array('EditView'=>array('templateMeta'=>array())); + $this->merge->setNewData($newData); + $this->merge->testMergeTemplateMeta(); + + $newData = $this->merge->getNewData(); + $this->assertTrue(!isset($newData['Calls']['EditView']['templateMeta']['form']), 'Assert that we do not take customized templateMeta section for Calls'); +} + +} + +class EditViewMergeMock extends EditViewMerge +{ + function setModule($module) + { + $this->module = $module; + } + + function setCustomData($data) + { + $this->customData = $data; + } + + function setNewData($data) + { + $this->newData = $data; + } + + function getNewData() + { + return $this->newData; + } + + function testMergeTemplateMeta() + { + $this->mergeTemplateMeta(); + } +} + +?> \ No newline at end of file diff --git a/tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/custom/modules/Cases/metadata/editviewdefs.php b/tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/custom/modules/Cases/metadata/editviewdefs.php new file mode 100755 index 00000000..c27727d0 --- /dev/null +++ b/tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/custom/modules/Cases/metadata/editviewdefs.php @@ -0,0 +1,184 @@ + + array ( + 'templateMeta' => + array ( + 'maxColumns' => '2', + 'widths' => + array ( + 0 => + array ( + 'label' => '10', + 'field' => '30', + ), + 1 => + array ( + 'label' => '10', + 'field' => '30', + ), + ), + 'form' => + array ( + 'footerTpl' => 'custom/modules/Cases/tpls/EditViewFooter.tpl', + ), + 'useTabs' => false, + ), + 'panels' => + array ( + 'lbl_case_information' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'case_number', + 'type' => 'readonly', + ), + ), + 1 => + array ( + 0 => + array ( + 'name' => 'priority', + 'comment' => 'The priority of the case', + 'label' => 'LBL_PRIORITY', + ), + 1 => + array ( + 'name' => 'ticket_due_date_c', + 'label' => 'LBL_TICKET_DUE_DATE', + ), + ), + 2 => + array ( + 0 => + array ( + 'name' => 'status', + 'comment' => 'The status of the case', + 'label' => 'LBL_STATUS', + ), + 1 => + array ( + 'name' => 'account_name', + 'comment' => 'The name of the account represented by the account_id field', + 'label' => 'LBL_ACCOUNT_NAME', + ), + ), + 3 => + array ( + 0 => + array ( + 'name' => 'type', + 'comment' => 'The type of issue (ex: issue, feature)', + 'label' => 'LBL_TYPE', + ), + ), + 4 => + array ( + 0 => + array ( + 'name' => 'name', + 'displayParams' => + array ( + 'size' => 75, + ), + ), + ), + 5 => + array ( + 0 => + array ( + 'name' => 'description', + 'nl2br' => true, + ), + ), + 6 => + array ( + 0 => + array ( + 'name' => 'resolution', + 'nl2br' => true, + ), + ), + 7 => + array ( + 0 => + array ( + 'name' => 'portal_viewable', + 'customLabel' => '{if ($PORTAL_ENABLED)}{sugar_translate label="LBL_SHOW_IN_PORTAL" module="Cases"}{/if}', + 'customCode' => ' {if ($PORTAL_ENABLED)} + {if $fields.portal_viewable.value == "1"} + {assign var="checked" value="CHECKED"} + {else} + {assign var="checked" value=""} + {/if} + + + {/if}', + ), + 1 => + array ( + 'name' => 'tick_email_on_close_c', + 'label' => 'LBL_TICK_EMAIL_ON_CLOSE', + ), + ), + ), + 'LBL_PANEL_ASSIGNMENT' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'assigned_user_name', + 'label' => 'LBL_ASSIGNED_TO_NAME', + ), + 1 => + array ( + 'name' => 'team_name', + 'displayParams' => + array ( + 'required' => true, + ), + ), + ), + ), + 'lbl_editview_panel1' => + array ( + 0 => + array ( + 0 => + array ( + 'name' => 'contact_c', + 'studio' => 'visible', + 'label' => 'LBL_CONTACT_C', + 'displayParams' => + array ( + 'call_back_function' => 'setAccountInfo', + ), + ), + 1 => '', + ), + 1 => + array ( + 0 => + array ( + 'name' => 'account_address_street', + 'hideLabel' => true, + 'type' => 'address', + 'displayParams' => + array ( + 'key' => 'account', + 'rows' => 2, + 'cols' => 30, + 'maxlength' => 150, + ), + ), + 1 => '', + ), + ), + ), + ), +); +?> \ No newline at end of file diff --git a/tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/oob/modules/Cases/metadata/editviewdefs.php b/tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/oob/modules/Cases/metadata/editviewdefs.php new file mode 100755 index 00000000..2b21afb9 --- /dev/null +++ b/tests/modules/UpgradeWizard/SugarMerge/od_metadata_files/610/oob/modules/Cases/metadata/editviewdefs.php @@ -0,0 +1,100 @@ + array('maxColumns' => '2', + 'widths' => array( + array('label' => '10', 'field' => '30'), + array('label' => '10', 'field' => '30') + ), + ), + 'panels' => array ( + + 'lbl_case_information' => + array( + array ( + array('name'=>'case_number', 'type'=>'readonly') , + ), + + array ( + 'priority', + ), + + array ( + 'status', + 'account_name', + ), + + array ( + 'type', + ), + array ( + array ( + 'name' => 'name', + 'displayParams' => array ('size'=>75) + ), + ), + + array ( + + array ( + 'name' => 'description', + 'nl2br' => true, + ), + ), + + array ( + + array ( + 'name' => 'resolution', + 'nl2br' => true, + ), + ), + + ), + + 'LBL_PANEL_ASSIGNMENT' => + array( + array ( + 'assigned_user_name', + array('name'=>'team_name', 'displayParams'=>array('required'=>true)), + ), + ), +), + + +); +?> \ No newline at end of file diff --git a/tests/modules/UpgradeWizard/UWUtilsTest.php b/tests/modules/UpgradeWizard/UWUtilsTest.php index 8ec30341..f6b4316d 100755 --- a/tests/modules/UpgradeWizard/UWUtilsTest.php +++ b/tests/modules/UpgradeWizard/UWUtilsTest.php @@ -81,6 +81,11 @@ function setUp() function tearDown() { global $db, $current_user; + + if($db->dbType != 'mysql') return; // No need to clean up if we skipped the test to begin with + + + SugarTestMeetingUtilities::removeAllCreatedMeetings(); SugarTestCallUtilities::removeAllCreatedCalls(); diff --git a/tests/service/RESTAPI4Test.php b/tests/service/RESTAPI4Test.php index 540ecfd3..3f28728f 100755 --- a/tests/service/RESTAPI4Test.php +++ b/tests/service/RESTAPI4Test.php @@ -82,8 +82,8 @@ class RESTAPI4Test extends Sugar_PHPUnit_Framework_TestCase public function tearDown() { - $GLOBALS['db']->query("DELETE FROM acl_roles WHERE id IN ( SELECT role_id FROM acl_user_roles WHERE user_id = '{$GLOBALS['current_user']->id}' )"); - $GLOBALS['db']->query("DELETE FROM acl_user_roles WHERE user_id = '{$GLOBALS['current_user']->id}'"); + $GLOBALS['db']->query("DELETE FROM acl_roles WHERE id IN ( SELECT role_id FROM acl_roles_users WHERE user_id = '{$GLOBALS['current_user']->id}' )"); + $GLOBALS['db']->query("DELETE FROM acl_roles_users WHERE user_id = '{$GLOBALS['current_user']->id}'"); if(isset($GLOBALS['listViewDefs'])) unset($GLOBALS['listViewDefs']); if(isset($GLOBALS['viewdefs'])) unset($GLOBALS['viewdefs']); diff --git a/themes/default/css/print.css b/themes/default/css/print.css index 4c6503ee..54b6e483 100644 --- a/themes/default/css/print.css +++ b/themes/default/css/print.css @@ -39,6 +39,9 @@ .listViewPaginationTdS1, .listViewButtons, .search_form , .tablist, .utilsLink, .button, .tabForm{ display: none; } +.doNotPrint { + display: none !important; +} div #content { margin-left: 2em; diff --git a/themes/default/images/plug-in_Lotus.png b/themes/default/images/plug-in_Lotus.png new file mode 100644 index 0000000000000000000000000000000000000000..9160b21e946e660280d81e06aa1ddb49541310bf GIT binary patch literal 3522 zcmV;z4L$OSP)OFB?9tL!GyO2VG{y`kWDsZ z-_QQOyWC}?d2F)TgoJ!EC+FOI9`~Hz{e6#f@6AeR6y#@ruQRC%W>iJP!3vpLXOt+_ z6mniBlF8~Yotl<6Ub5R>eZ@5jQ%m`hu~>{GDYs6uq4lvR48fe5+qQ1Yjqg6K|;BBq_q(VKVq%s!tTbW^lm6+dK9|`(uF1-E++s(wr zjDh!)Kfi8NO)ar1bEZ^ERT|@90qdu!Ad137$d#0|@+qh|g_se%rTBT}TCA?)tZ-bA*IR|c{9XGLh+wwd|rmsI}@HoWK z80S|)ZLF|mhD=XzsN+Zcp1P>tQ}dhq=h}uk#z6g20*^zClE+`P!0S~>)LPR(gWgQ_ z9P;2M+kB4WHNze9^b4LCVgL-bWj8I$QoUIm^5EuIpa1LDVF|#$0v?RNA$-jVmDE-Z zSBR17;zqEY3)iwEv2Cm$>U9&~K{bu}s~+B_o4H^}f$UHxFxve<6bFLuEeO6D%s~l* zCuQK!>$6xSbV~upNb$ZJSuHTIA|JF!(c>i~L;HcZ$+_oELIgkPLB?7K-mP?>*iRR0 z|0GWRZ`VmA9;cMcb)kr*;#4d7lyW*0Iz*Sxd`b#^E@jVONm-?fc}tYiKx3hiulXc( zpZSbDj^n~~kNKw3(cm1qQ|+W#s&)%b?ikEEBn|m@#tK}XM4w}`3+TwKd^%mI7tZO7 z^GRQ3Ce8G@i8f=Y5O#Nxr|~m@c9=rl9pnmY=^alog*>+rg*1t!C=89;LvK9ueB#6a z1-5zeWZ<~{g0pQx>e8v{SZO|e;to(N?i908U$%sFrDl?6*PYN(q7N^cT(P0WwysptLiTZsj+x6)z8kOBe-)Nhu>d z0(rF8Z6fkc$q36t43hIfftTE|_{ufn^sR$(I#ZHMAC-Hl33uM9)KHdj9_h*!6P_R^ zcS*avWc$7eQ*PNvPEqlU5qIs`TjXUNlA zh;i5pma#1xMUh-qEQn>|`d%eVBQ3HX&{hB*9qoLfR_dWX>^@nUK-$y%HB4O`3_sx z2d352qxmPuq;H`a>Z?3%72Q+12zkwb^ucFuo`tW)wEMAO_v&U)nE zCCXg}@bKDFiznOJGl-@?LL{F=%8NTFvU=^)vFCCtZaMJSG4x;@1GoH#M4GcmMF0wn zQz($YBN>u}`NX*lfZl;}m^8jO>FT1#x7}LcX}ahyWwnVl3yz`uQ2=v4lkA1 za0!4Vnh`~!MEp)s3Q+ascrDO~chT7u@Biu%V^S-Ic>K!FSs#!=9{&PN77YUod@ffU z0&qsCXW)}k!kwViGuAWDU%Z=^AvfQSgwyyYosN_+2*D^3j3A^TuFE9(> zxFX#LGZv+sf3 zdV@$^0;ho`o53Ux+-W|*Qo`()E+J|@2o~N=)O`)#^&xdZg%?8Avo8ZU*hQ(5BwzB% z;}Sfx9=1%BSOlyCi=xoK=EKlVFf0lc<>SIt01x5HhhSO|4+nDKNDMQHTuo4248ZCu z!;T|{_DGRyZP4`_GA_Yel!e8MqJ7(3&Z37D&4JprgK1z8OB)^p1i&&W)K&(Y z7L}m>3ckVuTU|g`2RkSVG*GX=Is~r_4U_Jj`{484<7W(A_oI`YbJ;4I$Pqk z42+=!Ai;8RnG?Qw79I4I0KeIZx}+OcP4+`^0&Dhigz*|>Tmo~!`$OA3;E+DWTZ zkv|Y}-gBrY; zJNycTc;CckH)Z}@^NJhuass>nt1^}vVy^&UrcGOk94wo@fat-W6FpXopcw&k7)uN} zkt3v$&UGC8*M|br@?Uncy7nLvyQ2Yx*@#A*wj9seIe{AQ86n?$b zfXwJtPB!WH@1od-%_Q;G5#42iilQol_$|hUkJTA^%q)xmJg6!I*Xb!+lUug99u4{w z^h{s=Gw*IoX;WvVEF87)$J&FDeWqgJqi$Q%gM;Z7Z>#V+P^ebuF52bmH(Z&;Myv|wlO3Gjky z3QtLZo=i_M`9kuzl{Q~cwWYwk)-}+$!wz2Z1p#D*`Sg`ac__*gPp;}wP8mFfr=H~A z8f(F!A^#LyNA(J$TVu8qnD1KW3wD}9lBhwU(bdVbZ?C`Fc(Quty_+08CfCnFM!^%W ziyuBPJo{FI75neX+-{#qJTK<`f+r2RNa3>sv}*e25BgOjalDbrM+Cg&#q6HF#+1|T zugdNYSfJJh{=c->?k%UbEEUp-lxOz>pRJF7_Rb&gC|a$*@&_Q wX*H4&Nt6#!V6}9JCvMhU0FVDn$j}h@KbP7q!Cyiy{Qv*}07*qoM6N<$f*YU4;Q#;t literal 0 HcmV?d00001 -- 2.42.0