Rules (with static C# routines, such as PolicyChaining, or C# code that adds nodes to the XML), are working fine on XP but not on 2003 (or working on machine and not another). For example, we have a condition of 1=1, which should always fire, but if a static C# routine is found in the actions, then the rules does not fire.


See Richard Seroter’s blog. There is a registry setting that must be set to allow business rules to call a static C# method.

http://blogs.msdn.com/richardbpi/archive/2005/11/14/492489.aspx

Also note, if you change a C# program, and even re-GAC it, to get the Business Rule Composer to “see” the changes, you have to close and re-open the Business Rule Composer if you are using the test policy feature.

If you download the Policy-Chaining sample for BizTalk, it has an automated way of updating the registry setting. In it’s setup.bat.

@ECHO
@ECHO Setting the StaticSupport registry key to ONE
@REGEDIT /s AddStaticSupport.reg

The AddStaticSupport.reg include the following statements:
REGEDIT4

[HKEY_LOCAL_MACHINESoftwareMicrosoftBusinessRules3.0]
“StaticSupport”=dword:00000001

System.Net.WebException: Unable to connect to remote server System.et.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:80


For me, this was an easy one, IIS was down.

Other ideas:
1) Check app.exe.config and make sure URL is corect
2) Make sure machine name is correct http://xxxxxxxx or http://localhost

BizTalk Server 2006 is not available or configured. Verify BizTalk Server 2006 on server xxxxx using management database BizTalkMgmtDb is accessible and configured with a compatible version.


This frequently occurs in the company I’m working. All development is done on VMWare virtual machines, when the systems guys do a backup of VMWare “LabManager”, the virtual machine are shutdown and then restarted. For some odd reason, after the restart, SQL frequently does not start (even though it is set as “automatic start”.

To solve the problem, go to System Services, and if SQL is not started, then start it.

How to use TextWriter to file.


<pre>
            string strOutFileName = @"c:YourDirYourFile.xml";
   ... assumes you have an xmlDoc somewhere
            System.Xml.XmlTextWriter tw = new XmlTextWriter(strOutFileName, System.Text.Encoding.ASCII);
            xmlDoc.WriteTo(tw);
            //xmlTypedDoc.Document.WriteTo(tw);
            tw.Close();
</pre>

How to initialize an array of objects in C#. Often, we write C# test harnesses to populate some test data based on an object structure (which was ultimately created from an xml structure).



            svcref1.WiringLoanReq req =
                new TMAC.Wiring.UnitTest.CallPublishedOrch.svcref1.WiringLoanReq();
            svcref1.WiringLoanResp resp =
                new TMAC.Wiring.UnitTest.CallPublishedOrch.svcref1.WiringLoanResp();
            svcref1.WiringLoan loan1 =
                new TMAC.Wiring.UnitTest.CallPublishedOrch.svcref1.WiringLoan();
            svcref1.WiringLoan loan2 =
                new TMAC.Wiring.UnitTest.CallPublishedOrch.svcref1.WiringLoan();

            loan1.CadenceLoanId = "0012341234";
            loan1.CadenceLoanId = "0012341235";

            req.WiringLoans = new TMAC.Wiring.UnitTest.CallPublishedOrch.svcref1.WiringLoan[2];
            req.WiringLoans[0] = loan1;
            req.WiringLoans[1] = loan2;

// call the web service
 resp = client.getWiringRequest(req);

How to add an node to an XML Document (via a C# helper that can be called in an expression shape from an orchestration).


First example (uses AppendChild):


[[code]]czozMjE3OlwiCiAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb2N1bWVudCBBZGRFeGNlcHRpb25Ob2RlVG9UTVhNTChYbWxEb2N1bWV7WyYqJl19bnQgVE1YTUxEb2NJbiwgRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgLy8gdGhyZWUgaW1wb3J0IGZpZWxkcyBpbntbJiomXX0gU3lzdGVtLkV4Y2VwdGlvbiBhcmUgZXguTWVzc2FnZSwgZXguU3RhY2tUcmFjZSwgZXguU291cmNlCiAgICAgICAgICAgIC8vIHRoe1smKiZdfWVuIHRoZXJlIGlzIGFuIEV4LklubmVyRXhjZXB0aW9uCgogICAgICAgICAgICBYbWxEb2N1bWVudCB4bWxEb2NOZXdUTVhNTCA9IG57WyYqJl19ZXcgWG1sRG9jdW1lbnQoKTsKICAgICAgICAgICAgeG1sRG9jTmV3VE1YTUwuTG9hZFhtbChUTVhNTERvY0luLk91dGVyWG1sKTsgIHtbJiomXX0vLyBtYWtlIHN1cmUgd2UgZG9uXCd0IHVwZGF0ZSB0aGUgb3JpZ2luYWwgVE1YTUxEb2NJbgoKICAgICAgICAgICAgc3RyaW5nIGVycntbJiomXX1NZXNzYWdlID0gXCJcIjsKICAgICAgICAgICAgc3RyaW5nIGVyclNvdXJjZSA9IFwiXCI7CiAgICAgICAgICAgIHN0cmluZyBlcnJTdGFja3tbJiomXX1UcmFjZSA9IFwiXCI7CiAgICAgICAgICAgIHN0cmluZyB4bWw7CgogICAgICAgICAgICBpZiAoZXguSW5uZXJFeGNlcHRpb24gPT0gbnV7WyYqJl19bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBuZXN0ZWQgZXhjZXB0aW9ucywgZG8gbm90IG51bWJlcntbJiomXX0gdGhlbS4KICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBleC5NZXNzYWdlOwogICAgICAgICAgICAgICAgZXJyU3RhY2tUcmFje1smKiZdfWUgPSBleC5TdGFja1RyYWNlOwogICAgICAgICAgICAgICAgZXJyU291cmNlID0gZXguU291cmNlOwogICAgICAgICAgICB9CiAgICB7WyYqJl19ICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgdGhlIG5lc3RlZCBleHtbJiomXX1jZXB0aW9ucyBhbmQgY29uY2F0ZW5hdGUgdGhlbSBpbnRvIHNpbmdsZSBsb25nIHN0cmluZyB2YXJpYWJsZXMKICAgICAgICAgICAge1smKiZdfSAgICBTeXN0ZW0uRXhjZXB0aW9uIGlubmVyRXggPSBleDsKICAgICAgICAgICAgICAgIGludCBsb29wQ291bnRlciA9IDA7CiAgICB7WyYqJl19ICAgICAgICAgICAgd2hpbGUgKGlubmVyRXggIT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAvL3tbJiomXX0gbnVtYmVyIHRoZSBuZXN0ZWQgZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgICAgIGxvb3BDb3VudGVyKys7CiAgICAgICAgICAge1smKiZdfSAgICAgICAgIHN0cmluZyBzZXBhcmF0b3IgPSBcIlwiOwogICAgICAgICAgICAgICAgICAgIGlmIChsb29wQ291bnRlciAmZ3Q7IDEpCntbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSBcIjtcIjsKCiAgICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IGV7WyYqJl19cnJNZXNzYWdlICsgc2VwYXJhdG9yICsgXCJuICAgICBFeDpcIiArIGxvb3BDb3VudGVyICsgXCIpIFwiICsgaW5uZXJFeC5NZXNzYWdlOwp7WyYqJl19ICAgICAgICAgICAgICAgICAgICBlcnJTdGFja1RyYWNlID0gZXJyU3RhY2tUcmFjZSArIHNlcGFyYXRvciArIFwibiAgICAgRXg6XCIge1smKiZdfSsgbG9vcENvdW50ZXIgKyBcIikgXCIgKyBpbm5lckV4LlN0YWNrVHJhY2U7CiAgICAgICAgICAgICAgICAgICAgZXJyU291cmNlID0gZXtbJiomXX1yclNvdXJjZSArIHNlcGFyYXRvciArIFwibiAgICAgRXg6XCIgKyBsb29wQ291bnRlciArIFwiKSBcIiArIGlubmVyRXguU291cmNlOwogIHtbJiomXX0gICAgICAgICAgICAgICAgICBpbm5lckV4ID0gaW5uZXJFeC5Jbm5lckV4Y2VwdGlvbjsKCiAgICAgICAgICAgICAgICB9CgogICAge1smKiZdfSAgICAgICAgfQoKICAgICAgICAgICAgLy8gQWRkZWQgQ0RBVEEgY2xhdXNlcyBiZWxvdywgYmVjYXVzZSB0aGUgZXJyIGZpZWxkcyB7WyYqJl19bWF5IGhhdmUKICAgICAgICAgICAgLy8gYW1wZXJzYW5kLCBsZXNzLXRoYW4sIGdyZWF0ZXIgdGhhbiwgb3Igb3RoZXIgcHJvYmxlbXtbJiomXX0gY2hhcmFjdGVycyB0aGF0IGNhdXNlIHRoZSB4bWxEb2MuTG9hZCB0byAgZmFpbC4gCiAgICAgICAgICAgIHhtbCA9CiAgICAgICAge1smKiZdfSAgICAgICAgICAgIEBcIiZsdDtleHM6RXhjZXB0aW9ucyB4bWxuczpleHM9XCdodHRwOi8vWW91clNjaGVtYU5hbWVzcGFjZS5FeGNlcHtbJiomXX10aW9uc1wnJmd0O1wiICsKICAgICAgICAgICAgICAgICAgICBcIiZsdDtleDpFeGNlcHRpb24gaW5kZXg9XCcxXCcgaWQ9XCcxXCcgdHlwZT1cJ1wne1smKiZdfSB4bWxuczpleD1cJ2h0dHA6Ly9Zb3VyU2NoZW1hTmFtZXNwYWNlLkV4Y2VwdGlvblwnJmd0O1wiICsKICAgICAgICAgICAgICAgICAgICB7WyYqJl19XCIgICZsdDttZXNzYWdlVGV4dCZndDsmbHQ7IVtDREFUQVtcIiArIGVyck1lc3NhZ2UgKyBcIl1dJmd0OyZsdDsvbWVzc2FnZVRleHQmZ3tbJiomXX10O1wiICsKICAgICAgICAgICAgICAgICAgICBcIiAgJmx0O3NvdXJjZSZndDsmbHQ7IVtDREFUQVtcIiArIGVyclNvdXJjZSArIFwiXV0mZ3tbJiomXX10OyZsdDsvc291cmNlJmd0O1wiICsKICAgICAgICAgICAgICAgICAgICBcIiAgJmx0O3N0YWNrVHJhY2UmZ3Q7Jmx0OyFbQ0RBVEFbXCIge1smKiZdfSsgZXJyU3RhY2tUcmFjZSArIFwiXV0mZ3Q7Jmx0Oy9zdGFja1RyYWNlJmd0O1wiICsKICAgICAgICAgICAgICAgICAgICBcIiZsdDsvZXh7WyYqJl19OkV4Y2VwdGlvbiZndDtcIiArCiAgICAgICAgICAgICAgICAgICAgXCImbHQ7L2V4czpFeGNlcHRpb25zJmd0O1wiOwoKCiAgICAgICAgIHtbJiomXX0gICBYbWxEb2N1bWVudCBleGNlcHRpb25YTUwgPSBuZXcgWG1sRG9jdW1lbnQoKTsKICAgICAgICAgICAgZXhjZXB0aW9uWE1MLkxve1smKiZdfWFkWG1sKHhtbCk7CgoKICAgICAgICAgICAgc3RyaW5nIHN0clhQYXRoUm9vdCA9IFwiLypbbG9jYWwtbmFtZSgpPVwnVE1YTUxcJyBhbmR7WyYqJl19IG5hbWVzcGFjZS11cmkoKT1cJ2h0dHA6Ly9Zb3VyU2NoZW1hTmFtZXNwYWNlLk1haW5TY2hlbWFcJ11cIjsKICAgICAgICAgICAgWG1sTntbJiomXX1vZGUgbm9kZVRNWE1MID0geG1sRG9jTmV3VE1YTUwuU2VsZWN0U2luZ2xlTm9kZShzdHJYUGF0aFJvb3QpOwoKICAgICAgICAgICAge1smKiZdfXN0cmluZyBzdHJFeFhQYXRoUm9vdCA9IFwiLypbbG9jYWwtbmFtZSgpPVwnRXhjZXB0aW9uc1wnIGFuZCBuYW1lc3BhY2UtdXJpKCk9XCdoe1smKiZdfXR0cDovL1lvdXJTY2hlbWFOYW1lc3BhY2UuRXhjZXB0aW9uc1wnXVwiOwogICAgICAgICAgICBYbWxOb2RlIG5vZGVFeGNlcHRpb25zIHtbJiomXX09IGV4Y2VwdGlvblhNTC5TZWxlY3RTaW5nbGVOb2RlKHN0ckV4WFBhdGhSb290KTsKCgogICAgICAgICAgICBub2RlVE1YTUwuQXBwe1smKiZdfWVuZENoaWxkKHhtbERvY05ld1RNWE1MLkltcG9ydE5vZGUobm9kZUV4Y2VwdGlvbnMsIHRydWUpKTsKCiAgICAgICAgICAgIHJldHV7WyYqJl19cm4geG1sRG9jTmV3VE1YTUw7CgogICAgICAgIH0KCgoKXCI7e1smKiZdfQ==[[/code]]


Second example (uses CreateElement)


[[code]]czozNjAxOlwiCgoJLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYSBCdXNpbmVzc1J1bGUgd2hpY2ggcGFzc2VzIGEgVHlwZWRYbWx7WyYqJl19RG9jdW1lbnQKCS8vIGluc3RlYWQgb2YgYSBub3JtYWwgWG1sRG9jdW1lbnQKCXB1YmxpYyBzdGF0aWMgdm9pZCBBZGRJdGluZXJhcntbJiomXX15U3RlcChUeXBlZFhtbERvY3VtZW50IHR4ZCwgc3RyaW5nIHN0ZXBOYW1lLCBzdHJpbmcgYWN0aXZpdHlQb2xpY3kpCiAgICAgICAge1smKiZdfXsKCiAgICAgICAgICAgICAgICAgIC8vIGNhbiB3ZSBmaW5kIHRoZSBYUGF0aCAgaW5kaWNhdGUgZD8KICAgICAgICAgICAgICAgICB7WyYqJl19IHN0cmluZyBzdHJYUGF0aFJvb3QgPSBcIi8vKltsb2NhbC1uYW1lKCk9XCdJdGluZXJhcnlTdGVwc1wnXVwiOwogICAgICAgICAgICAgICB7WyYqJl19ICAgWG1sTm9kZSBub2RlID0gTG9jYXRlWFBhdGgodHhkLCBzdHJYUGF0aFJvb3QpOwogICAgICAgICAgICAgICAgICBpZiAobnVsbHtbJiomXX0gPT0gbm9kZSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcIkFkZHtbJiomXX1JdGluZXJhcnlTdGVwOiBYUGF0aCBkaWQgbm90IHJldHVybiBhIHZhbGlkIG5vZGUsIFhQYXRoPVwiICsKICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgc3RyWFBhdGhSb290ICsgXCIgIFhNTD1cIiArIHR4ZC5Eb2N1bWVudC5PdXRlclhtbCk7CiAgICAgICAgICAgICAgICB7WyYqJl19ICB9OwoKCiAgICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSB0aGUgcm9vdCBub2RlIGZvciB0aGUgZG9jdW1lbnQKICAgICAgIHtbJiomXX0gICAgICAgICAgIC8vIGlmIHRoZSBYUGF0aCBzZWxlY3RzIHRoZSBUWEQsIGl0IHdpbGwgaGF2ZSBubyByb290IGlmIGl0IGlzIGFue1smKiZdfSBYbWxEb2N1bWVudAogICAgICAgICAgICAgICAgICAvLyBpbiB0aGF0IGNhc2UsIHNpbXBseSB1c2UgdGhlIGRvY3VtZW50IGZyb217WyYqJl19IHRoZSBUWEQKICAgICAgICAgICAgICAgICAgWG1sRG9jdW1lbnQgcm9vdCA9IG5vZGUuT3duZXJEb2N1bWVudDsKICAgICAgICAgIHtbJiomXX0gICAgICAgIGlmIChudWxsID09IHJvb3QpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYge1smKiZdfXRoZSBYUGF0aCBzZWxlY3RzIHRoZSBUWEQsIGl0IG1heQogICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBmaXggYWNjb3JkaW57WyYqJl19Z2x5CiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgPSB0eGQuRG9jdW1lbnQgYXMgWG1sRG9jdW1lbnQ7CiAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICBpZiAobnVsbCA9PSByb290KSByZXR1cm47CiAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAge1smKiZdfSAgLy8gY3JlYXRlIGEgbmV3IG5vZGUgYW5kIGFkZCBpdCBpbgogICAgICAgICAgICAgICAgICBzdHJpbmcgbm9kZU5hbWUgPSBcIkl0e1smKiZdfWluZXJhcnlTdGVwXCI7CiAgICAgICAgICAgICAgICAgIFhtbEVsZW1lbnQgbmV3Tm9kZSA9IHJvb3QuQ3JlYXRlRWxlbWVudChub2Rle1smKiZdfU5hbWUpOwogICAgICAgICAgICAgICAgICBub2RlLkFwcGVuZENoaWxkKG5ld05vZGUpOwoKICAgICAgICAgICAgICAgICAgLy8gTm97WyYqJl19dCBzdXJlIHdoeSBJbXBvcnROb2RlIG5vdCBhdmFpbGFibGUuIFNlZW1zIGxpa2UgaXQgd291bGQgYmUgZWFzaWVyCiAgICAgICAgIHtbJiomXX0gICAgICAgICAvL25vZGUuQXBwZW5kQ2hpbGQodHhkLkRvY3VtZW50LkltcG9ydE5vZGUobm9kZUl0aW5lcmFyeVN0ZXAsIHRydWUpe1smKiZdfSk7CgogICAgICAgICAgICAgICAgICAvL3N0clhQYXRoUm9vdCA9IFwiLypbbG9jYWwtbmFtZSgpPVwnSGVhZGVyXCddLypbbG9jYWwtbmF7WyYqJl19bWUoKT1cJ0l0aW5lcmFyeVwnXS8qW2xvY2FsLW5hbWUoKT1cJ0l0aW5lcmFyeVN0ZXBcJ11cIjsKICAgICAgICAgICAgICAgICAgc3RyWFBhe1smKiZdfXRoUm9vdCA9IFwiLy8qW2xvY2FsLW5hbWUoKT1cJ0l0aW5lcmFyeVN0ZXBcJ11cIjsKICAgICAgICAgICAgICAgICAgbm9kZSA9IExvY2F0e1smKiZdfWVYUGF0aCh0eGQsIHN0clhQYXRoUm9vdCk7CiAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IG5vZGUpCiAgICAgICAgICAgICB7WyYqJl19ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFwiQWRkSXRpbmVyYXJ5SXRlbTogWFBhdGggZGl7WyYqJl19ZCBub3QgcmV0dXJuIGEgdmFsaWQgbm9kZSwgWFBhdGg9XCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHN0clhQYXRoUm9vdCB7WyYqJl19KyBcIiAgWE1MPVwiICsgdHhkLkRvY3VtZW50Lk91dGVyWG1sKTsKICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAge1smKiZdfSBYbWxFbGVtZW50IG5ld1N1Yk5vZGU7CgogICAgICAgICAgICAgICAgICBub2RlTmFtZSA9IFwibmFtZVwiOwogICAgICAgICAgICAgIHtbJiomXX0gICAgbmV3U3ViTm9kZSA9IHJvb3QuQ3JlYXRlRWxlbWVudChub2RlTmFtZSk7CiAgICAgICAgICAgICAgICAgIG5ld1N1Yk5vZGUue1smKiZdfUlubmVyVGV4dCA9IHN0ZXBOYW1lOwogICAgICAgICAgICAgICAgICBuZXdOb2RlLkFwcGVuZENoaWxkKG5ld1N1Yk5vZGUpOwoKICB7WyYqJl19ICAgICAgICAgICAgICAgIG5vZGVOYW1lID0gXCJzdGF0dXNcIjsKICAgICAgICAgICAgICAgICAgbmV3U3ViTm9kZSA9IHJvb3QuQ3Jle1smKiZdfWF0ZUVsZW1lbnQobm9kZU5hbWUpOwogICAgICAgICAgICAgICAgICBuZXdTdWJOb2RlLklubmVyVGV4dCA9IFwiUEVORElOR1wiOwogIHtbJiomXX0gICAgICAgICAgICAgICAgbmV3Tm9kZS5BcHBlbmRDaGlsZChuZXdTdWJOb2RlKTsKCiAgICAgICAgICAgICAgICAgIG5vZGVOYW1le1smKiZdfSA9IFwiZXJyb3JUeXBlXCI7CiAgICAgICAgICAgICAgICAgIG5ld1N1Yk5vZGUgPSByb290LkNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpO3tbJiomXX0KICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgdmFsdWUgdG8gZW1wdHktc3RyaW5nIChubyBuZWVkIHRvIHNldCBJbm5lclRleHQpe1smKiZdfQogICAgICAgICAgICAgICAgICBuZXdOb2RlLkFwcGVuZENoaWxkKG5ld1N1Yk5vZGUpOwoKICAgICAgICAgICAgICAgICAgbm9kZU57WyYqJl19YW1lID0gXCJhY3Rpdml0eVBvbGljeVwiOwogICAgICAgICAgICAgICAgICBuZXdTdWJOb2RlID0gcm9vdC5DcmVhdGVFbGVtZW50KG5ve1smKiZdfWRlTmFtZSk7CiAgICAgICAgICAgICAgICAgIG5ld1N1Yk5vZGUuSW5uZXJUZXh0ID0gYWN0aXZpdHlQb2xpY3k7CiAgICAgICAgICB7WyYqJl19ICAgICAgICBuZXdOb2RlLkFwcGVuZENoaWxkKG5ld1N1Yk5vZGUpOwoKCiAgICAgICAgfQoKICAgICAgICBpbnRlcm5hbCBzdGF0aXtbJiomXX1jIFhtbE5vZGUgTG9jYXRlWFBhdGgoVHlwZWRYbWxEb2N1bWVudCB0eGQsIHN0cmluZyB4UGF0aCkKICAgICAgICB7CiAgICAgICAge1smKiZdfSAgICAvLyBkb2VzIHRoZSBUWEQgY29udGFpbiBhIG5vZGU/CiAgICAgICAgICAgIFhtbE5vZGUgcGFyZW50ID0gdHhkLkRvY3VtZW57WyYqJl19dDsKICAgICAgICAgICAgaWYgKG51bGwgPT0gcGFyZW50KSByZXR1cm4gbnVsbDsKCiAgICAgICAgICAgIC8vIGlzIHRoZXJlIGFuIHtbJiomXX1YUGF0aCBzcGVjaWZpZWQ/IGlmIG5vdCwgcmV0dXJuIHRoZSBwYXJlbnQKICAgICAgICAgICAgaWYgKCh4UGF0aCA9PSBudWxsKSB8e1smKiZdfXwgKHhQYXRoID09IHN0cmluZy5FbXB0eSkpIHJldHVybiBwYXJlbnQ7CgogICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IG57WyYqJl19b2RlIHRoYXQgdGhlIFhQYXRoIHBvaW50cyB0bwogICAgICAgICAgICByZXR1cm4gcGFyZW50LlNlbGVjdFNpbmdsZU5vZGUoeFBhdHtbJiomXX1oLCB0eGQuTmFtZXNwYWNlTWFuYWdlcik7CiAgICAgICAgfQoKXCI7e1smKiZdfQ==[[/code]]

>