From stephen.masters at me.com Tue Mar 19 13:14:22 2013 Content-Type: multipart/mixed; boundary="===============7717349336815213874==" MIME-Version: 1.0 From: Stephen Masters To: rules-users at lists.jboss.org Subject: Re: [rules-users] API for reading and writing rules Date: Tue, 19 Mar 2013 17:14:04 +0000 Message-ID: <7D444C58-A739-4A4F-AC54-4CC8DD35B5A4@me.com> In-Reply-To: CAD44pJCfrQJbKqWkNkd-bikyOP3Fis-twx8BkbC_RdhHsfBzdQ@mail.gmail.com --===============7717349336815213874== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Obviously I don't know what your rules and model look like, but it's worth = considering. The DSL templates are designed to be parsed relatively easily,= with a single clause per line, so although they are not always that readab= le (if they're generating a lot of DRL code), they do the job of providing = a template reasonably well. My number one tip working with them is to create a simple unit test class w= hich creates a knowledge base from the DSL and a simple example DSRL. That = way the unit test works as a compiler for your DSL/DSRL and lets you know w= hen you mess up. You can of course build more complex tests, but it's alway= s good to have that minimal test there to confirm that things are at least = compiling. If you're able to provide an example (perhaps slightly anonymised) DRL rule= that your application could be generating, then I'd be happy to have a go = at knocking up a simple straw man DSL which could generate it. It may not b= e quite what you need, but it could be a useful starting point. Steve On 19 Mar 2013, at 16:34, kurrent93 wrote: > Thanks Steve > = > Yes that sounds like a way forward. I'll do some research on creating a d= sl. > = > Any pointers are appreciated. > = > Cheers > = > = > On Tue, Mar 19, 2013 at 5:20 PM, Stephen Masters [via Drools] <[hidden em= ail]> wrote: > If you are going to generate DRL, you need to parse your model into a muc= h more general language and parse that language back into your model. The A= PIs don't save you from doing this, they just mean that you interact with a= n API to generate the code, and get some validation, rather than just outpu= tting strings. Additionally, I suspect that you would need to use APIs that= are not really intended for public consumption and may change any time you= update Drools. > = > A DSL defines a template for your own language, for which you define mapp= ings to DRL. You can write DSLR code using that DSL syntax, instead of DRL.= Given that you write the DSL yourself, it should be specific to your requi= rements and relatively simple to generate in many cases (depends on your mo= del of course). Additionally, given that you would be using it as an interm= ediate language, you could write a DSL to be parsed easily, rather than the= usual natural language style. > = > So your code just needs to generate and read your simplified language. Dr= ools deals with parsing your DSLR code into rules. And you have your own st= able language. i.e. You can update Drools with minimal impact to your appli= cation. > = > It depends mostly on how flexible your rules generation needs to be. If t= he customers will be defining values to be dropped into relatively fixed ru= le structures, then doing this could be pretty simple. > = > Steve > = > = > On 19 Mar 2013, at 15:54, kurrent93 <[hidden email]> wrote: > = >> thanks Stephen >> = >> My knowledge of DSLs is very limited. But isnt the problem still parsing= in the DRL into the DSL? I dont really understand how a DSL helps - but th= at is probably due to my lack of knowledge here. >> = >> = >> On Tue, Mar 19, 2013 at 4:41 PM, Stephen Masters [via Drools] <[hidden email]> wrote: >> Depending on your model, it may be better to create a DSL as an intermed= iate language. That way you have a simplified language, which you control, = to parse in and out, which could be tuned to your own domain model. >> = >> Steve >> = >> = >> On 19 Mar 2013, at 14:36, kurrent93 <[hidden email]> wrote: >> = >>> HI David >>> = >>> Yes we are also looking into rule templates. >>> = >>> We have come up with - what we believe - is a very natural, intuitive a= nd visually appealing way to author rules. And it is tailored for our speci= fic domain. = >>> = >>> One significant aspect of our work is that we are present drools author= ing to end users - customers - rather than business users. Hence the import= ance of crafting a specialized UI, rather than the generic UI of Guvnor. = >>> = >>> And FYI - are also including in the design some UI elements, for a futu= re version, that will use Drools Chance features. = >>> = >>> Can you point me to documentation - and ideally - samples around using = APIs for the descriptor level? = >>> = >>> Thanks >>> = >>> = >>> = >>> = >>> On Tue, Mar 19, 2013 at 3:11 PM, Davide Sottara [via Drools] <x-msg://398/user/SendEmail.jtp?type=3Dnode&node=3D= 4022881&i=3D0" target=3D"_top" rel=3D"nofollow" link=3D"external">[hidd= en email]> wrote: >>> As a RETE network is being created, DRL Rules are parsed into an intern= al "descriptor" structure (a high level AST) >>> and then compiled into a RETE. = >>> = >>> There are "APIs" to create rules at the descriptor level: this can then= be "dumped" back into DRL. >>> To work at the DRL level directly, it's common to use parametric "templ= ates". >>> = >>> If your internal (meta)model is object oriented, you could consider usi= ng DRL rules to write the translators :) >>> = >>> Davide >>> = >>> p.s. could you provide some more information about your use case? I'm d= oing some research on rule authoring >>> environments right now. Thanks! >>> = >>> = >>> = >>> = >>> On 03/19/2013 09:54 AM, Michael Anstis wrote: >>>> Rules are DRL that is a String. = >>>> = >>>> Where and how you choose to store the String is up to you. >>>> = >>>> Please try to explain what you want to achieve a little more. >>>> = >>>> On 19 March 2013 12:49, kurrent93 <[hidden email]> wrote: >>>> HI all >>>> = >>>> Is there any samples or documentation for reading and writing of rules? >>>> = >>>> The user case is we are trying to build a custom Rule Editor, and thus= would >>>> like to write and read rules to/from our beans. >>>> = >>>> Thanks >>>> = >>>> = >>>> = >>>> -- >>>> View this message in context: http://drools.46999.n3.nabble.com/API-fo= r-reading-and-writing-rules-tp4022874.html >>>> Sent from the Drools: User forum mailing list archive at Nab= ble.com. >>>> _______________________________________________ >>>> rules-users mailing list >>>> [hidden email] >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> = >>>> = >>>> = >>>> _______________________________________________ >>>> rules-users mailing list >>>> [hidden email] >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>> = >>> = >>> _______________________________________________ = >>> rules-users mailing list = >>> [hidden email] = >>> https://lists.jboss.org/mailman/listinfo/rules-users = >>> = >>> If you reply to this email, your message will be added to the discussio= n below: >>> http://drools.46999.n3.nabble.com/API-for-reading-and-writing-rules-tp4= 022874p4022878.html >>> To unsubscribe from API for reading and writing rules, x-msg://398/" target=3D"_blank" rel=3D"nofollow" link= =3D"external">click here. >>> NAML >>> = >>> = >>> View this message in context: Re: [rules-users] API for reading and wri= ting rules >>> = >>> Sent from the Drools: User forum mailing list archive at Nabble.com. >>> _______________________________________________ >>> rules-users mailing list >>> [hidden email] >>> https://lists.jboss.org/mailman/listinfo/rules-users >> = >> = >> = >> _______________________________________________ = >> rules-users mailing list = >> [hidden email] = >> https://lists.jboss.org/mailman/listinfo/rules-users = >> = >> If you reply to this email, your message will be added to the discussion= below: >> http://drools.46999.n3.nabble.com/API-for-reading-and-writing-rules-tp40= 22874p4022885.html >> To unsubscribe from API for reading and writing rules, click here. >> NAML >> = >> = >> View this message in context: Re: [rules-users] API for reading and writ= ing rules >> Sent from the Drools: User forum mailing list archive at Nabble.com. >> _______________________________________________ >> rules-users mailing list >> [hidden email] >> https://lists.jboss.org/mailman/listinfo/rules-users > = > = > = > _______________________________________________ = > rules-users mailing list = > [hidden email] = > https://lists.jboss.org/mailman/listinfo/rules-users = > = > If you reply to this email, your message will be added to the discussion = below: > http://drools.46999.n3.nabble.com/API-for-reading-and-writing-rules-tp402= 2874p4022887.html > To unsubscribe from API for reading and writing rules, click here. > NAML > = > = > View this message in context: Re: [rules-users] API for reading and writi= ng rules > Sent from the Drools: User forum mailing list archive at Nabble.com. > _______________________________________________ > rules-users mailing list > rules-users(a)lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users --===============7717349336815213874== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0 L2h0bWwgY2hhcnNldD11cy1hc2NpaSI+PC9oZWFkPjxib2R5IHN0eWxlPSJ3b3JkLXdyYXA6IGJy ZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJyZWFrOiBh ZnRlci13aGl0ZS1zcGFjZTsgIj48ZGl2Pk9idmlvdXNseSBJIGRvbid0IGtub3cgd2hhdCB5b3Vy IHJ1bGVzIGFuZCBtb2RlbCBsb29rIGxpa2UsIGJ1dCBpdCdzIHdvcnRoIGNvbnNpZGVyaW5nLiBU aGUgRFNMIHRlbXBsYXRlcyBhcmUgZGVzaWduZWQgdG8gYmUgcGFyc2VkIHJlbGF0aXZlbHkgZWFz aWx5LCB3aXRoIGEgc2luZ2xlIGNsYXVzZSBwZXIgbGluZSwgc28gYWx0aG91Z2ggdGhleSBhcmUg bm90IGFsd2F5cyB0aGF0IHJlYWRhYmxlIChpZiB0aGV5J3JlIGdlbmVyYXRpbmcgYSBsb3Qgb2Yg RFJMIGNvZGUpLCB0aGV5IGRvIHRoZSBqb2Igb2YgcHJvdmlkaW5nIGEgdGVtcGxhdGUgcmVhc29u YWJseSB3ZWxsLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+TXkgbnVtYmVyIG9uZSB0aXAgd29y a2luZyB3aXRoIHRoZW0gaXMgdG8gY3JlYXRlIGEgc2ltcGxlIHVuaXQgdGVzdCBjbGFzcyB3aGlj aCBjcmVhdGVzIGEga25vd2xlZGdlIGJhc2UgZnJvbSB0aGUgRFNMIGFuZCBhIHNpbXBsZSBleGFt cGxlIERTUkwuIFRoYXQgd2F5IHRoZSB1bml0IHRlc3Qgd29ya3MgYXMgYSBjb21waWxlciBmb3Ig eW91ciBEU0wvRFNSTCBhbmQgbGV0cyB5b3Uga25vdyB3aGVuIHlvdSBtZXNzIHVwLiBZb3UgY2Fu IG9mIGNvdXJzZSBidWlsZCBtb3JlIGNvbXBsZXggdGVzdHMsIGJ1dCBpdCdzIGFsd2F5cyBnb29k IHRvIGhhdmUgdGhhdCBtaW5pbWFsIHRlc3QgdGhlcmUgdG8gY29uZmlybSB0aGF0IHRoaW5ncyBh cmUgYXQgbGVhc3QgY29tcGlsaW5nLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SWYgeW91J3Jl IGFibGUgdG8gcHJvdmlkZSBhbiBleGFtcGxlIChwZXJoYXBzIHNsaWdodGx5IGFub255bWlzZWQp IERSTCBydWxlIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBjb3VsZCBiZSBnZW5lcmF0aW5nLCB0aGVu IEknZCBiZSBoYXBweSB0byBoYXZlIGEgZ28gYXQga25vY2tpbmcgdXAgYSBzaW1wbGUgc3RyYXcg bWFuIERTTCB3aGljaCBjb3VsZCBnZW5lcmF0ZSBpdC4gSXQgbWF5IG5vdCBiZSBxdWl0ZSB3aGF0 IHlvdSBuZWVkLCBidXQgaXQgY291bGQgYmUgYSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQuPC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj5TdGV2ZTwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxicj48ZGl2Pjxk aXY+T24gMTkgTWFyIDIwMTMsIGF0IDE2OjM0LCBrdXJyZW50OTMgJmx0OzxhIGhyZWY9Im1haWx0 bzprdXJyZW50OTNAZ21haWwuY29tIj5rdXJyZW50OTNAZ21haWwuY29tPC9hPiZndDsgd3JvdGU6 PC9kaXY+PGJyIGNsYXNzPSJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIj48YmxvY2txdW90ZSB0 eXBlPSJjaXRlIj48ZGl2IGRpcj0ibHRyIj5UaGFua3MgU3RldmU8ZGl2Pjxicj48L2Rpdj48ZGl2 IHN0eWxlPSIiPlllcyB0aGF0IHNvdW5kcyBsaWtlIGEgd2F5IGZvcndhcmQuIEknbGwgZG8gc29t ZSByZXNlYXJjaCBvbiBjcmVhdGluZyBhIGRzbC48L2Rpdj48ZGl2IHN0eWxlPSIiPjxicj48L2Rp dj48ZGl2IHN0eWxlPSIiPkFueSBwb2ludGVycyBhcmUgYXBwcmVjaWF0ZWQuPC9kaXY+PGRpdiBz dHlsZT0iIj48YnI+PC9kaXY+CjxkaXYgc3R5bGU9IiI+Q2hlZXJzPC9kaXY+PC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiPjxicj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIFR1 ZSwgTWFyIDE5LCAyMDEzIGF0IDU6MjAgUE0sIFN0ZXBoZW4gTWFzdGVycyBbdmlhIERyb29sc10g PHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJ4LW1zZzovLzQzNy91c2VyL1NlbmRFbWFpbC5q dHA/dHlwZT1ub2RlJmFtcDtub2RlPTQwMjI4ODgmYW1wO2k9MCIgdGFyZ2V0PSJfdG9wIiByZWw9 Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCI+W2hpZGRlbiBlbWFpbF08L2E+Jmd0Ozwvc3Bhbj4g d3JvdGU6PGJyPgo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MnB4IHNvbGlkICNDQ0ND Q0M7cGFkZGluZzowIDFlbSIgY2xhc3M9ImdtYWlsX3F1b3RlIj4KCgk8ZGl2PklmIHlvdSBhcmUg Z29pbmcgdG8gZ2VuZXJhdGUgRFJMLCB5b3UgbmVlZCB0byBwYXJzZSB5b3VyIG1vZGVsIGludG8g YSBtdWNoIG1vcmUgZ2VuZXJhbCBsYW5ndWFnZSBhbmQgcGFyc2UgdGhhdCBsYW5ndWFnZSBiYWNr IGludG8geW91ciBtb2RlbC4gVGhlIEFQSXMgZG9uJ3Qgc2F2ZSB5b3UgZnJvbSBkb2luZyB0aGlz LCB0aGV5IGp1c3QgbWVhbiB0aGF0IHlvdSBpbnRlcmFjdCB3aXRoIGFuIEFQSSB0byBnZW5lcmF0 ZSB0aGUgY29kZSwgYW5kIGdldCBzb21lIHZhbGlkYXRpb24sIHJhdGhlciB0aGFuIGp1c3Qgb3V0 cHV0dGluZyBzdHJpbmdzLiBBZGRpdGlvbmFsbHksIEkgc3VzcGVjdCB0aGF0IHlvdSB3b3VsZCBu ZWVkIHRvIHVzZSBBUElzIHRoYXQgYXJlIG5vdCByZWFsbHkgaW50ZW5kZWQgZm9yIHB1YmxpYyBj b25zdW1wdGlvbiBhbmQgbWF5IGNoYW5nZSBhbnkgdGltZSB5b3UgdXBkYXRlIERyb29scy48L2Rp dj4KPGRpdj48YnI+PC9kaXY+PGRpdj5BIERTTCBkZWZpbmVzIGEgdGVtcGxhdGUgZm9yIHlvdXIg b3duIGxhbmd1YWdlLCBmb3Igd2hpY2ggeW91IGRlZmluZSBtYXBwaW5ncyB0byBEUkwuIFlvdSBj YW4gd3JpdGUgRFNMUiBjb2RlIHVzaW5nIHRoYXQgRFNMIHN5bnRheCwgaW5zdGVhZCBvZiBEUkwu IEdpdmVuIHRoYXQgeW91IHdyaXRlIHRoZSBEU0wgeW91cnNlbGYsIGl0IHNob3VsZCBiZSBzcGVj aWZpYyB0byB5b3VyIHJlcXVpcmVtZW50cyBhbmQgcmVsYXRpdmVseSBzaW1wbGUgdG8gZ2VuZXJh dGUgaW4gbWFueSBjYXNlcyAoZGVwZW5kcyBvbiB5b3VyIG1vZGVsIG9mIGNvdXJzZSkuIEFkZGl0 aW9uYWxseSwgZ2l2ZW4gdGhhdCB5b3Ugd291bGQgYmUgdXNpbmcgaXQgYXMgYW4gaW50ZXJtZWRp YXRlIGxhbmd1YWdlLCB5b3UgY291bGQgd3JpdGUgYSBEU0wgdG8gYmUgcGFyc2VkIGVhc2lseSwg cmF0aGVyIHRoYW4gdGhlIHVzdWFsIG5hdHVyYWwgbGFuZ3VhZ2Ugc3R5bGUuPC9kaXY+CjxkaXY+ PGJyPjwvZGl2PjxkaXY+U28geW91ciBjb2RlIGp1c3QgbmVlZHMgdG8gZ2VuZXJhdGUgYW5kIHJl YWQgeW91ciBzaW1wbGlmaWVkIGxhbmd1YWdlLiBEcm9vbHMgZGVhbHMgd2l0aCBwYXJzaW5nIHlv dXIgRFNMUiBjb2RlIGludG8gcnVsZXMuJm5ic3A7QW5kIHlvdSBoYXZlIHlvdXIgb3duIHN0YWJs ZSBsYW5ndWFnZS4gaS5lLiBZb3UgY2FuIHVwZGF0ZSBEcm9vbHMgd2l0aCBtaW5pbWFsIGltcGFj dCB0byB5b3VyIGFwcGxpY2F0aW9uLjwvZGl2Pgo8ZGl2Pjxicj48L2Rpdj48ZGl2Pkl0IGRlcGVu ZHMgbW9zdGx5IG9uIGhvdyBmbGV4aWJsZSB5b3VyIHJ1bGVzIGdlbmVyYXRpb24gbmVlZHMgdG8g YmUuIElmIHRoZSBjdXN0b21lcnMgd2lsbCBiZSBkZWZpbmluZyB2YWx1ZXMgdG8gYmUgZHJvcHBl ZCBpbnRvIHJlbGF0aXZlbHkgZml4ZWQgcnVsZSBzdHJ1Y3R1cmVzLCB0aGVuIGRvaW5nIHRoaXMg Y291bGQgYmUgcHJldHR5IHNpbXBsZS48L2Rpdj4KPGRpdj48YnI+PC9kaXY+PGRpdj5TdGV2ZTwv ZGl2PjxkaXY+PGJyPjwvZGl2Pjxicj48ZGl2PjxkaXYgY2xhc3M9ImltIj48ZGl2Pk9uIDE5IE1h ciAyMDEzLCBhdCAxNTo1NCwga3VycmVudDkzICZsdDs8YSBocmVmPSJodHRwOi8vdXNlci9TZW5k RW1haWwuanRwP3R5cGU9bm9kZSZhbXA7bm9kZT00MDIyODg3JmFtcDtpPTAiIHJlbD0ibm9mb2xs b3ciIGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayI+W2hpZGRlbiBlbWFpbF08L2E+Jmd0 OyB3cm90ZTo8L2Rpdj4KPGJyPjwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoy cHggc29saWQgI0NDQ0NDQztwYWRkaW5nOjAgMWVtIiB0eXBlPSJjaXRlIj48ZGl2IGNsYXNzPSJp bSI+PGRpdiBkaXI9Imx0ciI+dGhhbmtzIFN0ZXBoZW48ZGl2Pjxicj48L2Rpdj48ZGl2Pk15IGtu b3dsZWRnZSBvZiBEU0xzIGlzIHZlcnkgbGltaXRlZC4gQnV0IGlzbnQgdGhlIHByb2JsZW0gc3Rp bGwgcGFyc2luZyBpbiB0aGUgRFJMIGludG8gdGhlIERTTD8gSSBkb250IHJlYWxseSB1bmRlcnN0 YW5kIGhvdyBhIERTTCBoZWxwcyAtIGJ1dCB0aGF0IGlzIHByb2JhYmx5IGR1ZSB0byBteSBsYWNr IG9mIGtub3dsZWRnZSBoZXJlLjwvZGl2PgoKPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiPjxicj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgY2xhc3M9ImltIj5P biBUdWUsIE1hciAxOSwgMjAxMyBhdCA0OjQxIFBNLCBTdGVwaGVuIE1hc3RlcnMgW3ZpYSBEcm9v bHNdIDxzcGFuIGRpcj0ibHRyIj4mbHQ7Jmx0O2EgaHJlZj0iPGEgaHJlZj0ieC1tc2c6Ly80Mjkv dXNlci9TZW5kRW1haWwuanRwP3R5cGU9bm9kZSZhbXA7YW1wO25vZGU9NDAyMjg4NiZhbXA7YW1w O2k9MCI+eC1tc2c6Ly80MjkvdXNlci9TZW5kRW1haWwuanRwP3R5cGU9bm9kZSZhbXA7YW1wO25v ZGU9NDAyMjg4NiZhbXA7YW1wO2k9MDwvYT4iIHRhcmdldD0iX3RvcCIgcmVsPSJub2ZvbGxvdyIg bGluaz0iZXh0ZXJuYWwiJmd0O1toaWRkZW4gZW1haWxdJmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPgoK PC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjJweCBzb2xpZCAjQ0NDQ0NDO3Bh ZGRpbmc6MCAxZW0iIGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRpdiBjbGFzcz0iaW0iPgoKCTxkaXY+ RGVwZW5kaW5nIG9uIHlvdXIgbW9kZWwsIGl0IG1heSBiZSBiZXR0ZXIgdG8gY3JlYXRlIGEgRFNM IGFzIGFuIGludGVybWVkaWF0ZSBsYW5ndWFnZS4mbmJzcDtUaGF0IHdheSB5b3UgaGF2ZSBhIHNp bXBsaWZpZWQgbGFuZ3VhZ2UsIHdoaWNoIHlvdSBjb250cm9sLCB0byBwYXJzZSBpbiBhbmQgb3V0 LCB3aGljaCBjb3VsZCBiZSB0dW5lZCB0byB5b3VyIG93biBkb21haW4gbW9kZWwuPC9kaXY+Cgo8 ZGl2Pjxicj48L2Rpdj48ZGl2PlN0ZXZlPC9kaXY+PGRpdj48YnI+PC9kaXY+PGJyPjwvZGl2Pjxk aXY+PGRpdiBjbGFzcz0iaW0iPjxkaXY+T24gMTkgTWFyIDIwMTMsIGF0IDE0OjM2LCBrdXJyZW50 OTMgJmx0OzxhIGhyZWY9Imh0dHA6Ly91c2VyL1NlbmRFbWFpbC5qdHA/dHlwZT1ub2RlJmFtcDtu b2RlPTQwMjI4ODUmYW1wO2k9MCIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdl dD0iX2JsYW5rIj5baGlkZGVuIGVtYWlsXTwvYT4mZ3Q7IHdyb3RlOjwvZGl2PgoKPGJyPjwvZGl2 PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoycHggc29saWQgI0NDQ0NDQztwYWRkaW5n OjAgMWVtIiB0eXBlPSJjaXRlIj48ZGl2IGNsYXNzPSJpbSI+PGRpdiBkaXI9Imx0ciI+SEkgRGF2 aWQ8ZGl2Pjxicj48L2Rpdj48ZGl2PlllcyB3ZSBhcmUgYWxzbyBsb29raW5nIGludG8gcnVsZSB0 ZW1wbGF0ZXMuPC9kaXY+PGRpdj48YnI+PC9kaXY+CjxkaXY+V2UgaGF2ZSBjb21lIHVwIHdpdGgg LSB3aGF0IHdlIGJlbGlldmUgLSBpcyBhIHZlcnkgbmF0dXJhbCwmbmJzcDtpbnR1aXRpdmUmbmJz cDthbmQgdmlzdWFsbHkmbmJzcDthcHBlYWxpbmcmbmJzcDt3YXkgdG8gYXV0aG9yIHJ1bGVzLiBB bmQgaXQgaXMgdGFpbG9yZWQgZm9yIG91ciBzcGVjaWZpYyBkb21haW4uJm5ic3A7PC9kaXY+Cgo8 ZGl2Pjxicj48L2Rpdj48ZGl2Pk9uZSBzaWduaWZpY2FudCBhc3BlY3Qgb2Ygb3VyIHdvcmsgaXMg dGhhdCB3ZSBhcmUgcHJlc2VudCBkcm9vbHMgYXV0aG9yaW5nIHRvIGVuZCB1c2VycyAtIGN1c3Rv bWVycyAtIHJhdGhlciB0aGFuIGJ1c2luZXNzIHVzZXJzLiBIZW5jZSB0aGUmbmJzcDtpbXBvcnRh bmNlJm5ic3A7b2YgY3JhZnRpbmcgYSBzcGVjaWFsaXplZCBVSSwgcmF0aGVyIHRoYW4gdGhlIGdl bmVyaWMgVUkgb2YgR3V2bm9yLiZuYnNwOzwvZGl2PgoKCjxkaXY+PGJyPjwvZGl2PjxkaXY+QW5k IEZZSSAtIGFyZSBhbHNvIGluY2x1ZGluZyBpbiB0aGUgZGVzaWduIHNvbWUgVUkgZWxlbWVudHMs IGZvciBhIGZ1dHVyZSB2ZXJzaW9uLCB0aGF0IHdpbGwgdXNlIERyb29scyBDaGFuY2UgZmVhdHVy ZXMuJm5ic3A7PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5DYW4geW91IHBvaW50IG1lIHRvIGRv Y3VtZW50YXRpb24gLSBhbmQgaWRlYWxseSAtIHNhbXBsZXMgYXJvdW5kIHVzaW5nIEFQSXMgZm9y IHRoZSZuYnNwO2Rlc2NyaXB0b3ImbmJzcDtsZXZlbD8mbmJzcDs8L2Rpdj4KCgo8ZGl2Pjxicj48 L2Rpdj48ZGl2PlRoYW5rczwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjwvZGl2 PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGJyPjxkaXYgY2xhc3M9ImdtYWls X3F1b3RlIj48ZGl2PjxkaXYgY2xhc3M9Img1Ij5PbiBUdWUsIE1hciAxOSwgMjAxMyBhdCAzOjEx IFBNLCBEYXZpZGUgU290dGFyYSBbdmlhIERyb29sc10gPHNwYW4gZGlyPSJsdHIiPiZsdDsmbHQ7 YSBocmVmPSImbHQ7YSBocmVmPSI8YSBocmVmPSJ4LW1zZzovLzM5OC91c2VyL1NlbmRFbWFpbC5q dHA/dHlwZT1ub2RlJmFtcDthbXA7YW1wO25vZGU9NDAyMjg4MSZhbXA7YW1wO2FtcDtpPTAiPngt bXNnOi8vMzk4L3VzZXIvU2VuZEVtYWlsLmp0cD90eXBlPW5vZGUmYW1wO2FtcDthbXA7bm9kZT00 MDIyODgxJmFtcDthbXA7YW1wO2k9MDwvYT4iJmd0OzxhIGhyZWY9IngtbXNnOi8vMzk4L3VzZXIv U2VuZEVtYWlsLmp0cD90eXBlPW5vZGUmYW1wO2FtcDtub2RlPTQwMjI4ODEmYW1wO2FtcDtpPTAi PngtbXNnOi8vMzk4L3VzZXIvU2VuZEVtYWlsLmp0cD90eXBlPW5vZGUmYW1wO2FtcDtub2RlPTQw MjI4ODEmYW1wO2FtcDtpPTA8L2E+IiB0YXJnZXQ9Il90b3AiIHJlbD0ibm9mb2xsb3ciIGxpbms9 ImV4dGVybmFsIiZndDtbaGlkZGVuIGVtYWlsXSZndDs8L3NwYW4+IHdyb3RlOjxicj4KCgo8L2Rp dj48L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MnB4IHNvbGlkICNDQ0NDQ0M7 cGFkZGluZzowIDFlbSIgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2PjxkaXYgY2xhc3M9Img1Ij4K CgkKICAKICAgIAogIAogIAogICAgPGRpdj5BcyBhIFJFVEUgbmV0d29yayBpcyBiZWluZyBjcmVh dGVkLCBEUkwKICAgICAgUnVsZXMgYXJlIHBhcnNlZCBpbnRvIGFuIGludGVybmFsICJkZXNjcmlw dG9yIiBzdHJ1Y3R1cmUgKGEgaGlnaAogICAgICBsZXZlbCBBU1QpPGJyPgogICAgICBhbmQgdGhl biBjb21waWxlZCBpbnRvIGEgUkVURS4gPGJyPgogICAgICA8YnI+CiAgICAgIFRoZXJlIGFyZSAi QVBJcyIgdG8gY3JlYXRlIHJ1bGVzIGF0IHRoZSBkZXNjcmlwdG9yIGxldmVsOiB0aGlzIGNhbgog ICAgICB0aGVuIGJlICJkdW1wZWQiIGJhY2sgaW50byBEUkwuPGJyPgogICAgICBUbyB3b3JrIGF0 IHRoZSBEUkwgbGV2ZWwgZGlyZWN0bHksIGl0J3MgY29tbW9uIHRvIHVzZSBwYXJhbWV0cmljCiAg ICAgICJ0ZW1wbGF0ZXMiLjxicj4KICAgICAgPGJyPgogICAgICBJZiB5b3VyIGludGVybmFsICht ZXRhKW1vZGVsIGlzIG9iamVjdCBvcmllbnRlZCwgeW91IGNvdWxkCiAgICAgIGNvbnNpZGVyIHVz aW5nIERSTCBydWxlcyB0byB3cml0ZSB0aGUgdHJhbnNsYXRvcnMgOik8YnI+CiAgICAgIDxicj4K ICAgICAgRGF2aWRlPGJyPgogICAgICA8YnI+CiAgICAgIHAucy4gY291bGQgeW91IHByb3ZpZGUg c29tZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgdXNlIGNhc2U/CiAgICAgIEknbSBkb2lu ZyBzb21lIHJlc2VhcmNoIG9uIHJ1bGUgYXV0aG9yaW5nPGJyPgogICAgICBlbnZpcm9ubWVudHMg cmlnaHQgbm93LiBUaGFua3MhPGRpdj48YnI+CiAgICAgIDxicj4KICAgICAgPGJyPgogICAgICA8 YnI+CiAgICAgIE9uIDAzLzE5LzIwMTMgMDk6NTQgQU0sIE1pY2hhZWwgQW5zdGlzIHdyb3RlOjxi cj4KICAgIDwvZGl2PjwvZGl2PjxkaXY+CiAgICA8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxl ZnQ6MnB4IHNvbGlkICNDQ0NDQ0M7cGFkZGluZzowIDFlbSIgdHlwZT0iY2l0ZSI+UnVsZXMgYXJl IERSTCB0aGF0IGlzIGEgU3RyaW5nLiA8YnI+CiAgICAgIDxicj4KICAgICAgV2hlcmUgYW5kIGhv dyB5b3UgY2hvb3NlIHRvIHN0b3JlIHRoZSBTdHJpbmcgaXMgdXAgdG8geW91Ljxicj4KICAgICAg PGJyPgogICAgICBQbGVhc2UgdHJ5IHRvIGV4cGxhaW4gd2hhdCB5b3Ugd2FudCB0byBhY2hpZXZl IGEgbGl0dGxlIG1vcmUuPGJyPgogICAgICA8YnI+CiAgICAgIDxkaXYgY2xhc3M9ImdtYWlsX3F1 b3RlIj5PbiAxOSBNYXJjaCAyMDEzIDEyOjQ5LCBrdXJyZW50OTMgPHNwYW4gZGlyPSJsdHIiPiZs dDs8YSBocmVmPSJodHRwOi8vdXNlci9TZW5kRW1haWwuanRwP3R5cGU9bm9kZSZhbXA7bm9kZT00 MDIyODc4JmFtcDtpPTAiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9Il9i bGFuayI+W2hpZGRlbiBlbWFpbF08L2E+Jmd0Ozwvc3Bhbj4KICAgICAgICB3cm90ZTo8YnI+CiAg ICAgICAgPGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRlci1sZWZ0OjJweCBzb2xpZCAjQ0NDQ0NDO3Bh ZGRpbmc6MCAxZW0iIGNsYXNzPSJnbWFpbF9xdW90ZSI+SEkgYWxsPGJyPgogICAgICAgICAgPGJy PgogICAgICAgICAgSXMgdGhlcmUgYW55IHNhbXBsZXMgb3IgZG9jdW1lbnRhdGlvbiBmb3IgcmVh ZGluZyBhbmQgd3JpdGluZwogICAgICAgICAgb2YgcnVsZXM/PGJyPgogICAgICAgICAgPGJyPgog ICAgICAgICAgVGhlIHVzZXIgY2FzZSBpcyB3ZSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEgY3VzdG9t IFJ1bGUgRWRpdG9yLAogICAgICAgICAgYW5kIHRodXMgd291bGQ8YnI+CiAgICAgICAgICBsaWtl IHRvIHdyaXRlIGFuZCByZWFkIHJ1bGVzIHRvL2Zyb20gb3VyIGJlYW5zLjxicj4KICAgICAgICAg IDxicj4KICAgICAgICAgIFRoYW5rczxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4K ICAgICAgICAgIDxicj4KICAgICAgICAgIC0tPGJyPgogICAgICAgICAgVmlldyB0aGlzIG1lc3Nh Z2UgaW4gY29udGV4dDogPGEgaHJlZj0iaHR0cDovL2Ryb29scy40Njk5OS5uMy5uYWJibGUuY29t L0FQSS1mb3ItcmVhZGluZy1hbmQtd3JpdGluZy1ydWxlcy10cDQwMjI4NzQuaHRtbCIgcmVsPSJu b2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZHJvb2xzLjQ2 OTk5Lm4zLm5hYmJsZS5jb20vQVBJLWZvci1yZWFkaW5nLWFuZC13cml0aW5nLXJ1bGVzLXRwNDAy Mjg3NC5odG1sPC9hPjxicj4KCgoKICAgICAgICAgIFNlbnQgZnJvbSB0aGUgRHJvb2xzOiBVc2Vy IGZvcnVtIG1haWxpbmcgbGlzdCBhcmNoaXZlIGF0CiAgICAgICAgICA8YSBocmVmPSJodHRwOi8v bmFiYmxlLmNvbS8iIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFu ayI+TmFiYmxlLmNvbTwvYT4uPGJyPgogICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX188YnI+CiAgICAgICAgICBydWxlcy11c2VycyBtYWlsaW5n IGxpc3Q8YnI+CiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vdXNlci9TZW5kRW1haWwuanRwP3R5 cGU9bm9kZSZhbXA7bm9kZT00MDIyODc4JmFtcDtpPTEiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4 dGVybmFsIiB0YXJnZXQ9Il9ibGFuayI+W2hpZGRlbiBlbWFpbF08L2E+PGJyPgogICAgICAgICAg PGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9saXN0aW5mby9ydWxlcy11 c2VycyIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIj5odHRw czovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzPC9hPjxicj4K ICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgIDwvZGl2PgogICAgICA8YnI+CiAgICAgIDxicj4K ICAgICAgPGZpZWxkc2V0PjwvZmllbGRzZXQ+CiAgICAgIDxicj4KICAgICAgPHByZT5fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpydWxlcy11c2VycyBtYWls aW5nIGxpc3QKPGEgaHJlZj0iaHR0cDovL3VzZXIvU2VuZEVtYWlsLmp0cD90eXBlPW5vZGUmYW1w O25vZGU9NDAyMjg3OCZhbXA7aT0yIiByZWw9Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCIgdGFy Z2V0PSJfYmxhbmsiPltoaWRkZW4gZW1haWxdPC9hPgo8YSBocmVmPSJodHRwczovL2xpc3RzLmpi b3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzIiByZWw9Im5vZm9sbG93IiBsaW5r PSJleHRlcm5hbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21haWxt YW4vbGlzdGluZm8vcnVsZXMtdXNlcnM8L2E+PC9wcmU+CiAgICA8L2Jsb2NrcXVvdGU+CiAgICA8 YnI+CiAgCgo8YnI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPGJyPnJ1bGVzLXVzZXJzIG1haWxpbmcgbGlzdAo8YnI+PGEgaHJlZj0iaHR0cDovL3VzZXIv U2VuZEVtYWlsLmp0cD90eXBlPW5vZGUmYW1wO25vZGU9NDAyMjg3OCZhbXA7aT0zIiByZWw9Im5v Zm9sbG93IiBsaW5rPSJleHRlcm5hbCIgdGFyZ2V0PSJfYmxhbmsiPltoaWRkZW4gZW1haWxdPC9h Pgo8YnI+PGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9saXN0aW5mby9y dWxlcy11c2VycyIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5r Ij5odHRwczovL2xpc3RzLmpib3NzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3J1bGVzLXVzZXJzPC9h PgoKCQoJCgkKCTxicj4KCTxicj4KCTxociBub3NoYWRlPSIiIHNpemU9IjEiPgoJPC9kaXY+PGRp diBzdHlsZT0iY29sb3I6IzQ0NDtmb250OjEycHggdGFob21hLGdlbmV2YSxoZWx2ZXRpY2EsYXJp YWwsc2Fucy1zZXJpZiI+PGRpdj4KCQk8ZGl2IHN0eWxlPSJmb250LXdlaWdodDpib2xkIj5JZiB5 b3UgcmVwbHkgdG8gdGhpcyBlbWFpbCwgeW91ciBtZXNzYWdlIHdpbGwgYmUgYWRkZWQgdG8gdGhl IGRpc2N1c3Npb24gYmVsb3c6PC9kaXY+CgkJPC9kaXY+PGEgaHJlZj0iaHR0cDovL2Ryb29scy40 Njk5OS5uMy5uYWJibGUuY29tL0FQSS1mb3ItcmVhZGluZy1hbmQtd3JpdGluZy1ydWxlcy10cDQw MjI4NzRwNDAyMjg3OC5odG1sIiByZWw9Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCIgdGFyZ2V0 PSJfYmxhbmsiPmh0dHA6Ly9kcm9vbHMuNDY5OTkubjMubmFiYmxlLmNvbS9BUEktZm9yLXJlYWRp bmctYW5kLXdyaXRpbmctcnVsZXMtdHA0MDIyODc0cDQwMjI4NzguaHRtbDwvYT4KCTwvZGl2Pjwv ZGl2PjwvZGl2PjxkaXY+Cgk8ZGl2IHN0eWxlPSJjb2xvcjojNjY2O2ZvbnQ6MTFweCB0YWhvbWEs Z2VuZXZhLGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmO21hcmdpbi10b3A6LjRlbTtsaW5lLWhl aWdodDoxLjVlbSI+CgkJCgkJVG8gdW5zdWJzY3JpYmUgZnJvbSBBUEkgZm9yIHJlYWRpbmcgYW5k IHdyaXRpbmcgcnVsZXMsICZsdDthIGhyZWY9IiZsdDthIGhyZWY9IjxhIGhyZWY9IngtbXNnOi8v Mzk4LyI+eC1tc2c6Ly8zOTgvPC9hPiImZ3Q7PGEgaHJlZj0ieC1tc2c6Ly8zOTgvIj54LW1zZzov LzM5OC88L2E+IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwi Jmd0O2NsaWNrIGhlcmUuPGJyPgoKCgkJPGEgaHJlZj0iaHR0cDovL2Ryb29scy40Njk5OS5uMy5u YWJibGUuY29tL3RlbXBsYXRlL05hbWxTZXJ2bGV0Lmp0cD9tYWNybz1tYWNyb192aWV3ZXImYW1w O2lkPWluc3RhbnRfaHRtbCUyMW5hYmJsZSUzQWVtYWlsLm5hbWwmYW1wO2Jhc2U9bmFiYmxlLm5h bWwubmFtZXNwYWNlcy5CYXNpY05hbWVzcGFjZS1uYWJibGUudmlldy53ZWIudGVtcGxhdGUuTmFi YmxlTmFtZXNwYWNlLW5hYmJsZS52aWV3LndlYi50ZW1wbGF0ZS5Ob2RlTmFtZXNwYWNlJmFtcDti cmVhZGNydW1icz1ub3RpZnlfc3Vic2NyaWJlcnMlMjFuYWJibGUlM0FlbWFpbC5uYW1sLWluc3Rh bnRfZW1haWxzJTIxbmFiYmxlJTNBZW1haWwubmFtbC1zZW5kX2luc3RhbnRfZW1haWwlMjFuYWJi bGUlM0FlbWFpbC5uYW1sIiByZWw9Im5vZm9sbG93IiBzdHlsZT0iZm9udDo5cHggc2VyaWYiIGxp bms9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayI+TkFNTDwvYT4KCTwvZGl2PjwvZGl2PjwvYmxv Y2txdW90ZT48L2Rpdj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iaW0iPgoKCgkKCQoJCjxicj48aHIg YWxpZ249ImxlZnQiIHdpZHRoPSIzMDAiPgpWaWV3IHRoaXMgbWVzc2FnZSBpbiBjb250ZXh0OiA8 YSBocmVmPSJodHRwOi8vZHJvb2xzLjQ2OTk5Lm4zLm5hYmJsZS5jb20vQVBJLWZvci1yZWFkaW5n LWFuZC13cml0aW5nLXJ1bGVzLXRwNDAyMjg3NHA0MDIyODgxLmh0bWwiIHJlbD0ibm9mb2xsb3ci IGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayI+UmU6IFtydWxlcy11c2Vyc10gQVBJIGZv ciByZWFkaW5nIGFuZCB3cml0aW5nIHJ1bGVzPC9hPjxkaXY+Cgo8YnI+ClNlbnQgZnJvbSB0aGUg PGEgaHJlZj0iaHR0cDovL2Ryb29scy40Njk5OS5uMy5uYWJibGUuY29tL0Ryb29scy1Vc2VyLWZv cnVtLWY0NzAwMC5odG1sIiByZWw9Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCIgdGFyZ2V0PSJf YmxhbmsiPkRyb29sczogVXNlciBmb3J1bSBtYWlsaW5nIGxpc3QgYXJjaGl2ZTwvYT4gYXQgPGEg aHJlZj0iaHR0cDovL25hYmJsZS5jb20vIiByZWw9Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCIg dGFyZ2V0PSJfYmxhbmsiPk5hYmJsZS5jb208L2E+Ljxicj4KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPnJ1bGVzLXVzZXJzIG1haWxpbmcgbGlzdDxi cj48YSBocmVmPSJodHRwOi8vdXNlci9TZW5kRW1haWwuanRwP3R5cGU9bm9kZSZhbXA7bm9kZT00 MDIyODg1JmFtcDtpPTEiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9Il9i bGFuayI+W2hpZGRlbiBlbWFpbF08L2E+PGJyPjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJvc3Mu b3JnL21haWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnMiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4 dGVybmFsIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9s aXN0aW5mby9ydWxlcy11c2VyczwvYT48L2Rpdj4KCjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48 ZGl2IGNsYXNzPSJpbSI+PGRpdj48YnI+PGJyPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCjxicj5ydWxlcy11c2VycyBtYWlsaW5nIGxpc3QKPGJyPjxhIGhy ZWY9Imh0dHA6Ly91c2VyL1NlbmRFbWFpbC5qdHA/dHlwZT1ub2RlJmFtcDtub2RlPTQwMjI4ODUm YW1wO2k9MiIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIj5b aGlkZGVuIGVtYWlsXTwvYT4KPGJyPjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21h aWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnMiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4dGVybmFs IiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9saXN0aW5m by9ydWxlcy11c2VyczwvYT4KCgkKCQoJCgk8YnI+Cgk8YnI+Cgk8L2Rpdj48aHIgbm9zaGFkZT0i IiBzaXplPSIxIj4KCTxkaXYgc3R5bGU9ImNvbG9yOiM0NDQ7Zm9udDoxMnB4IHRhaG9tYSxnZW5l dmEsaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWYiPjxkaXY+CgkJPGRpdiBzdHlsZT0iZm9udC13 ZWlnaHQ6Ym9sZCI+SWYgeW91IHJlcGx5IHRvIHRoaXMgZW1haWwsIHlvdXIgbWVzc2FnZSB3aWxs IGJlIGFkZGVkIHRvIHRoZSBkaXNjdXNzaW9uIGJlbG93OjwvZGl2PgoJCTwvZGl2PjxhIGhyZWY9 Imh0dHA6Ly9kcm9vbHMuNDY5OTkubjMubmFiYmxlLmNvbS9BUEktZm9yLXJlYWRpbmctYW5kLXdy aXRpbmctcnVsZXMtdHA0MDIyODc0cDQwMjI4ODUuaHRtbCIgcmVsPSJub2ZvbGxvdyIgbGluaz0i ZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZHJvb2xzLjQ2OTk5Lm4zLm5hYmJsZS5j b20vQVBJLWZvci1yZWFkaW5nLWFuZC13cml0aW5nLXJ1bGVzLXRwNDAyMjg3NHA0MDIyODg1Lmh0 bWw8L2E+Cgk8L2Rpdj48L2Rpdj48ZGl2PgoJPGRpdiBzdHlsZT0iY29sb3I6IzY2Njtmb250OjEx cHggdGFob21hLGdlbmV2YSxoZWx2ZXRpY2EsYXJpYWwsc2Fucy1zZXJpZjttYXJnaW4tdG9wOi40 ZW07bGluZS1oZWlnaHQ6MS41ZW0iPgoJCQoJCVRvIHVuc3Vic2NyaWJlIGZyb20gQVBJIGZvciBy ZWFkaW5nIGFuZCB3cml0aW5nIHJ1bGVzLCAmbHQ7YSBocmVmPSI8YSBocmVmPSJ4LW1zZzovLzQy OS8iPngtbXNnOi8vNDI5LzwvYT4iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vZm9sbG93IiBsaW5r PSJleHRlcm5hbCImZ3Q7Y2xpY2sgaGVyZS48YnI+CgoJCTxhIGhyZWY9Imh0dHA6Ly9kcm9vbHMu NDY5OTkubjMubmFiYmxlLmNvbS90ZW1wbGF0ZS9OYW1sU2VydmxldC5qdHA/bWFjcm89bWFjcm9f dmlld2VyJmFtcDtpZD1pbnN0YW50X2h0bWwlMjFuYWJibGUlM0FlbWFpbC5uYW1sJmFtcDtiYXNl PW5hYmJsZS5uYW1sLm5hbWVzcGFjZXMuQmFzaWNOYW1lc3BhY2UtbmFiYmxlLnZpZXcud2ViLnRl bXBsYXRlLk5hYmJsZU5hbWVzcGFjZS1uYWJibGUudmlldy53ZWIudGVtcGxhdGUuTm9kZU5hbWVz cGFjZSZhbXA7YnJlYWRjcnVtYnM9bm90aWZ5X3N1YnNjcmliZXJzJTIxbmFiYmxlJTNBZW1haWwu bmFtbC1pbnN0YW50X2VtYWlscyUyMW5hYmJsZSUzQWVtYWlsLm5hbWwtc2VuZF9pbnN0YW50X2Vt YWlsJTIxbmFiYmxlJTNBZW1haWwubmFtbCIgcmVsPSJub2ZvbGxvdyIgc3R5bGU9ImZvbnQ6OXB4 IHNlcmlmIiBsaW5rPSJleHRlcm5hbCIgdGFyZ2V0PSJfYmxhbmsiPk5BTUw8L2E+Cgk8L2Rpdj48 L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImltIj4KCgoJCgkK CQo8YnI+PGhyIGFsaWduPSJsZWZ0IiB3aWR0aD0iMzAwIj4KVmlldyB0aGlzIG1lc3NhZ2UgaW4g Y29udGV4dDogPGEgaHJlZj0iaHR0cDovL2Ryb29scy40Njk5OS5uMy5uYWJibGUuY29tL0FQSS1m b3ItcmVhZGluZy1hbmQtd3JpdGluZy1ydWxlcy10cDQwMjI4NzRwNDAyMjg4Ni5odG1sIiByZWw9 Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCIgdGFyZ2V0PSJfYmxhbmsiPlJlOiBbcnVsZXMtdXNl cnNdIEFQSSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBydWxlczwvYT48YnI+CgpTZW50IGZyb20g dGhlIDxhIGhyZWY9Imh0dHA6Ly9kcm9vbHMuNDY5OTkubjMubmFiYmxlLmNvbS9Ecm9vbHMtVXNl ci1mb3J1bS1mNDcwMDAuaHRtbCIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdl dD0iX2JsYW5rIj5Ecm9vbHM6IFVzZXIgZm9ydW0gbWFpbGluZyBsaXN0IGFyY2hpdmU8L2E+IGF0 IDxhIGhyZWY9Imh0dHA6Ly9uYWJibGUuY29tLyIgcmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJu YWwiIHRhcmdldD0iX2JsYW5rIj5OYWJibGUuY29tPC9hPi48YnI+Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPnJ1bGVzLXVzZXJzIG1haWxpbmcgbGlz dDxicj48YSBocmVmPSJodHRwOi8vdXNlci9TZW5kRW1haWwuanRwP3R5cGU9bm9kZSZhbXA7bm9k ZT00MDIyODg3JmFtcDtpPTEiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9 Il9ibGFuayI+W2hpZGRlbiBlbWFpbF08L2E+PGJyPjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJv c3Mub3JnL21haWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnMiIHRhcmdldD0iX2JsYW5rIiByZWw9 Im5vZm9sbG93IiBsaW5rPSJleHRlcm5hbCI+aHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1h bi9saXN0aW5mby9ydWxlcy11c2VyczwvYT48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2PjxkaXYg Y2xhc3M9ImltIj48YnI+PGJyPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCjxicj5ydWxlcy11c2VycyBtYWlsaW5nIGxpc3QKPGJyPjxhIGhyZWY9Imh0dHA6 Ly91c2VyL1NlbmRFbWFpbC5qdHA/dHlwZT1ub2RlJmFtcDtub2RlPTQwMjI4ODcmYW1wO2k9MiIg cmVsPSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIj5baGlkZGVuIGVt YWlsXTwvYT4KPGJyPjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuamJvc3Mub3JnL21haWxtYW4vbGlz dGluZm8vcnVsZXMtdXNlcnMiIHJlbD0ibm9mb2xsb3ciIGxpbms9ImV4dGVybmFsIiB0YXJnZXQ9 Il9ibGFuayI+aHR0cHM6Ly9saXN0cy5qYm9zcy5vcmcvbWFpbG1hbi9saXN0aW5mby9ydWxlcy11 c2VyczwvYT4KCgkKCQoJCgk8YnI+Cgk8YnI+Cgk8aHIgbm9zaGFkZT0iIiBzaXplPSIxIj4KCTwv ZGl2PjxkaXYgc3R5bGU9ImNvbG9yOiM0NDQ7Zm9udDoxMnB4IHRhaG9tYSxnZW5ldmEsaGVsdmV0 aWNhLGFyaWFsLHNhbnMtc2VyaWYiPjxkaXYgY2xhc3M9ImltIj4KCQk8ZGl2IHN0eWxlPSJmb250 LXdlaWdodDpib2xkIj5JZiB5b3UgcmVwbHkgdG8gdGhpcyBlbWFpbCwgeW91ciBtZXNzYWdlIHdp bGwgYmUgYWRkZWQgdG8gdGhlIGRpc2N1c3Npb24gYmVsb3c6PC9kaXY+CgkJPC9kaXY+PGEgaHJl Zj0iaHR0cDovL2Ryb29scy40Njk5OS5uMy5uYWJibGUuY29tL0FQSS1mb3ItcmVhZGluZy1hbmQt d3JpdGluZy1ydWxlcy10cDQwMjI4NzRwNDAyMjg4Ny5odG1sIiB0YXJnZXQ9Il9ibGFuayIgcmVs PSJub2ZvbGxvdyIgbGluaz0iZXh0ZXJuYWwiPmh0dHA6Ly9kcm9vbHMuNDY5OTkubjMubmFiYmxl LmNvbS9BUEktZm9yLXJlYWRpbmctYW5kLXdyaXRpbmctcnVsZXMtdHA0MDIyODc0cDQwMjI4ODcu aHRtbDwvYT4KCTwvZGl2PjxkaXYgY2xhc3M9IkhPRW5aYiI+PGRpdiBjbGFzcz0iaDUiPgoJPGRp diBzdHlsZT0iY29sb3I6IzY2Njtmb250OjExcHggdGFob21hLGdlbmV2YSxoZWx2ZXRpY2EsYXJp YWwsc2Fucy1zZXJpZjttYXJnaW4tdG9wOi40ZW07bGluZS1oZWlnaHQ6MS41ZW0iPgoJCQoJCVRv IHVuc3Vic2NyaWJlIGZyb20gQVBJIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHJ1bGVzLCA8YSBo cmVmPSJ4LW1zZzovLzQzNy8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vZm9sbG93IiBsaW5rPSJl eHRlcm5hbCI+Y2xpY2sgaGVyZTwvYT4uPGJyPgoKCQk8YSBocmVmPSJodHRwOi8vZHJvb2xzLjQ2 OTk5Lm4zLm5hYmJsZS5jb20vdGVtcGxhdGUvTmFtbFNlcnZsZXQuanRwP21hY3JvPW1hY3JvX3Zp ZXdlciZhbXA7aWQ9aW5zdGFudF9odG1sJTIxbmFiYmxlJTNBZW1haWwubmFtbCZhbXA7YmFzZT1u YWJibGUubmFtbC5uYW1lc3BhY2VzLkJhc2ljTmFtZXNwYWNlLW5hYmJsZS52aWV3LndlYi50ZW1w bGF0ZS5OYWJibGVOYW1lc3BhY2UtbmFiYmxlLnZpZXcud2ViLnRlbXBsYXRlLk5vZGVOYW1lc3Bh Y2UmYW1wO2JyZWFkY3J1bWJzPW5vdGlmeV9zdWJzY3JpYmVycyUyMW5hYmJsZSUzQWVtYWlsLm5h bWwtaW5zdGFudF9lbWFpbHMlMjFuYWJibGUlM0FlbWFpbC5uYW1sLXNlbmRfaW5zdGFudF9lbWFp bCUyMW5hYmJsZSUzQWVtYWlsLm5hbWwiIHJlbD0ibm9mb2xsb3ciIHN0eWxlPSJmb250OjlweCBz ZXJpZiIgdGFyZ2V0PSJfYmxhbmsiIGxpbms9ImV4dGVybmFsIj5OQU1MPC9hPgoJPC9kaXY+PC9k aXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KCgoJCgkKCQo8YnI+PGhyIGFs aWduPSJsZWZ0IiB3aWR0aD0iMzAwIj4KVmlldyB0aGlzIG1lc3NhZ2UgaW4gY29udGV4dDogPGEg aHJlZj0iaHR0cDovL2Ryb29scy40Njk5OS5uMy5uYWJibGUuY29tL0FQSS1mb3ItcmVhZGluZy1h bmQtd3JpdGluZy1ydWxlcy10cDQwMjI4NzRwNDAyMjg4OC5odG1sIj5SZTogW3J1bGVzLXVzZXJz XSBBUEkgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgcnVsZXM8L2E+PGJyPgpTZW50IGZyb20gdGhl IDxhIGhyZWY9Imh0dHA6Ly9kcm9vbHMuNDY5OTkubjMubmFiYmxlLmNvbS9Ecm9vbHMtVXNlci1m b3J1bS1mNDcwMDAuaHRtbCI+RHJvb2xzOiBVc2VyIGZvcnVtIG1haWxpbmcgbGlzdCBhcmNoaXZl PC9hPiBhdCA8YSBocmVmPSJodHRwOi8vTmFiYmxlLmNvbSI+TmFiYmxlLmNvbTwvYT4uPGJyPl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPnJ1bGVzLXVz ZXJzIG1haWxpbmcgbGlzdDxicj48YSBocmVmPSJtYWlsdG86cnVsZXMtdXNlcnNAbGlzdHMuamJv c3Mub3JnIj5ydWxlcy11c2Vyc0BsaXN0cy5qYm9zcy5vcmc8L2E+PGJyPmh0dHBzOi8vbGlzdHMu amJvc3Mub3JnL21haWxtYW4vbGlzdGluZm8vcnVsZXMtdXNlcnM8L2Jsb2NrcXVvdGU+PC9kaXY+ PGJyPjwvYm9keT48L2h0bWw+ --===============7717349336815213874==--