[JS][CS3] Validating edittexts in ScriptUI

Hi,
I have to attach validation methods to a bunch of edit fields' onChange. Some fields would have to contain floats (toFixed(2)), some - integers, some - capitalized strings after the field has lost focus. I'm ready with 3 functions to be attached to controls, but I would like to hear the most robust solution to this problem. Would you use ctrl.onChange = fn, or rather ctrl.addEventListener()...?
Any comments welcome.
M.

Wait a second... Something I hadn't considered before.
The problem of relying on the onChange event of a single field is that a click in an OK button will still close the window.
But, if you set an event listener to the OK button's click event, you can validate all fields and then cancel the event.
Here's an example that does work in ESTK2 (CS3) (I think this code will paste and show correctly, if it doesn't, sorry)
// Basic ScriptUI validation
/* This script shows the basics of validation using ScriptUI events
By using the "change" event, a script can be notified that a value has changed. The problem with this approach is that it
requires a field to lose focus for the event to fire. For example, a user can type an invalid number in a field, then, without leaving
the field, click the OK button (which is still enabled because validation has not happened on the invalid field yet). In this case, clicking
the OK button causes the field to lose focus, the validation occurs, but the OK button has already been pressed, and the dialog will
close with an invalid entry.
We could use the "changing" event that fires for every character typed; but, that approach brings its own set of complications. For example, the
user is typing "12 inches" in the field. If the validation routine accepts units and abbreviations, as the user types we get the following states:
"1" - valid
"2" - valid
" " - valid
"i" - INVALID
"n" - valid
"c" - INVALID
"h" - valid
"e" - INVALID
"s" - valid
That doesn't work.
If we intercept the OK button's mouseDown event, we can validate all fields, and either allow the OK button click event or cancel it.
If cancelled, the OK button can disabled, and a visual cue could be provided as to the offending field(s).
With this approach, the valdiation routines need to have a reference to the OK button, and all registered validations
must happen each time a field is edited to set the state of the OK button.
// setControlState sets the background color of a control to "good" or "bad". The white for good, red for bad
setControlState= function( myControl ) {
if ( myControl.isValid ) { // we're good, make it white
myControl.graphics.backgroundColor = myControl.graphics.newBrush( myControl.graphics.BrushType.SOLID_COLOR, [1,1,1,1] );
} else { // we're bad, make the field background red (straight red, [ 1, 0, 0, 1] is a bit harsh, so we're using a red-ish color
var myRedColorArray = [ 210/255, 12/255, 82/255, 1];
myControl.graphics.backgroundColor = myControl.graphics.newBrush( myControl.graphics.BrushType.SOLID_COLOR, myRedColorArray );
// validateInteger will ensure that a field contains a valid integer
validateInteger = function( myEvent ) {
myEvent is passed to the handler when the event fires, myEvent.target is the target control of the event.
We're adding a property "isValid" to the control so we can quickly check the state of any control
Note that parseInt parses "12x" as 12, so you can't just check for isNaN on a parseInt...
// make this a required field by checking to see if there's anything there
if ( myEvent.target.text.length == 0 ) {
myEvent.target.isValid = false;
} else if ( isNaN( Number( myEvent.target.text ) ) ) { // if it can't be cast to a number, it's obviously bad
myEvent.target.isValid = false;
} else {
// if we can parseIn the content of the field, change it back to a string, and get the original value, the original value must have been a string
myEvent.target.isValid = ( parseInt( myEvent.target.text ).toString() == myEvent.target.text );
// set the control's background to red if it's invalid
setControlState( myEvent.target );
// check all the fields, and set the OK button state
validateAll( myEvent.target.window.okButton );
// validateReal will ensure a field has a valid Real number
validateReal = function( myEvent ) {
// make this a required field by checking to see if there's anything there
if ( myEvent.target.text.length == 0 ) {
myEvent.target.isValid = false;
} else if ( isNaN( Number( myEvent.target.text ) ) ) { // if casting to a number is NaN, it's bad...
myEvent.target.isValid = false;
} else {
// if user enters ".2", parseFloat turns it into "0.2" so the same parseFloat().toString() won't work like it does for integers
// using a regex instead
var regex = /\d*\.{0,1}\d*/g; // zero or more digits, possibly a decimal point, followed by zero or more digits
// if the first element of the array returned from String.match equals the original, we're good
try {
myEvent.target.isValid = ( myEvent.target.text == myEvent.target.text.match( regex )[ 0 ] );
} catch( e ) {
myEvent.targetisValid = false;
//set the control's background to red if it's invalid
setControlState( myEvent.target );
// now check all the fields
validateAll( myEvent.target.window.okButton );
// uses the UnitValue object to ensure whatever is typed in will be a valid measurement unit
// for this handler, we wil set a "fieldUnit" property on the edit box, all units will be converted to those units
// we're supporting all units that UnitValue supports except pixels and percents as they are based on a base unit and traditional points/picas as no one will likely enter "tpc" or "tpt" vs "pt" or "pc"
validateUnits = function( myEvent ) {
// no empty fields
if ( myEvent.target.text.length == 0 ) {
myEvent.target.isValid = false;
} else {
// this regex will validate the basic form of a unit value - a real number followed by zero or more spaces and possibly a valid unit string
var regex = /\d*\.{0,1}\d* *(?:in|inch|inches|ft|foot|feet|yd|yard|yards|mi|mile|miles|mm|millimeter|millimeters|cm| centimeter|centimeters|m|meter|meters|km|kilometer|kilometers|pt|point|points|pc|pica|pica s|ci|cicero|ciceros)?/gi;
var myMatch = myEvent.target.text.match( regex );
try {
myEvent.target.isValid = ( myEvent.target.text == myEvent.target.text.match( regex )[ 0 ] );
} catch( e ) {
myEvent.target.isValid = false;
if ( myEvent.target.isValid ) {
// create a new UnitValue from the target text
// it's posible that the units were left off, in which case the fieldUnits are assumed.
// so use the regex from validateReal to see if there's a unit attached to the value
var regex = /\d*\.{0,1}\d*/g; // zero or more digits, possibly a decimal point, followed by zero or more digits
// if the first element of the array returned from String.match equals the original, there's no units
try {
var hasUnits = ( myEvent.target.text != myEvent.target.text.match( regex )[ 0 ] );
} catch( e ) { // if this errors, something is very, very wrong...
myEvent.target.isValid = false;
setControlState( myEvent.target );
validateAll( myEvent.target.window.okButton );
return;
if ( !hasUnits ) {
var myUnitValue = new UnitValue( myEvent.target.text + " " + myEvent.target.fieldUnit );
} else {
var myUnitValue = new UnitValue( myEvent.target.text );
if ( isNaN( myUnitValue ) ) {
myUnitValue = new UnitValue( "0 " + myEvent.target.fieldUnit );
try {
// attempt to convert it to the fieldUnit - if it can't be done, this will error
myUnitValue.convert( myEvent.target.fieldUnit );
// the reason for the convert is that the UnitValue.toString() will inclue the abbreviated units for us, using UnitValue.as() will not
myEvent.target.text = myUnitValue.toString();
} catch ( e ) {
// if we errored, it wasn't a valid measurement
myEvent.target.isValid = false;
setControlState( myEvent.target );
validateAll( myEvent.target.window.okButton );
// validateAll - this function is hard wired to check the isValid state (set in the validation routines) of the edit boxes used in the test example
validateAll = function

Similar Messages

  • DW CS3 Validator configuration error

    I am using DW CS3 on Leopard and whenever I attempt to run
    the validator
    I get the error "Cannot open validator configuration file:
    Leopard:Applications:
    Adobe Dreamweaver CS3:Configuration:TagLibraries:Validator:
    -- I seem to have 11 files in that directory
    cf_all.vtv
    html_all.vtv
    jsp.vtv
    smil.vtv
    validator.vtv
    ValueMap.vtv
    Versions.vtv
    wml.vtv
    xhtml10f.vtv
    xhtml10x.vtv
    xhtml10t.vtv
    Am I missing a file here? Or is something else wrong?
    Thanks for help.

    anyone else with this issue in Leopard?

  • [ScriptUI][CS3] EditText bug?

    I'd like to have this bug confirmed by someone before I file it to Adobe.
    When I tab into an EditText which already contains a single character in it, say "5", or "e", when I re-type that value, I get it repeated ("55", "ee"). It does not occur when the value is longer than 1 char.
    I made sure there is no onChanging or any other handler attached, then I fired a script from Adobe Bridge SDK. Same thing happens.
    I would be glad to hear that I'm not the only one.
    Any known workaround?
    Art

    > How to tell if a control is an EditText?
    control.constructor == EditText
    -X

  • ScriptUI Checkbox onClick fires differently in CS5 vs CS3?

    I'm developing an application consisting of a ScriptUI interface and a custom InDesign template. The ScriptUI interface contains a few checkboxes, with onClick event handlers assigned to read their value and store them to a preferences variable whenever they change. This all works perfectly in InDesign CS3 which was my primary development environment.
    Now I need to get this application compatible with InDesign CS5, but the checkboxes seem to consistently be returning the wrong value. No matter whether my event handler reads this.value, event.target.value or a direct reference to the checkbox, the returned value is the opposite of the expected. If I use the direct reference to read the value from elsewhere though, the returned value is correct! It almost seems like in CS5 the onClick event handler is fired before the value is changed, while in CS3 it is fired after the value is changed. Just tried CS4 and it seems to behave the same way as CS5.
    Did they actually change the checkboxes to behave this way (which makes no sense to me) or am I doing something wrong? Is there any way to get the old behavior back, or is the only solution to manually invert the value if the script detects CS4 or later as the runtime?

    Mayhem SWE wrote:
     I wonder how the execution order is in a web browser. The only valid reason I can come up with to justify the CS4/5 change would be if this is how a web browser would behave (perhaps in order to give you an opportunity to cancel the event before the value is changed?), but it is still quite confusing and illogical IMHO...
    I totally agree with you. The reason behind this —I think— is that the ScriptUI event model has been modified in CS4 in order to enhance the compliance with the DOM Level 3 Events Specification — http://www.w3.org/TR/DOM-Level-3-Events — which states that the click event must be cancelable. Thus you probably can use myClickEvent.preventDefault() in CS4/CS5 while this probably has no effect in CS3 (not tested). I suppose that the checkbox value should be actually changed if and only if the event is completed and not canceled. That makes sense, but the counterpart is that there is no more equivalence between using the onClick handler and a 'pure' click event listener: myWidget.addEventListener(...)
    On this subject, the specification says that using the shortcut myWidget.onEvent = myFunction to register an 'event listener' depends on the host language: "Because the details of this are often language-specific, this type of event listener registration is not defined in this specification, but in general, any event type may be used as an attribute in this way by adding the prefix on- to the event type name, and events so dispatched should behave consistently with the event registration and propagation defined in this specification, with the same interfaces, properties, and methods." —DOM Level3 Events Specification, 4.3 "Interface EventTarget", note 2.
    Of course, the easiest approach is to use myCheckbox.onClick = ... since the handler is called once the value has been updated, whatever the version of ScriptUI. But I don't believe it's a good practice if you're working on a complex project —especially a library!— because the onClick handler can be easily rewritten by the client code, and because you may need to deal with event propagation/cancellation at a deeper level. For my part I always use addEventListener(...) and removeEventListener(...) in my library code, although it implies that I fit my implementation to the ScriptUI version. (In CS3, reversing the checkbox value, etc.) That way the client code cannot pollute the basic behavior of my widgets.
    Hope that helps,
    @+
    Marc

  • I am trying  to install CS3 on Windows 8 and keep getting a message saying "the serial number I entered is not valid please enter it again" Does anyone know how to install successfully on Windows 8?

    I am trying  to install CS3 on Windows 8 and keep getting a message saying "the serial number I entered is not valid please enter it again" Does anyone know how to install successfully on Windows 8?

    CS3 is unsupported under Windows 8. That said, you'll need to contact Adobe
    directly for serial number issues.

  • [JS] CS3 ScriptUI - Progress Bar

    Hi
    I know I am late to the game with ScriptUI in CS3, but I would like to use a progress bar with some of my longer scripts. 
    I have read through the relevant part of the scripting guide, but cannot seem to make things work, the guide seems to reference a script that is not in the file.
    Can anyone offer some simple guidance on what I need to do, or point me in the direction of a script that uses this feature that I can pull apart and use?
    Thanks in advance,
    Roy Marshall

    Hi Roy,
    I just looked at my archives of the old forums, and it looks like you asked the same question almost two years ago...
    Here's a quote of xbytor's response from back then:
    Here's my contribution to this thread. This function creates and returns a
    Progress Palette. You specify the window's title, the max/min for the progress
    bar, and whether or not you want to use a Cancel button. If you decided to have
    a Cancel button, you should also specify an 'onCancel' on the Palette.
    Code:
    // createProgressWindow
    //   title     the window title
    //   min       the minimum value for the progress bar
    //   max       the maximum value for the progress bar
    //   parent    the parent ScriptUI window (opt)
    //   useCancel flag for having a Cancel button (opt)
    //   onCancel  This method will be called when the Cancel button is pressed.
    //             This method should return 'true' to close the progress window
    function createProgressWindow(title, min, max, parent, useCancel) {
       var win = new Window('palette', title);
       win.bar = win.add('progressbar', undefined, min, max);
       win.bar.preferredSize = [300, 20];
       win.parent = undefined;
       if (parent) {
         if (parent instanceof Window) {
           win.parent = parent;
         } else if (useCancel == undefined) {
           useCancel = parent;
       if (useCancel) {
         win.cancel = win.add('button', undefined, 'Cancel');
         win.cancel.onClick = function() {
           try {
             if (win.onCancel) {
               var rc = win.onCancel();
               if (rc || rc == undefined) {
                 win.close();
             } else {
               win.close();
           } catch (e) {
             alert(e);
       win.updateProgress = function(val) {
         var win = this;
         win.bar.value = val;
         // recenter the progressWindow if desired
         // win.center(win.parent);
         win.show();
         win.hide();
         win.show();
       win.center(win.parent);
       return win;
    And here's an example of how it would be used. In this example, we are
    processing an array of files. We call a 'processFile' method for each file in
    the array.
    We also add an 'isDone' property to the Palette, which we set to 'true' in an
    'onCancel' method. This makes it possible for the user to terminate the file
    processing loop before all of the files have been processed.
    Sample Code (in some function):
       // we have to process an array of 'files'
       var progressWindow = createProgressWindow("Progress...",
                                                 0, files.length, true);
       progressWindow.isDone = false;
       progressWindow.onCancel = function() {
         this.isDone = true;
         return true;  // return 'true' to close the window
       try {
         for (var i = 0; i < files.length; i++) {
           // check to see if the user pressed the 'Cancel' button...
           if (progressWindow.isDone) {
             break;
           progressWindow.text = ("Processing file " + (i+1) + " of " + files.length
    + "...");
           progressWindow.updateProgress(i);
            // now process the next file
            processFile(files[i]);
       } catch (e) {
         alert(e);
       } finally {
         progressWindow.close();
    I've tested this in PSCS2 and PSCS3. It should work without change in IDCS3.
    -X
    -- for photoshop scripting solutions of all sorts contact: [email protected]

  • [JS CS3/4] ScriptUI How to color a button ?

    Is it a way to get a colored button in the ScriptUI DOM ?
    I tried
    dlg.button1.graphics.backgroundColor = dlg.button1.graphics.newBrush(dlg.button1.graphics.BrushType.SOLID_COLOR,[0.7,0.7,0.7],1);
    But although the dialog is drawn, the button is not styled in best case, not visible in the worst case.
    Is that possible to get a colored button ?
    Hope so.
    Do you have any tip ?
    TIA
    Loic

    I have tried in the past but not been able to color a button.
    What I have been able to do is use the onDraw callback to print an image instead of the standard control.
    You may want to try that.
    Wish I could be of more help. Kasyan's correct, the docs are sketchy at best. The biggest hurdle is that some of the custom drawing functionality seems to be a bit brittle and prone to failure in some cases.
    Below is an example of drawing an image in place of a dropdown list to make a poor mans' flyout menu.
    Regards
    Bob
    // Ever wanted to embed an image file in a jsx file?
    // below is a multi-step process for doing so. It's a little cumbersome but worth the bother at times when a script depends on
    // a binary object, but there is no fail-safe way to ensure the binary is delivered or installed with the script (like this sample!)
         function myFileStringer( myFile ) {
              // read the image file
              myFile.encoding = "BINARY";
              myFile.open( "r" );
              var myBuf = myFile.read();
              myFile.close();
              // create an output file of the same name with the extension "txt"
              var outName = myFile.name.substr( 0, myFile.name.lastIndexOf( "." ) ) + ".txt";
              var outFile = new File( myFile.parent.absouteURI + "/" + outName );
              outFile.open( "w" );
              // write the buffer to the text file using toSource(). The text in the file will be JSON, ready to copy and paste into your script
              outFile.write( myBuf.toSource() );
              outFile.close();
              // open the text file, copy the text in the file in a single line, paste it into your source code as a single line, something like this:
              // var myBinary = (newString("\u0089PNG\r\n\x\1\A\n\x00\x00\x00\riHDR\x00\x00\x00... ) );
              // it will be a very long string
         function myFileMaker() {
              // the (new String(....) in the line below is the output as pasted from myFileEnstringer
              // it is in JSON notation from the toSource() call above - when this line is executed, myBinary will contain an accurate binary representation of the image
              // the binary below is a PNG image that is an icon for a flyout menu.
              var myBinary = (new String("\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\t\b\x06\x00\x00\x00;*\u00AC2\x00\x00\x00\tpHYs\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\u009A\u009C\x18\x00\x00\x0FciCCPPhotoshop ICC profile\x00\x00x\u00DA\u00ADWi8\x14\u00EC\u00D7?3\u00C6\u00D8\u00C76\u00C6\u00CEX\u00B2d\x1B\u00FB\u0096u\u0090\u009D\u00EC$\u008C\x19\u00CBX\u00A7\u00B1/\u00A1B\u008F\u0088\u00B4\u00A1\u0088\x14i\u00A1\u0094\u0084\u0092\u00AD\u00B2\u0094\u00A2\x12ey\u00B2\u00A6B\"K\u008B\u00E6\u00FD\u00A0\u00A7\u00E7\u00BA\u00FE\u00EF\u00F5\u00BE\u00EF\u0097\u00F7|\u00FA\u009Ds\u009Ds~\u00E7\u00BE\u00CF}]\u00E7>\x00\u00BCB$\x1A-\x02\t\x00\u0091Q\u00B1t\u0097\u00DD\u00E6x/o\x1F<\u00CBk\u00E0\x04~\u00C0\u0082>H\u0092\u00C8143gg{\u00F8\x1Fe\u00FD5 \x00\x00^\u00AA\u0090h\u00B4\u0088|\u00F6\x00J\u00DF\u00D4\u00D9\u0092z\u00C3\x15\u00E7/\u00B2\u0087d\u00E1\x7F\x17\f\u00DD\u00CB\u00DB\x07\x00\u00A1\f\x00\u00D8\u0090ml\n\x00\u00D8\u00C0m\u00EC\x06\x00\u00D8\u0084XZ,\x00\"\x14\x00\u00B0\u00E4P\x12\x05\x00\u0091\n\x00\u00CAt7\x17\"\x00\u00A2\x06\x000!\u00DB\u00B8\t\x000\u0081\u00DB\u00B8\x07\x000\u00F1\u00E4\u0090X\x00\u00C4\b\x00\u009A/\u008AB\u008D\x02`Y\x00@\x1BS\u0082b\u00C8\x00\x18e\x00\u00A0Pb\u00C8\u0091\x00\u0098\u00E3\x00H\u00D5\u00C8\u00C8h\n\x00O;\x00(\u0090i\u00F4X\x00\u009Ey\x00P\u00F1\u00F2\u00F6\u00C1o\u0097L\u00D9\x000@\x01\u00A0\u00DF\u00FEk\x0B\u0093\x02\u00A8\u00BD\x03 &\u00F5\u00AFM\u00FE\x01\u0080\x10\t\u00E0\u00E6\u00CE\x7Fm\u00AB.\u0080\x00\x00\x04\u00EEyL\u00B0\u00A6\x06\x00\x00 8\u00CD\x01\u0098'\x18\u008CU9\x00\u0096\x13\x00[\u0085\f\u00C6\u008FJ\x06c\u00EB\"\x00\u00D3\x18@{\x049\u008E\x1E\u00FF\u00FB\u00BE\x10\u0088~\u0080\u00FFK\u00DF>\u00F3oaB\x00 \x01\u0090jL\u008E\u00A8P\u00E6\x03\u00E8\x12\u0096\u009B\u00AC\u009Dl#\u00EC\u009F8V\u00B8\u00D81\u0082\u00DCR<*\u00BC\x06|f\u00FC\u00F6X7\x01O\u009C\u009F Y\u0088*L\x13\u0089\x11\u008D\x15\u008B\x13O\u0094H\u0091\u00CC\u00C0gJeJ\x1F\u00919*\u009B\u00BF\u00E3\u00B4\u00DC9\u00F9\n\u0085\x1A\u00C5\x1B;\u009B\u0094\u00BA\u0095\u0087T&U\u00D7\t\u00EC\u00EA\u00D2\x1A\u009A\u009A\u00EEZ)\u00DA\x15:}\u00BA\u009B\u00FA\u008A\x06$\u00C3s\u00BB\u00C6\u008D%M\u00A8\u00A6w\u00CD9\u0089\u00FB,n[\u00F1\u00ED\u00A6[\x0F\u00DA\u00AA\u00D9\x1D\u00B3\u00FF\u00E2h\u00EFT\u00B7\u0087\u00DB%\u00C2\u00B5\u00CF]\u00D4#\u00C2\u00F3\u00817\u00C6\u00C7\x7Fo\u008D\u00EFW?\u00A2\u00FF\u00D1\u0080\u00FE@n\u00B2\x13\u00E5D\u00D0\u00F3\x10\u00F6P3j\\X]\u00F8d$\x7F\u0094Et\x02\u00ED\u00FA\u00FE\u00B71\u00A8XB\u009C\x7F|^\u00C2\u00FD\u00C4\u00F9d\u00DE\x14\u00E3T\u00DA\u0081\u00F2\u00B4\u00EE\u00F4\u00B1\u008C\u00A9\u0083\u00B3\u0087\x16\x0E/g\u00AEd\u00ADgo\u00FD\u0085\u00CA\u00E1<\u00CA\u009B+\u0090'~L!_\u00B3\u00C0\u00F0\u00B8Y\u00A1\u00F5\u0089='=N\u00F9\u009C\u00F6;C.\u00A2\x16\u0087\u0097\u0084\u009F\u00A5\u009E\u00A3\u0096\u0086\u0095\u0085\u009E'\u0095\u00FBT\u00B8^\u00B0\u00AB4\u00BD\u00A8~I\u00B1J\u00BEz\u00C7e\u00E9\x1A\u00FC\x15\u00F1\u00AB\u00C2\u00D7\x04\u00AE\u00F3\u00D6\u00F2\u00D4q\u00DE`\u00BE\u00F1\u00EB\u00E6f\u00FD\u00EA\u00AD\u00C5\u00DB\u00B3\r\u00A3w\x06\x1B\u009F\u00DE\u00EDjjn\u00AEo\u00B9~\u00EF\u00CA\u00FD\x0B\u00ADg\x1E\u00E4\u00B7\x1Dm\u00CF\u00EC8\u00D8\u0099\u00DCE\x7F\x18\u00F5(\u00EAqD7\u00A9\u0087\u00D8\u008B\u00EB\u009D\u00EA\u00BB\u00F5$\u00FD\u00A9m\u00BF`\u00FF\u00DC\u00B3\u0086\u00E7\u0099\x03.\u0083\u0092\u0083\u008B/\u00DA_\x16\u00BE\u00F2\x1FR\x19\u00FA\u00FE\u00FA\u00C9p\u00D1\b\u00E9\u008D\u00CA\u009Boo\x1F\u008F\x16\u008Cy\u008C\u008B\u008F\u00CFL\u00D4\u00FEM\x7F\u00A7\u00F3\u00EE\u00DBd\u00CBT\u00CA\u00B4\u00C1\u00F4\u00FAL\u00E3l\u00EA\u009C\u00D9{\u00A6\u00F7\u00BD\u00F3y\x1F\x1C?\u00F2||\u00F9\u00A9h\u00C1kQhqd\u00A9\u00F8\u00B3\u00D7\u00B2\u00D0\u00F2\u00D0\u0097\u00C2\x15\u00C7U\u00AE\u00D5\u00DE\u00AF\u0099kfk\u008C\u00F5\x07\x1B\u00C9\u009B\u00DA\u009B\u00CB\u00DFj\u00BF\u0087\u00FFP\u00FC1\u00F7\u00B3r+\u00E0\u0097\u00E4\u00AF\u00B7\u008C\u00FD\f\x06\x00\x12\u00C5\u00C4\u0087\u00C21c\u00D1\x02,\u00DC\u00AC\x1Cl\u00ACl[\u00EC\u00DF8>s\u00CEp\u00BD\u00C1\u00F4sw\u00F0\u00D4\u00F3V\u00F2\u009D\u00E2\u00CF\u00C2&\b\u0084\u00E3\u00F6\t:\t\x11\u0085\u00F5EtD\u0095\u00C5\u00D4\u00C4U%t$\u008D\u00F1\u0096R&\u00D2z2*\u00B2\u00CA;\u0094\u00E5v\u00CA\x13\x14\u0094\x15\t;u\u0094\u0088\u00CA\u00B6*^\u00AAT\u00B5$B\u008Ez\u0099F\u00A3\u00E6s\u00AD%\x1D^]-=W\u00FDd\u0083\u00CB\u0086\u00C3F\u00AC\u00C6\u00DA&\u00FBMk\u00CD\u00E6\u0089J\x16\u00E1\u00967\u00AC6\u00AD-mrmG\u00EC\u00D5\x1DR\x1D\x07\u009DE\u00F7\u0084\u00B84\u00BA!\u00DC\x1D<Nx\u008Ey+\u00FA\u00D0\u00F6\u00DE\u00F2\u00DD\u00F0\u00D3\u00F3?\x10\u00D0F\u00DA\"\x1BR\u00E2\u0083\u00EE\x06\u00AF\u0086\u00AAR\u00C3\u00C2\u00AE\u0086\x7F\u008C\u0094\u008B\u00F2\u008D.\u00A6\u00BD\u00A6\u00F3\u00C7\u00B8\u00C5\x16\u00C6\u00F5%\u00B0&\u00DA'\u00E5'?J\u0099N\u00FDt\u00E0s\u00DAZ\u00FA\u00B7\u008C\u00EF\x07\x7F\x1Df\u00CE\u00E4\u00CC\u00E2\u00CF\x16>\"\u00FE\u0097l\x0E\u00E1\u00A8A\u00AEy\u009E\u00CD1\u00A7|\u00AF\x02\u00DF\u00E3\x01\u0085\u0094\x13a'\u00A3O\u00D1N\u00D3\u00CFD\x17E\x15\u00D3J\"\u00CF\x06\u009F\x0B(\u00F5*s>oY\u00AES\u00A1rA\u00A5R\u00F9\u00A2\u00E2%\u00C5*\u0085j\u00B9\u00CB\u00B252Wd\u00AF\u00CA\\\u0093\u00BC.V+R'|C\u00E8\u00A6@=\u00DF-\u00EE\u00DB\u00DC\r\u0098;\\\u008D\\wy\u009Bp\u00CDB-B\u00F7D\u00EF\u00E3[\u00E5\x1F\u00A8\u00B6i\u00B7\u00EBw\u0098w:v\u00F9<\u00DC\u00FBh\u00F7c\u00FC\u00E3\u0095\u00EE\u00DE\u009E\u00D2\u00DE\u00C8>\u00B3'\u0082O\x16\u009F>\u00EA/y\x16\u00F9\u009C8 >\u00B0>\u00D8\u00FF\u00A2\u00F2e\u00C2+\u00C7!\u00E9\u00A1\u00B5\u00D7\u00BD\u00C3\u00A5#\u00D1o\u00CC\u00DE\u00F2\u00BE\x1D\x1F\u00BD>\u0096:n=\u00C1;1\u00FAw\u00E5\u00BB\u00B0I\u00D5\u00C9\u00E5\u00A9\u00A6\u00E9\u00E33\u00A1\u00B3&s\u0082s\u008B\u00EF\x1F\u00CE\u0097|\u0088\u00FAh\u00F9I\u00F8\u00D3\u00C7\u0085\u00FB\u008B\u00C7\u0096\u00F6}V\u00FD\u00FCc\u00B9\u00FB\u00CB\u0089\x15\u00BFU\u00C5\u00D5\u0095\u00AF\u00F7\u00D6\u00B2\u00D7\u009D7\u00846\u00C66+\u00BFQ\u00BF\x13\u00BEo\u00FE\u00B8\u00FF3c\u00CB\u00F2\x17\u00E6\u00D7sF\u00E4v\u00FF\u0091\x1BL\u00CB\u00A8\u00AF\u00CC\u009F\u00D1\u008B,\u008B\u00AC\u008Bl\x13\u00EC\u00A3\x1C\u00AF8\u009Fp\u00B5b\u00EA\u00B8\u00CByry\x13\u00F8(\u00FC\u00F6X\u0082\x00\u00B7\u00C0*nP\u00F0\u009AP\u00A6\u00B0\u00AF\bA\u0094YtX\u00ACJ<N\u00C2R\u0092[r\x1C_%\x15)m \u0083\u0096y-{eG\u009A\u009C\u00BB\u00BC\u00B2\x02\u00AB\u00C2{\u00C5\u00EE\u009D5J\u00C7\u0094cU\u00F6\u00AA\u009A\u00AB\u00A9\x12\u00C4\u00D4\u00D9\u00D474f5\x07\u00B5\u00DA\u00B5o\u00EA\u0094\u00E9\u00E6\u00E8\u00C5\u00EB\u0093\f\u00EC\rw\u00ED\u00C2\x1B\u00A1\u008D\u0096\u008D\u0087L\u00EE\u0098\u009E4\u008B7\u00A7\x12=-\u00AC,\u00F5\u00AC\u00E4v\x0BY3[\u00AF\u00DB|\u00B0}c\u00D7c\u00DF\u00E8P\u00EDX\u00EC\u0094\u00E3\u009C\u00B8'\u00C4\u00C5\u00C3\u00D5\u00DE\u00CD\u00D0]\u00D9C\u00D2\x13\u00E7\u00C5\u00E5\u008D\u00F4\u00FE\u00EA\u00F3a\u00EF\u0094\u00EF\u00DB}\u00AF\u00FC\u00FA\u00FD\u00BB\x02\x1E\u0090Z\x03[\u00C8\u00B7(\x17\u0083r\u0082\u00E9!\u00FE\u00A1\u00D6T\u00B50\u0091p\u0096\u00F0\u00B5\u0088\u0099\u00C8\u00C1\u00A8\x07\u00D1u\u00B4\u00CA\u00FDg\u00E8\x7F\u00C5$\u00C6\u0086\u00C6\u00F9\u00C5;&\x18'\u00AA%I%cSP)\u00AB\u00A9\u00EF\x0E<K{\u0090~-\u00E3\u00D4\u00C1\u00F4C\u00C1\u0087\u009D2\u00B5\u00B2p\u00D9\u0088\u00EC\u008D#\u008B\x7FM\u00E7\u00BC=:\u0090\u00DB\u009D\u00D7r\u00ECF~MA\u00E9\u00F1\u00DC\u00C2\u00F4\x13\u00B4\u0093\u0094S\u00EE\u00A7\u00AD\u00CEh\x15\u00C9\x16\x0B\u00940\u0097|=;{n\u00A4\u00B4\u00BF\u00EC\u00C1\u00F9\u00EB\u00E5e\x15'/dU\u00A6^\u008C\u00BED\u00AA\u00F2\u00AC\u00DEs\u00D9\u00A6\u00C6\u00F0\u008A\u00F4U\u00B8:v\u00ED\u00FE\u00F5\u00E2Zz\u009D\u00D3\r\u00D5\u009B\u0098\u009BK\u00F5\u00FD\u00B7\u00AE\u00DC\u00CEm\u0088\u00BE\u00E3\u00DA\u00A8}\x17ww\u00A3i\u00AC\u00B9\u00B5\u00A5\u00EC^\u00DA}R+\u00F1\u00C1\u008E6\u00E6\u00B6\u00E9\u00F6\u00AE\u008E\u00EA\u00CE\u00CC.\u00D2C\u00A3G\"\u008F\u00D6\x1F\x0FtW\u00F5\u00E4\u00F6\u0096\u00F6u<\u0099z\u00CAx&\u00F2\\\x7F\u00C0g0\u00F5E\u00E9\u00CB\u009EW\u008B\u00AF\u00C5\u0086\u009DFr\u00DF<\x1D\u00E5\x1F\x0B\x18o\u00FE\u009B\u00FF]\u00FA\u00E4\u00D7\u00E9\u0083\u00B3\u0098\u00B9\u00CB\u00F3\u00CE\x1Fy?\u00BD^\u00AC\u00FB|\u00E6K\u00E1j\u00D9Z\u00FD\u00C6\u00DCw\u00FC\u00CF\u0080_i\f\x06\u00C0\u00F6\u00EC\x03\x00@\u00EB\x00\x14\u00C7\x01xM\x02\u00B8T\x01\x14l\x01(p\x02\u00E0j\x00\u009C\u00B9\x00\u00DC\u00F4\x01\u00D1Y\x00\u0088kY\u00800/\u00F8g~\x00\x00\x12X\u0081\x17$@\x05L\u00C0\r\" \x1B.\u00C2C\u0098E\u00B0#4\x10\u00BE\u0088\u00BF\x10M\u0088\x0FHq\u00A4;2\x1F\u00D9\u00C7\u00C4\u00CAd\u00CD\u0094\u00CB4\u0088\x12AQP\u00F5(\x06\u00B3\x13\u00F3E\u00E6ohg\u00F4U\x16\x14\x0B\u0089\u00A5\u009DU\u008A\u00F50\u00EB<\u009B\x03[=\u00BB\b{&\u00FB\x02\u0087'G'\u00A7\x06g\x19\x17\x0BW\x1C\u00D7\x14\u00C6\t\u00D3\u00CA\u00AD\u00C4]\u00CC\u00C3\u00C2\x13\u00C33\u00C9\u00EB\u00CC\u00DB\u00CA\u00A7\u00C4W\u00CC\u00CF\u00CC\x1F\u00C7?\u008Bu\u00C5v\b\x10\x04*p|\u00B8,\u00DC7\u00C1\b\u00C1wB\u00DEB\u00CF\u0085w\x0B\u00B7\u008B\u00EC\x12i\x14\u00D5\x11m\x113\x16\u00EB\x14\u00B7\x16\x1F\u0090\u00F0\u0092\u0098\u0095\u00A4K2\u00F0yR\x12R\u00B7\u00A5m\u00A4'eRd\u00B1\u00B2\u00F5;\u009Cw\u00AC\u00C8\x15\u00C9\x1B\u00CBO+\u00E4)\u00EA+\u00CE\u00ED<\u00ADd\u00A1\u00B4\u00AA\\\u00AD\u00E2\u00A7*\u00A4:\u00A0\u0096C\u00B0T\x07\u00F5V\u008DtMs-&\u00ADN\u00ED,\x1D{]\t=\u00A4\u00DE\u0092\u00FE\u00B0A\u00A7\u00E1\u00ED]UF\u00A7\u008C\u00B3L\x12L\u00C3\u00CC\u00C8\u00E6\u00FB\u0088\u00AE\x16\u00D6\u0096\u00E6V&\u00BBM\u00ADMmLmw\u00DB9\u00DB\u00FB8\x049\u00D2\u009C\x0E;\x17\u00ED\u00A9w\u00E9u\u009DtGx\u00C8{:x%xW\u00FA\f\u00FBr\u00EF3\u00F0#\u00FB\u009F\n\u00E8$\u00AD\u0092\u00E5)~AE\u00C1\u00FD\u00A1h\u00EA\u00EE\u00B0\u009C\u00F0\u00FEH\u009E(\u008F\u00E8\n\u00DAg\u00BAYLn\u00EC\u00DF\u00F1Z\t9\u0089c\u00C9*)GR\u00E7\u00D3,\u00D2\u00CB2~\x1C\u00F28\u00DC\u009C%\u0099\u009Dv\u00E4m\u008E\u00C9\u00D1;y\u00BE\u00F9b\x05C\u0085%'\x03O\u00CB\u009C\u00F9X\\w6\u00AD\u00D4\u00E1<\x7F\u00F9\u00E4\u0085\u00C6\u008B\u0085U\u0094\u00CB\u00D6WT\u00AFa\u00AF\u00FF\u00A8[\u00BA\u00F9\u00FE\u00D6L\u00C3D\u00E3|\u00D3\u00DA=\u00CEV\u00996\u00C7\u008E\u00E8\u00AE\u00F4G\x15\u00DD-\u00BD\x13OY\u009E\x11\x06\u00BC^\x1C\x7F\u00D53\u008C~C\x1C\u00CD\x1D\x1F{'7\u0095:3\u00F4~\u00E7\u0087\x03\u009F\u00A6\u0097l\u0097\u00AF\u00ACr\u00AC\u00C5l\u00CC|\u00B7\u00FAy\u009F\u00C1\u00D8\u00FEI\x00;\b\u0080,\u00E8\u0080=\x04\u00C1A\u00B8\x00]\u00F0\x01\u00C1\u00870FD\"\u00CA\x11CH.\u00A452\x1B\u00F9\u0098\u0089\u008D\u00C9\u0089\u00A9\u0088i\x12\u00A5\u0084JFu3\x0B1\u00872\u00B7\u00A01h*\u00BA\u009BE\u0091%\u0087\u00E5\x13\u00AB3k\x03\u009B\x04\u00DB\x11\u00B6/\u00EC>\u00EC=\x1C\u00DA\x1C\u0095\u009C|\u009C\u00879\u00D7\u00B9B\u00B8\u00DEb\u009C0\x1D\u00DC\u00DA\u00DCWydx\u00CE\u00F2\u00F2\u00F0\x1E\u00E1\u00FD\u00C5\x17\u00CF\u00B7\u00C2O\u00E5\u009F\u00C4\u00EE\u00C5\u00BE\x16p\x14\u00E8\u00C3Y\u00E1:\x04\u008D\x04\u009B\u0084t\u0085\u00EE\nk\n\u00D7\u0089\u00A8\u008B\u00DC\x10U\x17m\x123\x16\u00EB\x12\u00B7\x13\x1F\u0092\u00F0\u0097X\u0092L\u00C5\u00B3\u00E1\u008B\u00A5vJ\u00B5K\u00BBK/\u00C8d\u00CBJ\u00C86\u00EF\u00F0\u00D8\u00B1.W$o(?\u00AA\u0090\u00A1(\u00AF\u00F8|g\u00A2\x12^\u00A9G9FEJ\u00E5\u0095j\u00A6\u009A\u00A6\u00DA\f\u00A1H\u00DDZ}K\u00A3Q3JKVkD\u00FB\u00B8\u008E\u0083.Nw]oJ\u00FF\u0089A\u00A3\u00E1\u00E5]g\u008Dr\u008C\u0093M\"L\u00FD\u00CD<\u00CD\u00F7\x10\u00AD-\u008C,u\u00AD\u00B4vkY\u00EB\u00D8h\u00DB\x1A\u00D9Y\u00D9;;\u00F88\x06;%9\u00E7\u00ED\u00A9vis\x1Dv\u00DB\u00F0\x10\u00F74\u00F7\u008A\u00F4.\u00F6y\u00EA\u00CB\u00BC\u008F\u00E0\u00E7\u00E9\x7F$\u00A0\u00814E\u00C6R\u00AC\u0083\u00D2\u0082\u00EBC\u00E6\u00A82a\u00A4\u00F0\u00F2\u0088\u0089(\u00B1h\x7FZ\u00D5\u00FE\u00A5\x18\u008D\u00D8\u00A4\u00B8\u0087\t\u0098D\u008F\u00A4\u00D2\u00E4\u00D9T\u009D\x03\u00D9i/2$\x0FF\x1Cj\u00CE\u00E4\u00CA\"e\u00D7\x1D\u00F9\u009E\u00E3p\u00F4V\u009E\u00CD\u00B1\u00AD\u0082\u009AB\u00BF\u0093\u00C2\u00A7\u009E\u009E9\\\u00AC[\u00B2v\u00AE\u00B1,\u00AA\\\u00A1b\u00BE\u00F2\u00E6\u00A5\u0084j\u00D3\x1A\u00FE+\u00EF\u00AF\u00DD\u00AF=}#\u00BE>\u00F0\u00B6\u00DD\x1D\u009D\u00BB\u00EA\u00CD\u00AA\u00F7\u00B4Z\u008D\u00DA\u00BC:(]f\u008F\u00D4\u00BBEz9\u00FB\u00B6\u009En>[\x1A\u00F8\u00F0\u00E2\u00EB\u00AB\u009F\u00C3\x1CoDF\u00B5\u00C6=\u00FFN\u0099\u00AC\u009C~9\u0087\u009A\u00D7\u00FA\x18\u00BE\u00D0\u00B0\u00B4\u00F1\u00C5h\u00F5\u00E0\u00DA\u008BM\u00C5\u00EF\u00F4\u009F\u00AF\u00FE\u00F4\u009F\x03\x04A\x0E\u00F4\u00C1\tB!\x13\u00AA\u00A0\x1B\x16\x118\x04\x11\x11\u0083\u00A8FL \x05\u0091\u00EE\u00C8\"\u00E4\x04\u0093\x1CS,\u00D3c\u0094\x18*\x015\u00C4\u00AC\u00C7\\\u0081fG\u00A7\u00A0\x17YBY\u00A6X\x03X'\u00D8\u00F6\u00B1M\u00B0\x07\u00B2\u00CFrP9\u00969\x138\x19\\9\x18\x1C\u00A6\u0092[\u008D\u00BB\u008Dg\x0F\u00CF,\u00EF\x01>,_\x1D\u00BF\x03\u00FF\"\u00B6P@W`\f\u0097'\u00B8KpA\u00E8\u0092p\u00A0\u0088\u00AC\u00C8\u0090h\u00BE\u0098\u00B58B\u00BC]\"M\u00D2\x1C\u008F\u00C2wK\x1D\u0097\u00DE+\u00A3 \u00B3&\u00DB\u00B5\u00E3\u008C\\\u00B8<Q\x01\u00A7\u00F0E\u00F1\u00E9\u00CE\u00CBJ\x07\u0095}U\u008CU\u00A5\u00D5\u0098\u00D4f\t\u00BD\u00EA\u00B5\x1AE\u009A\x07\u00B5\u0082\u00B5\x1Duv\u00E9\u00AA\u00EB\u00E9\u00EA\x1B\x19\u0098\x1A\u00DA\u00EC\u00F24\"\x19\u0087\u009B\u00C4\u009B\x1E6;m~\u0099x\u00DB\u00A2\u00D3r\u00C8\u00EA\u00935\u00CAF\u00C8V\u00DB\u00CE\u00CD>\u00C6\u00E1\u0084c\u0083\u00D3\u00E8\x1E\u00B4\u008B\u0096\u00AB\u00BF[\u0081{\u00AF'\u00C2\u00CB\u00CC;\u00DD\u00A7\u00DBW`\u009F\u00BD_\u009A\x7FS\u00C0R\u00A0\"\u0099B\u00A9\x0E\u009A\x0F\u0091\x0B\u008D\u00A0\u00B6\u0084\u00A3\"\u00DC\"/D}\u00A5\u00D9\u00ED\u00AF\u00A63b\u00BD\u00E3\u009A\x13\u0084\x13\x13\u0092^\u00A4h\u00A5\u0096\u00A7\u00A1\u00D3C3\x06\x0Ei\x1D.\u00CF\u00C2d\u00C7\x1F\x19\u00CD\u00D9}\u00B4#\u00CF\u00E3\u00D8FAa\u00A1\u00E6\u0089\u00F1S\u00E9g\u00A4\u008B\x1E\u0095\u0084\u009F\x13-\u00ED8O\u00AE\u00E0\u00B8\u00D0|1\u00AC\n[\u00DDS\u0093qU\u00E7\u00DABm\u00D5\rJ\u00BD\u00E2\u00AD\u00A5\u0086\u00DA\u00C6\u00A4&\u00BB\x16\u0089{+\u00AD\u00CF\u00DA\u00EEv$u\u00CE?t|t\u00BF\u009B\u00D0s\u00B5O\u00E2\u00C9\u00C9~\u00F4\u00B3\u00A4\u00E7\u00AB\u0083\u00DE/\u009E\u00BD\u00D2\x1B*\x1F\u0086\x11\u00EF77GQc\u00EE\u00E3\u00E7'&\u00DE\u00C9N\u00FAN\x1D\u009B\u00BE732\u00BB\u00F6\x1E;\u00AF\u00F4\u00C1\u00F4\u00A3\u00E3'\u0097\x05\u00A7E\u0087%\u00DB\u00CF&\u00CB\x1A_\u00F0+\u00EC+\u009FW\x07\u00BF\u00D6\u00AD\u00E5\u00ADS7\u00CC7y6'\u00BE]\u00FF\u009E\u00FC\u00C3\u00E6\u00A7\u00E0\u00CF\u00F1\u00AD\u00B2_]\f\x06\u00C0\u00F6\u00BE\x04\x00\x00\u00EC\u00C4\u00E8\u0088h:\u00DE\u009Eh\x01\u00FF\u00BF\x12\x19\x11\u00F7\x0F\x07\x0F\x00pRcm\u00DC\x00\x00\x0B\x00\x03\u00C1t+\x17\x000\x07\u0080\u0099\u00A8@G'\x00\u00E0\x03@\u00C8\x05\u00C5X\u00BA\u00FE\u00C6z\u00C1T+\u009B\u00EDX\u0084--\u00D6\u00D9\r\x00\u0084\x00\x10>\u00C9\u00A1n\u009E\x00\u0080\x01@\u00D0\u00C3H\u00B6\u00CE\u00BFqFT\u0084\u00A3=\x00\u00E0\x00\x10\u00F9\u0094 \x0B\u00CB\u00DF\u00B1\u0097\u00E8q.\u00EE\x00 \x0B\u0080h\b\u008F\u00B6s\x01\x00N\x00\u00C4HP\u0094\u00FB?\\31\u00F1\u00AE\u00FF\u00F8\u00AFSH\x16v\x00 \x06\u0080D'\u0087\x12\x1D\u00B7\u00FD\u0091\u00D2`\x0FD\u00B0\x00<\u0090!\x1A\" \x1A\u00E8@\u0085^ \x03\x1DH\x10\x05xx\x07x \x03\x1D\u00A8\x10\x03\u00B1@\u00828H\x04<D\x00\x15\u00F6C\x1CP\u0081\x02A\x10\u00F3;>\x0E\" \b\u00E2\u0080\x0EV@\x02:\u0084@\x10\u00A8\u00FCf\u00F8\u00EF<\x1E0\x03t\u00A0\u00FE/\x1ET\u00A0@\u00B4?\u00F5\x10=\u00F2Vp|qt\u0092\u0081G(\u00E1\x1A\u00E1\x03\u00E1'\u00E0\x7F{\u00DB\u00FDa\f\u0082\u00A8?\u0099\u00B6\u00D9\x03\u00FF\u00D1Qr(\r\u00946\u00CA\x1Ce\u00842F\u00E9\x03\x1E\u0085C\u0089\u0080\nJ\x0B\u00A5\u00872C\u0099\u00A0\fQ\u00DA(\u00FDg\x0Bw\x17\u00FEd%\u00FE\u00A9\x00\u00FF'\u00E3\f\u00D0!\u00E4?jU\u0081` \x01\x1D\u00E2!\bb \x1C\u00E6\u0080\x0E\u0091\u00FE\u00D4C\u00FF\u00C6\u00C1\u00F6\u00AE\x0E\x00\u0080\u00E6\x01(\r\x00\x00h\u00DBL\u00C9\u00F8\u00CFw\x15\x1B\u0094\x18\x0B\x00@\u008C\u00A6%\u00D1\u00A9!\u00A1\u00B1x3\x1A-\"\bO\u008C\u008E\u00A4\u00C5\u00C5\x06\u00D1\u0095\u00F16QdUe\u00BC\x06\u0081\u00A0\r\x00\u00F0_\x14\u00F7T\u00A9\u00D4J\u008B\u00F2\x00\x00\x00 cHRM\x00\x00m\u0098\x00\x00s\u008E\x00\x00\u00E2\u00F9\x00\x00\u0086\u0099\x00\x00x\u0083\x00\x00\u00D4N\x00\x003\u00BC\x00\x00\x1Cyc\u00E1\x1F,\x00\x00\x00\u00A2IDATx\u00DA\u0094\u0091\u00B1\r\u00840\x10\x04\u00C7>\x07\u00D0\n=P\x07\x05\u0090\"\u008AA\u00A4\u00D4@\x05n\u00C3]\\\u008C\x03l\x7F\u00F0\x12\u00C9\x0B\u00F0_x\u00BA\u00DB\u00DD\u00D1\x1AU-)%D\x04\x11!\u00E7L)\u0085\u00DAq\x00\"\u0082\u00B5\u0096\u0094\u00D2\u00CF\u00C14M\u00B7\u00CF\u00EB\u00BAbT\u00B5\x18cn]\u009B\u00A6\u00B9\x15\u00881~\x13<E\u008E1\u00BE#\u00EC\u00FB\u008E\u00F7\u00FEZ\u00F6}\u00CF0\f\u00F5\b\u00CE9\u0096e!\u0084@\u00D7u\u00CC\u00F3\u00CCy\u009EU\bFU\x0B@\u00CE\u0099m\u00DB\x18\u00C7\x11kmu\x0B\u0097\x00@\u00DB\u00B6\x1C\u00C7\u00F1\x7F\x0BO\x0Eo\b\u009F\x01\x00\u009B\u00FDU\u00A2t\u00A1Hz\x00\x00\x00\x00IEND\u00AEB`\u0082"));
              // create a data folder for your script in the user's application data
              var myDataFolder = new Folder( Folder.userData.absoluteURI + "/SampleScripts" );
              // make certain the folder exists
              myDataFolder.create();
              // write the image file
              var myFile = new File( myDataFolder.absoluteURI + "/myFile.png" );
              myFile.encoding = "BINARY";
              myFile.open( "w" );
              myFile.write( myBinary );
              myFile.close();
              // there is now a valid png image in your script's user data folder
         // example of using ScriptUI's drawing api to make a dropdownlist draw as an icon (until the user clicks it, then it's a menu)
         myFlyout = function( palette ) {
              palette.myFlyout = palette.add( "dropdownlist", [ ( palette.frameSize.width - 20 ), 0, palette.frameSize.width, 20 ] );
              palette.myFlyout.onDraw = function() {
                   this.graphics.drawImage( ScriptUI.newImage( myIconFile ), 0, 0 );
              if ( !palette.onShow ) {
                   palette.onShow = function() {
                        this.myFlyout.draw( this );
         // A slightly more complex example putting it all together where you can pass a callback function and an array of menu items
        // this function will add a flyout menu to the top-right corner of any ScriptUI window. It does not need to be a palette.
         addFlyout = function( palette, menuItems, callback ) {
              // create a script data folder to contain resources such as the flyout icon
              var myScriptDataFolder = new Folder( Folder.userData.absoluteURI + "/SampleScripts" );
              myScriptDataFolder.create();
              // point a file to the expected location of the icon image
              var myFlyoutIcon = new File( myScriptDataFolder.absoluteURI + "/flyoutIcon.png" );
              if ( !myFlyoutIcon.exists ) { // if it's not there, then create the file
                   var binData = (new String("\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\t\b\x06\x00\x00\x00;*\u00AC2\x00\x00\x00\tpHYs\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\u009A\u009C\x18\x00\x00\x0FciCCPPhotoshop ICC profile\x00\x00x\u00DA\u00ADWi8\x14\u00EC\u00D7?3\u00C6\u00D8\u00C76\u00C6\u00CEX\u00B2d\x1B\u00FB\u0096u\u0090\u009D\u00EC$\u008C\x19\u00CBX\u00A7\u00B1/\u00A1B\u008F\u0088\u00B4\u00A1\u0088\x14i\u00A1\u0094\u0084\u0092\u00AD\u00B2\u0094\u00A2\x12ey\u00B2\u00A6B\"K\u008B\u00E6\u00FD\u00A0\u00A7\u00E7\u00BA\u00FE\u00EF\u00F5\u00BE\u00EF\u0097\u00F7|\u00FA\u009Ds\u009Ds~\u00E7\u00BE\u00CF}]\u00E7>\x00\u00BCB$\x1A-\x02\t\x00\u0091Q\u00B1t\u0097\u00DD\u00E6x/o\x1F<\u00CBk\u00E0\x04~\u00C0\u0082>H\u0092\u00C8143gg{\u00F8\x1Fe\u00FD5 \x00\x00^\u00AA\u0090h\u00B4\u0088|\u00F6\x00J\u00DF\u00D4\u00D9\u0092z\u00C3\x15\u00E7/\u00B2\u0087d\u00E1\x7F\x17\f\u00DD\u00CB\u00DB\x07\x00\u00A1\f\x00\u00D8\u0090ml\n\x00\u00D8\u00C0m\u00EC\x06\x00\u00D8\u0084XZ,\x00\"\x14\x00\u00B0\u00E4P\x12\x05\x00\u0091\n\x00\u00CAt7\x17\"\x00\u00A2\x06\x000!\u00DB\u00B8\t\x000\u0081\u00DB\u00B8\x07\x000\u00F1\u00E4\u0090X\x00\u00C4\b\x00\u009A/\u008AB\u008D\x02`Y\x00@\x1BS\u0082b\u00C8\x00\x18e\x00\u00A0Pb\u00C8\u0091\x00\u0098\u00E3\x00H\u00D5\u00C8\u00C8h\n\x00O;\x00(\u0090i\u00F4X\x00\u009Ey\x00P\u00F1\u00F2\u00F6\u00C1o\u0097L\u00D9\x000@\x01\u00A0\u00DF\u00FEk\x0B\u0093\x02\u00A8\u00BD\x03 &\u00F5\u00AFM\u00FE\x01\u0080\x10\t\u00E0\u00E6\u00CE\x7Fm\u00AB.\u0080\x00\x00\x04\u00EEyL\u00B0\u00A6\x06\x00\x00 8\u00CD\x01\u0098'\x18\u008CU9\x00\u0096\x13\x00[\u0085\f\u00C6\u008FJ\x06c\u00EB\"\x00\u00D3\x18@{\x049\u008E\x1E\u00FF\u00FB\u00BE\x10\u0088~\u0080\u00FFK\u00DF>\u00F3oaB\x00 \x01\u0090jL\u008E\u00A8P\u00E6\x03\u00E8\x12\u0096\u009B\u00AC\u009Dl#\u00EC\u009F8V\u00B8\u00D81\u0082\u00DCR<*\u00BC\x06|f\u00FC\u00F6X7\x01O\u009C\u009F Y\u0088*L\x13\u0089\x11\u008D\x15\u008B\x13O\u0094H\u0091\u00CC\u00C0gJeJ\x1F\u00919*\u009B\u00BF\u00E3\u00B4\u00DC9\u00F9\n\u0085\x1A\u00C5\x1B;\u009B\u0094\u00BA\u0095\u0087T&U\u00D7\t\u00EC\u00EA\u00D2\x1A\u009A\u009A\u00EEZ)\u00DA\x15:}\u00BA\u009B\u00FA\u008A\x06$\u00C3s\u00BB\u00C6\u008D%M\u00A8\u00A6w\u00CD9\u0089\u00FB,n[\u00F1\u00ED\u00A6[\x0F\u00DA\u00AA\u00D9\x1D\u00B3\u00FF\u00E2h\u00EFT\u00B7\u0087\u00DB%\u00C2\u00B5\u00CF]\u00D4#\u00C2\u00F3\u00817\u00C6\u00C7\x7Fo\u008D\u00EFW?\u00A2\u00FF\u00D1\u0080\u00FE@n\u00B2\x13\u00E5D\u00D0\u00F3\x10\u00F6P3j\\X]\u00F8d$\x7F\u0094Et\x02\u00ED\u00FA\u00FE\u00B71\u00A8XB\u009C\x7F|^\u00C2\u00FD\u00C4\u00F9d\u00DE\x14\u00E3T\u00DA\u0081\u00F2\u00B4\u00EE\u00F4\u00B1\u008C\u00A9\u0083\u00B3\u0087\x16\x0E/g\u00AEd\u00ADgo\u00FD\u0085\u00CA\u00E1<\u00CA\u009B+\u0090'~L!_\u00B3\u00C0\u00F0\u00B8Y\u00A1\u00F5\u0089='=N\u00F9\u009C\u00F6;C.\u00A2\x16\u0087\u0097\u0084\u009F\u00A5\u009E\u00A3\u0096\u0086\u0095\u0085\u009E'\u0095\u00FBT\u00B8^\u00B0\u00AB4\u00BD\u00A8~I\u00B1J\u00BEz\u00C7e\u00E9\x1A\u00FC\x15\u00F1\u00AB\u00C2\u00D7\x04\u00AE\u00F3\u00D6\u00F2\u00D4q\u00DE`\u00BE\u00F1\u00EB\u00E6f\u00FD\u00EA\u00AD\u00C5\u00DB\u00B3\r\u00A3w\x06\x1B\u009F\u00DE\u00EDjjn\u00AEo\u00B9~\u00EF\u00CA\u00FD\x0B\u00ADg\x1E\u00E4\u00B7\x1Dm\u00CF\u00EC8\u00D8\u0099\u00DCE\x7F\x18\u00F5(\u00EAqD7\u00A9\u0087\u00D8\u008B\u00EB\u009D\u00EA\u00BB\u00F5$\u00FD\u00A9m\u00BF`\u00FF\u00DC\u00B3\u0086\u00E7\u0099\x03.\u0083\u0092\u0083\u008B/\u00DA_\x16\u00BE\u00F2\x1FR\x19\u00FA\u00FE\u00FA\u00C9p\u00D1\b\u00E9\u008D\u00CA\u009Boo\x1F\u008F\x16\u008Cy\u008C\u008B\u008F\u00CFL\u00D4\u00FEM\x7F\u00A7\u00F3\u00EE\u00DBd\u00CBT\u00CA\u00B4\u00C1\u00F4\u00FAL\u00E3l\u00EA\u009C\u00D9{\u00A6\u00F7\u00BD\u00F3y\x1F\x1C?\u00F2||\u00F9\u00A9h\u00C1kQhqd\u00A9\u00F8\u00B3\u00D7\u00B2\u00D0\u00F2\u00D0\u0097\u00C2\x15\u00C7U\u00AE\u00D5\u00DE\u00AF\u0099kfk\u008C\u00F5\x07\x1B\u00C9\u009B\u00DA\u009B\u00CB\u00DFj\u00BF\u0087\u00FFP\u00FC1\u00F7\u00B3r+\u00E0\u0097\u00E4\u00AF\u00B7\u008C\u00FD\f\x06\x00\x12\u00C5\u00C4\u0087\u00C21c\u00D1\x02,\u00DC\u00AC\x1Cl\u00ACl[\u00EC\u00DF8>s\u00CEp\u00BD\u00C1\u00F4sw\u00F0\u00D4\u00F3V\u00F2\u009D\u00E2\u00CF\u00C2&\b\u0084\u00E3\u00F6\t:\t\x11\u0085\u00F5EtD\u0095\u00C5\u00D4\u00C4U%t$\u008D\u00F1\u0096R&\u00D2z2*\u00B2\u00CA;\u0094\u00E5v\u00CA\x13\x14\u0094\x15\t;u\u0094\u0088\u00CA\u00B6*^\u00AAT\u00B5$B\u008Ez\u0099F\u00A3\u00E6s\u00AD%\x1D^]-=W\u00FDd\u0083\u00CB\u0086\u00C3F\u00AC\u00C6\u00DA&\u00FBMk\u00CD\u00E6\u0089J\x16\u00E1\u00967\u00AC6\u00AD-mrmG\u00EC\u00D5\x1DR\x1D\x07\u009DE\u00F7\u0084\u00B84\u00BA!\u00DC\x1D<Nx\u008Ey+\u00FA\u00D0\u00F6\u00DE\u00F2\u00DD\u00F0\u00D3\u00F3?\x10\u00D0F\u00DA\"\x1BR\u00E2\u0083\u00EE\x06\u00AF\u0086\u00AAR\u00C3\u00C2\u00AE\u0086\x7F\u008C\u0094\u008B\u00F2\u008D.\u00A6\u00BD\u00A6\u00F3\u00C7\u00B8\u00C5\x16\u00C6\u00F5%\u00B0&\u00DA'\u00E5'?J\u0099N\u00FDt\u00E0s\u00DAZ\u00FA\u00B7\u008C\u00EF\x07\x7F\x1Df\u00CE\u00E4\u00CC\u00E2\u00CF\x16>\"\u00FE\u0097l\x0E\u00E1\u00A8A\u00AEy\u009E\u00CD1\u00A7|\u00AF\x02\u00DF\u00E3\x01\u0085\u0094\x13a'\u00A3O\u00D1N\u00D3\u00CFD\x17E\x15\u00D3J\"\u00CF\x06\u009F\x0B(\u00F5*s>oY\u00AES\u00A1rA\u00A5R\u00F9\u00A2\u00E2%\u00C5*\u0085j\u00B9\u00CB\u00B252Wd\u00AF\u00CA\\\u0093\u00BC.V+R'|C\u00E8\u00A6@=\u00DF-\u00EE\u00DB\u00DC\r\u0098;\\\u008D\\wy\u009Bp\u00CDB-B\u00F7D\u00EF\u00E3[\u00E5\x1F\u00A8\u00B6i\u00B7\u00EBw\u0098w:v\u00F9<\u00DC\u00FBh\u00F7c\u00FC\u00E3\u0095\u00EE\u00DE\u009E\u00D2\u00DE\u00C8>\u00B3'\u0082O\x16\u009F>\u00EA/y\x16\u00F9\u009C8 >\u00B0>\u00D8\u00FF\u00A2\u00F2e\u00C2+\u00C7!\u00E9\u00A1\u00B5\u00D7\u00BD\u00C3\u00A5#\u00D1o\u00CC\u00DE\u00F2\u00BE\x1D\x1F\u00BD>\u0096:n=\u00C1;1\u00FAw\u00E5\u00BB\u00B0I\u00D5\u00C9\u00E5\u00A9\u00A6\u00E9\u00E33\u00A1\u00B3&s\u0082s\u008B\u00EF\x1F\u00CE\u0097|\u0088\u00FAh\u00F9I\u00F8\u00D3\u00C7\u0085\u00FB\u008B\u00C7\u0096\u00F6}V\u00FD\u00FCc\u00B9\u00FB\u00CB\u0089\x15\u00BFU\u00C5\u00D5\u0095\u00AF\u00F7\u00D6\u00B2\u00D7\u009D7\u00846\u00C66+\u00BFQ\u00BF\x13\u00BEo\u00FE\u00B8\u00FF3c\u00CB\u00F2\x17\u00E6\u00D7sF\u00E4v\u00FF\u0091\x1BL\u00CB\u00A8\u00AF\u00CC\u009F\u00D1\u008B,\u008B\u00AC\u008Bl\x13\u00EC\u00A3\x1C\u00AF8\u009Fp\u00B5b\u00EA\u00B8\u00CByry\x13\u00F8(\u00FC\u00F6X\u0082\x00\u00B7\u00C0*nP\u00F0\u009AP\u00A6\u00B0\u00AF\bA\u0094YtX\u00ACJ<N\u00C2R\u0092[r\x1C_%\x15)m \u0083\u0096y-{eG\u009A\u009C\u00BB\u00BC\u00B2\x02\u00AB\u00C2{\u00C5\u00EE\u009D5J\u00C7\u0094cU\u00F6\u00AA\u009A\u00AB\u00A9\x12\u00C4\u00D4\u00D9\u00D474f5\x07\u00B5\u00DA\u00B5o\u00EA\u0094\u00E9\u00E6\u00E8\u00C5\u00EB\u0093\f\u00EC\rw\u00ED\u00C2\x1B\u00A1\u008D\u0096\u008D\u0087L\u00EE\u0098\u009E4\u008B7\u00A7\x12=-\u00AC,\u00F5\u00AC\u00E4v\x0BY3[\u00AF\u00DB|\u00B0}c\u00D7c\u00DF\u00E8P\u00EDX\u00EC\u0094\u00E3\u009C\u00B8'\u00C4\u00C5\u00C3\u00D5\u00DE\u00CD\u00D0]\u00D9C\u00D2\x13\u00E7\u00C5\u00E5\u008D\u00F4\u00FE\u00EA\u00F3a\u00EF\u0094\u00EF\u00DB}\u00AF\u00FC\u00FA\u00FD\u00BB\x02\x1E\u0090Z\x03[\u00C8\u00B7(\x17\u0083r\u0082\u00E9!\u00FE\u00A1\u00D6T\u00B50\u0091p\u0096\u00F0\u00B5\u0088\u0099\u00C8\u00C1\u00A8\x07\u00D1u\u00B4\u00CA\u00FDg\u00E8\x7F\u00C5$\u00C6\u0086\u00C6\u00F9\u00C5;&\x18'\u00AA%I%cSP)\u00AB\u00A9\u00EF\x0E<K{\u0090~-\u00E3\u00D4\u00C1\u00F4C\u00C1\u0087\u009D2\u00B5\u00B2p\u00D9\u0088\u00EC\u008D#\u008B\x7FM\u00E7\u00BC=:\u0090\u00DB\u009D\u00D7r\u00ECF~MA\u00E9\u00F1\u00DC\u00C2\u00F4\x13\u00B4\u0093\u0094S\u00EE\u00A7\u00AD\u00CEh\x15\u00C9\x16\x0B\u00940\u0097|=;{n\u00A4\u00B4\u00BF\u00EC\u00C1\u00F9\u00EB\u00E5e\x15'/dU\u00A6^\u008C\u00BED\u00AA\u00F2\u00AC\u00DEs\u00D9\u00A6\u00C6\u00F0\u008A\u00F4U\u00B8:v\u00ED\u00FE\u00F5\u00E2Zz\u009D\u00D3\r\u00D5\u009B\u0098\u009BK\u00F5\u00FD\u00B7\u00AE\u00DC\u00CEm\u0088\u00BE\u00E3\u00DA\u00A8}\x17ww\u00A3i\u00AC\u00B9\u00B5\u00A5\u00EC^\u00DA}R+\u00F1\u00C1\u008E6\u00E6\u00B6\u00E9\u00F6\u00AE\u008E\u00EA\u00CE\u00CC.\u00D2C\u00A3G\"\u008F\u00D6\x1F\x0FtW\u00F5\u00E4\u00F6\u0096\u00F6u<\u0099z\u00CAx&\u00F2\\\x7F\u00C0g0\u00F5E\u00E9\u00CB\u009EW\u008B\u00AF\u00C5\u0086\u009DFr\u00DF<\x1D\u00E5\x1F\x0B\x18o\u00FE\u009B\u00FF]\u00FA\u00E4\u00D7\u00E9\u0083\u00B3\u0098\u00B9\u00CB\u00F3\u00CE\x1Fy?\u00BD^\u00AC\u00FB|\u00E6K\u00E1j\u00D9Z\u00FD\u00C6\u00DCw\u00FC\u00CF\u0080_i\f\x06\u00C0\u00F6\u00EC\x03\x00@\u00EB\x00\x14\u00C7\x01xM\x02\u00B8T\x01\x14l\x01(p\x02\u00E0j\x00\u009C\u00B9\x00\u00DC\u00F4\x01\u00D1Y\x00\u0088kY\u00800/\u00F8g~\x00\x00\x12X\u0081\x17$@\x05L\u00C0\r\" \x1B.\u00C2C\u0098E\u00B0#4\x10\u00BE\u0088\u00BF\x10M\u0088\x0FHq\u00A4;2\x1F\u00D9\u00C7\u00C4\u00CAd\u00CD\u0094\u00CB4\u0088\x12AQP\u00F5(\x06\u00B3\x13\u00F3E\u00E6ohg\u00F4U\x16\x14\x0B\u0089\u00A5\u009DU\u008A\u00F50\u00EB<\u009B\x03[=\u00BB\b{&\u00FB\x02\u0087'G'\u00A7\x06g\x19\x17\x0BW\x1C\u00D7\x14\u00C6\t\u00D3\u00CA\u00AD\u00C4]\u00CC\u00C3\u00C2\x13\u00C33\u00C9\u00EB\u00CC\u00DB\u00CA\u00A7\u00C4W\u00CC\u00CF\u00CC\x1F\u00C7?\u008Bu\u00C5v\b\x10\x04*p|\u00B8,\u00DC7\u00C1\b\u00C1wB\u00DEB\u00CF\u0085w\x0B\u00B7\u008B\u00EC\x12i\x14\u00D5\x11m\x113\x16\u00EB\x14\u00B7\x16\x1F\u0090\u00F0\u0092\u0098\u0095\u00A4K2\u00F0yR\x12R\u00B7\u00A5m\u00A4'eRd\u00B1\u00B2\u00F5;\u009Cw\u00AC\u00C8\x15\u00C9\x1B\u00CBO+\u00E4)\u00EA+\u00CE\u00ED<\u00ADd\u00A1\u00B4\u00AA\\\u00AD\u00E2\u00A7*\u00A4:\u00A0\u0096C\u00B0T\x07\u00F5V\u008DtMs-&\u00ADN\u00ED,\x1D{]\t=\u00A4\u00DE\u0092\u00FE\u00B0A\u00A7\u00E1\u00ED]UF\u00A7\u008C\u00B3L\x12L\u00C3\u00CC\u00C8\u00E6\u00FB\u0088\u00AE\x16\u00D6\u0096\u00E6V&\u00BBM\u00ADMmLmw\u00DB9\u00DB\u00FB8\x049\u00D2\u009C\x0E;\x17\u00ED\u00A9w\u00E9u\u009DtGx\u00C8{:x%xW\u00FA\f\u00FBr\u00EF3\u00F0#\u00FB\u009F\n\u00E8$\u00AD\u0092\u00E5)~AE\u00C1\u00FD\u00A1h\u00EA\u00EE\u00B0\u009C\u00F0\u00FEH\u009E(\u008F\u00E8\n\u00DAg\u00BAYLn\u00EC\u00DF\u00F1Z\t9\u0089c\u00C9*)GR\u00E7\u00D3,\u00D2\u00CB2~\x1C\u00F28\u00DC\u009C%\u0099\u009Dv\u00E4m\u008E\u00C9\u00D1;y\u00BE\u00F9b\x05C\u0085%'\x03O\u00CB\u009C\u00F9X\\w6\u00AD\u00D4\u00E1<\x7F\u00F9\u00E4\u0085\u00C6\u008B\u0085U\u0094\u00CB\u00D6WT\u00AFa\u00AF\u00FF\u00A8[\u00BA\u00F9\u00FE\u00D6L\u00C3D\u00E3|\u00D3\u00DA=\u00CEV\u00996\u00C7\u008E\u00E8\u00AE\u00F4G\x15\u00DD-\u00BD\x13OY\u009E\x11\x06\u00BC^\x1C\x7F\u00D53\u008C~C\x1C\u00CD\x1D\x1F{'7\u0095:3\u00F4~\u00E7\u0087\x03\u009F\u00A6\u0097l\u0097\u00AF\u00ACr\u00AC\u00C5l\u00CC|\u00B7\u00FAy\u009F\u00C1\u00D8\u00FEI\x00;\b\u0080,\u00E8\u0080=\x04\u00C1A\u00B8\x00]\u00F0\x01\u00C1\u00870FD\"\u00CA\x11CH.\u00A452\x1B\u00F9\u0098\u0089\u008D\u00C9\u0089\u00A9\u0088i\x12\u00A5\u0084JFu3\x0B1\u00872\u00B7\u00A01h*\u00BA\u009BE\u0091%\u0087\u00E5\x13\u00AB3k\x03\u009B\x04\u00DB\x11\u00B6/\u00EC>\u00EC=\x1C\u00DA\x1C\u0095\u009C|\u009C\u00879\u00D7\u00B9B\u00B8\u00DEb\u009C0\x1D\u00DC\u00DA\u00DCWydx\u00CE\u00F2\u00F2\u00F0\x1E\u00E1\u00FD\u00C5\x17\u00CF\u00B7\u00C2O\u00E5\u009F\u00C4\u00EE\u00C5\u00BE\x16p\x14\u00E8\u00C3Y\u00E1:\x04\u008D\x04\u009B\u0084t\u0085\u00EE\nk\n\u00D7\u0089\u00A8\u008B\u00DC\x10U\x17m\x123\x16\u00EB\x12\u00B7\x13\x1F\u0092\u00F0\u0097X\u0092L\u00C5\u00B3\u00E1\u008B\u00A5vJ\u00B5K\u00BBK/\u00C8d\u00CBJ\u00C86\u00EF\u00F0\u00D8\u00B1.W$o(?\u00AA\u0090\u00A1(\u00AF\u00F8|g\u00A2\x12^\u00A9G9FEJ\u00E5\u0095j\u00A6\u009A\u00A6\u00DA\f\u00A1H\u00DDZ}K\u00A3Q3JKVkD\u00FB\u00B8\u008E\u0083.Nw]oJ\u00FF\u0089A\u00A3\u00E1\u00E5]g\u008Dr\u008C\u0093M\"L\u00FD\u00CD<\u00CD\u00F7\x10\u00AD-\u008C,u\u00AD\u00B4vkY\u00EB\u00D8h\u00DB\x1A\u00D9Y\u00D9;;\u00F88\x06;%9\u00E7\u00ED\u00A9vis\x1Dv\u00DB\u00F0\x10\u00F74\u00F7\u008A\u00F4.\u00F6y\u00EA\u00CB\u00BC\u008F\u00E0\u00E7\u00E9\x7F$\u00A0\u00814E\u00C6R\u00AC\u0083\u00D2\u0082\u00EBC\u00E6\u00A82a\u00A4\u00F0\u00F2\u0088\u0089(\u00B1h\x7FZ\u00D5\u00FE\u00A5\x18\u008D\u00D8\u00A4\u00B8\u0087\t\u0098D\u008F\u00A4\u00D2\u00E4\u00D9T\u009D\x03\u00D9i/2$\x0FF\x1Cj\u00CE\u00E4\u00CA\"e\u00D7\x1D\u00F9\u009E\u00E3p\u00F4V\u009E\u00CD\u00B1\u00AD\u0082\u009AB\u00BF\u0093\u00C2\u00A7\u009E\u009E9\\\u00AC[\u00B2v\u00AE\u00B1,\u00AA\\\u00A1b\u00BE\u00F2\u00E6\u00A5\u0084j\u00D3\x1A\u00FE+\u00EF\u00AF\u00DD\u00AF=}#\u00BE>\u00F0\u00B6\u00DD\x1D\u009D\u00BB\u00EA\u00CD\u00AA\u00F7\u00B4Z\u008D\u00DA\u00BC:(]f\u008F\u00D4\u00BBEz9\u00FB\u00B6\u009En>[\x1A\u00F8\u00F0\u00E2\u00EB\u00AB\u009F\u00C3\x1CoDF\u00B5\u00C6=\u00FFN\u0099\u00AC\u009C~9\u0087\u009A\u00D7\u00FA\x18\u00BE\u00D0\u00B0\u00B4\u00F1\u00C5h\u00F5\u00E0\u00DA\u008BM\u00C5\u00EF\u00F4\u009F\u00AF\u00FE\u00F4\u009F\x03\x04A\x0E\u00F4\u00C1\tB!\x13\u00AA\u00A0\x1B\x16\x118\x04\x11\x11\u0083\u00A8FL \x05\u0091\u00EE\u00C8\"\u00E4\x04\u0093\x1CS,\u00D3c\u0094\x18*\x015\u00C4\u00AC\u00C7\\\u0081fG\u00A7\u00A0\x17YBY\u00A6X\x03X'\u00D8\u00F6\u00B1M\u00B0\x07\u00B2\u00CFrP9\u00969\x138\x19\\9\x18\x1C\u00A6\u0092[\u008D\u00BB\u008Dg\x0F\u00CF,\u00EF\x01>,_\x1D\u00BF\x03\u00FF\"\u00B6P@W`\f\u0097'\u00B8KpA\u00E8\u0092p\u00A0\u0088\u00AC\u00C8\u0090h\u00BE\u0098\u00B58B\u00BC]\"M\u00D2\x1C\u008F\u00C2wK\x1D\u0097\u00DE+\u00A3 \u00B3&\u00DB\u00B5\u00E3\u008C\\\u00B8<Q\x01\u00A7\u00F0E\u00F1\u00E9\u00CE\u00CBJ\x07\u0095}U\u008CU\u00A5\u00D5\u0098\u00D4f\t\u00BD\u00EA\u00B5\x1AE\u009A\x07\u00B5\u0082\u00B5\x1Duv\u00E9\u00AA\u00EB\u00E9\u00EA\x1B\x19\u0098\x1A\u00DA\u00EC\u00F24\"\x19\u0087\u009B\u00C4\u009B\x1E6;m~\u0099x\u00DB\u00A2\u00D3r\u00C8\u00EA\u00935\u00CAF\u00C8V\u00DB\u00CE\u00CD>\u00C6\u00E1\u0084c\u0083\u00D3\u00E8\x1E\u00B4\u008B\u0096\u00AB\u00BF[\u0081{\u00AF'\u00C2\u00CB\u00CC;\u00DD\u00A7\u00DBW`\u009F\u00BD_\u009A\x7FS\u00C0R\u00A0\"\u0099B\u00A9\x0E\u009A\x0F\u0091\x0B\u008D\u00A0\u00B6\u0084\u00A3\"\u00DC\"/D}\u00A5\u00D9\u00ED\u00AF\u00A63b\u00BD\u00E3\u009A\x13\u0084\x13\x13\u0092^\u00A4h\u00A5\u0096\u00A7\u00A1\u00D3C3\x06\x0Ei\x1D.\u00CF\u00C2d\u00C7\x1F\x19\u00CD\u00D9}\u00B4#\u00CF\u00E3\u00D8FAa\u00A1\u00E6\u0089\u00F1S\u00E9g\u00A4\u008B\x1E\u0095\u0084\u009F\x13-\u00ED8O\u00AE\u00E0\u00B8\u00D0|1\u00AC\n[\u00DDS\u0093qU\u00E7\u00DABm\u00D5\rJ\u00BD\u00E2\u00AD\u00A5\u0086\u00DA\u00C6\u00A4&\u00BB\x16\u0089{+\u00AD\u00CF\u00DA\u00EEv$u\u00CE?t|t\u00BF\u009B\u00D0s\u00B5O\u00E2\u00C9\u00C9~\u00F4\u00B3\u00A4\u00E7\u00AB\u0083\u00DE/\u009E\u00BD\u00D2\x1B*\x1F\u0086\x11\u00EF77GQc\u00EE\u00E3\u00E7'&\u00DE\u00C9N\u00FAN\x1D\u009B\u00BE732\u00BB\u00F6\x1E;\u00AF\u00F4\u00C1\u00F4\u00A3\u00E3'\u0097\x05\u00A7E\u0087%\u00DB\u00CF&\u00CB\x1A_\u00F0+\u00EC+\u009FW\x07\u00BF\u00D6\u00AD\u00E5\u00ADS7\u00CC7y6'\u00BE]\u00FF\u009E\u00FC\u00C3\u00E6\u00A7\u00E0\u00CF\u00F1\u00AD\u00B2_]\f\x06\u00C0\u00F6\u00BE\x04\x00\x00\u00EC\u00C4\u00E8\u0088h:\u00DE\u009Eh\x01\u00FF\u00BF\x12\x19\x11\u00F7\x0F\x07\x0F\x00pRcm\u00DC\x00\x00\x0B\x00\x03\u00C1t+\x17\x000\x07\u0080\u0099\u00A8@G'\x00\u00E0\x03@\u00C8\x05\u00C5X\u00BA\u00FE\u00C6z\u00C1T+\u009B\u00EDX\u0084--\u00D6\u00D9\r\x00\u0084\x00\x10>\u00C9\u00A1n\u009E\x00\u0080\x01@\u00D0\u00C3H\u00B6\u00CE\u00BFqFT\u0084\u00A3=\x00\u00E0\x00\x10\u00F9\u0094 \x0B\u00CB\u00DF\u00B1\u0097\u00E8q.\u00EE\x00 \x0B\u0080h\b\u008F\u00B6s\x01\x00N\x00\u00C4HP\u0094\u00FB?\\31\u00F1\u00AE\u00FF\u00F8\u00AFSH\x16v\x00 \x06\u0080D'\u0087\x12\x1D\u00B7\u00FD\u0091\u00D2`\x0FD\u00B0\x00<\u0090!\x1A\" \x1A\u00E8@\u0085^ \x03\x1DH\x10\x05xx\x07x \x03\x1D\u00A8\x10\x03\u00B1@\u00828H\x04<D\x00\x15\u00F6C\x1CP\u0081\x02A\x10\u00F3;>\x0E\" \b\u00E2\u0080\x0EV@\x02:\u0084@\x10\u00A8\u00FCf\u00F8\u00EF<\x1E0\x03t\u00A0\u00FE/\x1ET\u00A0@\u00B4?\u00F5\x10=\u00F2Vp|qt\u0092\u0081G(\u00E1\x1A\u00E1\x03\u00E1'\u00E0\x7F{\u00DB\u00FDa\f\u0082\u00A8?\u0099\u00B6\u00D9\x03\u00FF\u00D1Qr(\r\u00946\u00CA\x1Ce\u00842F\u00E9\x03\x1E\u0085C\u0089\u0080\nJ\x0B\u00A5\u00872C\u0099\u00A0\fQ\u00DA(\u00FDg\x0Bw\x17\u00FEd%\u00FE\u00A9\x00\u00FF'\u00E3\f\u00D0!\u00E4?jU\u0081` \x01\x1D\u00E2!\bb \x1C\u00E6\u0080\x0E\u0091\u00FE\u00D4C\u00FF\u00C6\u00C1\u00F6\u00AE\x0E\x00\u0080\u00E6\x01(\r\x00\x00h\u00DBL\u00C9\u00F8\u00CFw\x15\x1B\u0094\x18\x0B\x00@\u008C\u00A6%\u00D1\u00A9!\u00A1\u00B1x3\x1A-\"\bO\u008C\u008E\u00A4\u00C5\u00C5\x06\u00D1\u0095\u00F16QdUe\u00BC\x06\u0081\u00A0\r\x00\u00F0_\x14\u00F7T\u00A9\u00D4J\u008B\u00F2\x00\x00\x00 cHRM\x00\x00m\u0098\x00\x00s\u008E\x00\x00\u00E2\u00F9\x00\x00\u0086\u0099\x00\x00x\u0083\x00\x00\u00D4N\x00\x003\u00BC\x00\x00\x1Cyc\u00E1\x1F,\x00\x00\x00\u00A2IDATx\u00DA\u0094\u0091\u00B1\r\u00840\x10\x04\u00C7>\x07\u00D0\n=P\x07\x05\u0090\"\u008AA\u00A4\u00D4@\x05n\u00C3]\\\u008C\x03l\x7F\u00F0\x12\u00C9\x0B\u00F0_x\u00BA\u00DB\u00DD\u00D1\x1AU-)%D\x04\x11!\u00E7L)\u0085\u00DAq\x00\"\u0082\u00B5\u0096\u0094\u00D2\u00CF\u00C14M\u00B7\u00CF\u00EB\u00BAbT\u00B5\x18cn]\u009B\u00A6\u00B9\x15\u00881~\x13<E\u008E1\u00BE#\u00EC\u00FB\u008E\u00F7\u00FEZ\u00F6}\u00CF0\f\u00F5\b\u00CE9\u0096e!\u0084@\u00D7u\u00CC\u00F3\u00CCy\u009EU\bFU\x0B@\u00CE\u0099m\u00DB\x18\u00C7\x11kmu\x0B\u0097\x00@\u00DB\u00B6\x1C\u00C7\u00F1\x7F\x0BO\x0Eo\b\u009F\x01\x00\u009B\u00FDU\u00A2t\u00A1Hz\x00\x00\x00\x00IEND\u00AEB`\u0082"));
                   myFlyoutIcon.encoding = "BINARY";
                   myFlyoutIcon.open( "w" );
                   myFlyoutIcon.write( binData );
                   myFlyoutIcon.close();
               } // the above code to create the file should only execute once for each user on the machine
              palette._flyoutMenu = {}; // this object will hold the menu related stuff - prefaced with an underscore to avoid naming collisions
              palette._flyoutMenu.items = menuItems;
              palette._flyoutMenu.callback = callback;
              palette._flyoutMenu.draw = function( palette ) { // actually draw the menu          
                   // add the dropdownlist object to the window
                   palette._flyout = palette.add( "dropdownlist", [ ( palette.frameSize.width - 20 ), 0, palette.frameSize.width, 20], palette._flyoutMenu.items );
                   // make sure nothing is selected
                   palette._flyout.selection = null;
                   // add the onDraw method that will draw the icon instead of the normal dropdownlist
                   palette._flyout.onDraw = function() {
                        this.graphics.drawImage( ScriptUI.newImage( myFlyoutIcon ), 0, 0 );
                   // add the onChange method to fire off the callback
                   palette._flyout.onChange = function() {
                        this.window._flyoutMenu.callback( this.selection );
                        this.selection = null;
              // execute the draw function to place the flyout in the window
              palette._flyoutMenu.draw( palette );
    // sample usage
         // create the menu items
         var menuItems = [ "One", "Two", "Three", "-", "Four", "Five" ];
         // create the callback function
         sampleCallback = function( selection ) {
              // just letting all the menu items fall through for this demo
              switch( selection.text ) {
                   case "One" :
                   case "Two" :
                   case "Three" :
                   case "Four" :
                   case "Five" : {
                        alert( selection.text );
         // create the palette
         var myPalette = new Window( "palette", "Fly Out Menu Demo" );
         // adding some static text, just because
         myPalette.add( "statictext", undefined, "Demonstration of using ScriptUI drawing to customize control appearance" );
         //center and show the palette
         myPalette.center();
         myPalette.show();
         // add the flyout menu
         addFlyout( myPalette, menuItems, sampleCallback );

  • [JS CS5] ScriptUI: changing position of cursor in EditText control

    Is there a way to change the position of the cursor in an EditText control? I've played around with the textselection property, but with no luck in getting the cursor between the right characters.

    Hi JJ Fulks,
    ScriptUI does not allow to directly change the position of an EditText's cursor but there is a trick to emulate this by successively setting text and textselection.
    As far as I remember—I cannot test this now, sorry—if you want to get aaaa•bbbb (where • represents the cursor location), you need to do:
    myEditText.text = "bbbb";
    myEditText.textselection = "aaaa";
    (or something similar).
    @+
    Marc

  • CS3 license not valid

    I I am having the same problem!
    I've bought a new Mac and uninstalled CS$ from that system. Now on the new Mac, I keep getting Licence not Valid messages. I have tried enetringthe original lic from the CS3 design Premium and with the hope that I can then enter my licence for CS4 Upgrade, which I have here. All licences are proper purchased legal licences.
    Trying to get help is a joke and totally unproductive. Ay help from a real person would be appreciated.

    Hi Jeff, Sorry for not responding sooner, I've been out of the office for a few days. This is the ,message I am getting:
    I have owned official copies of the various Adobe programmes since the 90's then got CS3 Design Premium and then followed up with CS4 upgrade. So I have the boxes and the serial numbers on the backs of the cases. I've tried entering both the original CS3 details and then tried the upgrade details and they both come back with the error message.
    Re your comment regarding "registered serial numbers under my account, maybe this is the issue, but I'm pretty sure that I've never registered before and maybe that's the issue? But then why is this happening now?
    Thanks for your help.

  • Adobe support saying my CS3 License is no longer valid for CS6 Upgrade

    Hi,
    I need some real, tangible help here.  I've been on the phone and chat with Adobe support, which has been terrible.  I purchased Adobe Photoshop CS6 Upgrade under the big promotion last year to upgrade from CS3.  I am a valid owner of the CS3 Master Collection and purchased the CS6 upgrade straight from the Adobe website.  I've been able to use the CS6 product fine until now.
    Now, the support reps are telling me that my CS3 is not a valid upgrade product!!!  Seriously???  Most of them are not even aware Adobe had the promotion.  I'm just trying to transfer the license to another account, and just want the job done.
    Help!!
    Thanks!
    David

    Hi David, you say you were able to upgrade from a suite to an individual product? 
    Not sure how, because Adobe says that's not possible to do – see:
    Am I eligible for upgrade pricing from an earlier Creative Suite edition to an individual CS component?
    If so, then what they say may be true and that could affect your eligibility to transfer the product.
    As for solutions, it's no longer possible to upgrade from CS3 to CS6, but it is still possible to upgrade from CS3 to CC.

  • Adobe cs3 and CF8 validator

    Is there not a way to get CF8 validator info for CS3? Also,
    what about new
    tag hints showing up??

    ColdFusion 8 Update for Dreamweaver is here:
    http://www.adobe.com/support/coldfusion/downloads.html#cfdevtools
    Ken Ford
    Adobe Community Expert Dreamweaver/ColdFusion
    Fordwebs, LLC
    http://www.fordwebs.com
    "steve grosz" <[email protected]> wrote in
    message
    news:[email protected]..
    > Is there not a way to get CF8 validator info for CS3?
    Also, what about
    > new tag hints showing up??
    >
    >

  • Valid svg file not rendered properly Illustrator CS3: Place or File open messes up svg

    Hi I have a svg file for a chemical molecule that is validated as valid SVG by the w3c validator. Firrefox, google chrome and inkscape , as well as other svg applications open and render the file just fine.
    However adobe illustrator renders the characters in the file some 600% bigger than they need to be.
    This seems to be a bug in the svg rendering , given that the svg file works in the other programs mentioned. Can anyone tell me how to get the molecule read in correctly into Adobe Illustrator
    . I am attaching a screenshot of the molecule as read into Adobe Illustrator and the svg file itself. I am using Adobe Illustrator CS3 on Windows XP
    Thanks
    Hari
    The svg file is :
    <?xml version="1.0" encoding="UTF-8"?>
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300pt" height="300pt" viewBox="0 0 300 300" version="1.1">
    <defs>
    <g>
    <symbol overflow="visible" id="glyph0-0">
    <path style="stroke:none;" d="M 0.5 1.765625 L 0.5 -7.046875 L 5.5 -7.046875 L 5.5 1.765625 L 0.5 1.765625 Z M 1.0625 1.21875 L 4.9375 1.21875 L 4.9375 -6.484375 L 1.0625 -6.484375 L 1.0625 1.21875 Z M 1.0625 1.21875 "/>
    </symbol>
    <symbol overflow="visible" id="glyph0-1">
    <path style="stroke:none;" d="M 0.921875 -7.296875 L 3.015625 -7.296875 L 5.671875 -2.296875 L 5.671875 -7.296875 L 7.453125 -7.296875 L 7.453125 0 L 5.359375 0 L 2.703125 -5 L 2.703125 0 L 0.921875 0 L 0.921875 -7.296875 Z M 0.921875 -7.296875 "/>
    </symbol>
    <symbol overflow="visible" id="glyph0-2">
    <path style="stroke:none;" d="M 0.921875 -7.296875 L 2.796875 -7.296875 L 2.796875 -4.515625 L 5.578125 -4.515625 L 5.578125 -7.296875 L 7.453125 -7.296875 L 7.453125 0 L 5.578125 0 L 5.578125 -3.09375 L 2.796875 -3.09375 L 2.796875 0 L 0.921875 0 L 0.921875 -7.296875 Z M 0.921875 -7.296875 "/>
    </symbol>
    <symbol overflow="visible" id="glyph0-3">
    <path style="stroke:none;" d="M 2.875 -1.375 L 6.09375 -1.375 L 6.09375 0 L 0.796875 0 L 0.796875 -1.375 L 3.453125 -3.734375 C 3.691406 -3.941406 3.867188 -4.148438 3.984375 -4.359375 C 4.097656 -4.566406 4.15625 -4.78125 4.15625 -5 C 4.15625 -5.34375 4.039062 -5.617188 3.8125 -5.828125 C 3.582031 -6.035156 3.273438 -6.140625 2.890625 -6.140625 C 2.597656 -6.140625 2.273438 -6.078125 1.921875 -5.953125 C 1.578125 -5.828125 1.207031 -5.640625 0.8125 -5.390625 L 0.8125 -7 C 1.238281 -7.132812 1.65625 -7.238281 2.0625 -7.3125 C 2.476562 -7.382812 2.882812 -7.421875 3.28125 -7.421875 C 4.15625 -7.421875 4.832031 -7.226562 5.3125 -6.84375 C 5.800781 -6.457031 6.046875 -5.921875 6.046875 -5.234375 C 6.046875 -4.835938 5.941406 -4.46875 5.734375 -4.125 C 5.523438 -3.78125 5.09375 -3.320312 4.4375 -2.75 L 2.875 -1.375 Z M 2.875 -1.375 "/>
    </symbol>
    <symbol overflow="visible" id="glyph0-4">
    <path style="stroke:none;" d="M 4.25 -6.0625 C 3.675781 -6.0625 3.226562 -5.847656 2.90625 -5.421875 C 2.59375 -5.003906 2.4375 -4.410156 2.4375 -3.640625 C 2.4375 -2.867188 2.59375 -2.269531 2.90625 -1.84375 C 3.226562 -1.425781 3.675781 -1.21875 4.25 -1.21875 C 4.820312 -1.21875 5.265625 -1.425781 5.578125 -1.84375 C 5.898438 -2.269531 6.0625 -2.867188 6.0625 -3.640625 C 6.0625 -4.410156 5.898438 -5.003906 5.578125 -5.421875 C 5.265625 -5.847656 4.820312 -6.0625 4.25 -6.0625 Z M 4.25 -7.421875 C 5.414062 -7.421875 6.332031 -7.082031 7 -6.40625 C 7.664062 -5.738281 8 -4.816406 8 -3.640625 C 8 -2.460938 7.664062 -1.535156 7 -0.859375 C 6.332031 -0.191406 5.414062 0.140625 4.25 0.140625 C 3.082031 0.140625 2.164062 -0.191406 1.5 -0.859375 C 0.832031 -1.535156 0.5 -2.460938 0.5 -3.640625 C 0.5 -4.816406 0.832031 -5.738281 1.5 -6.40625 C 2.164062 -7.082031 3.082031 -7.421875 4.25 -7.421875 Z M 4.25 -7.421875 "/>
    </symbol>
    </g>
    </defs>
    <g id="surface0">
    <rect x="0" y="0" width="300" height="300" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 229.460938 201.945312 L 211.867188 194.640625 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 211.867188 194.640625 L 194.273438 187.339844 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 227.890625 195.792969 L 213.8125 189.949219 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 213.8125 189.949219 L 199.738281 184.109375 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 259.703125 178.773438 L 244.582031 190.359375 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 244.582031 190.359375 L 229.460938 201.945312 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 194.273438 187.339844 L 191.800781 168.453125 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 191.800781 168.453125 L 189.324219 149.5625 "/>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 188.394531 182.230469 L 200.152344 182.230469 L 200.152344 192.445312 L 188.394531 192.445312 Z M 188.394531 182.230469 "/>
    <g style="fill:rgb(0%,0%,100%);fill-opacity:1;">
      <use xlink:href="#glyph0-1" x="191.007812" y="190.988281"/>
    </g>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 189.324219 149.5625 L 219.566406 126.390625 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 189.261719 143.214844 L 213.453125 124.675781 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 157.941406 127.960938 L 173.632812 138.761719 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 173.632812 138.761719 L 189.324219 149.5625 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 219.566406 126.390625 L 254.757812 140.996094 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 219.566406 126.390625 L 213.222656 108.429688 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 213.222656 108.429688 L 206.875 90.46875 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 254.757812 140.996094 L 257.230469 159.882812 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 257.230469 159.882812 L 259.703125 178.773438 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 250.214844 145.433594 L 252.195312 160.542969 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 252.195312 160.542969 L 254.171875 175.652344 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 254.757812 140.996094 L 269.878906 129.410156 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.878906 129.410156 L 285 117.820312 "/>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 253.828125 173.664062 L 265.585938 173.664062 L 265.585938 183.878906 L 253.828125 183.878906 Z M 253.828125 173.664062 "/>
    <g style="fill:rgb(0%,0%,100%);fill-opacity:1;">
      <use xlink:href="#glyph0-1" x="256.4375" y="182.421875"/>
    </g>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 265.046875 112.625 L 304.957031 112.625 L 304.957031 123.015625 L 265.046875 123.015625 Z M 265.046875 112.625 "/>
    <g style="fill:rgb(0%,0%,100%);fill-opacity:1;">
      <use xlink:href="#glyph0-1" x="273.914062" y="121.53125"/>
      <use xlink:href="#glyph0-2" x="282.413971" y="121.53125"/>
      <use xlink:href="#glyph0-3" x="290.913879" y="121.53125"/>
    </g>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 206.875 90.46875 L 187.832031 90.953125 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 187.832031 90.953125 L 168.789062 91.4375 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 203.195312 95.640625 L 187.960938 96.03125 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 187.960938 96.03125 L 172.726562 96.417969 "/>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 200.996094 85.359375 L 212.753906 85.359375 L 212.753906 95.574219 L 200.996094 95.574219 Z M 200.996094 85.359375 "/>
    <g style="fill:rgb(0%,0%,100%);fill-opacity:1;">
      <use xlink:href="#glyph0-1" x="203.609375" y="94.117188"/>
    </g>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 168.789062 91.4375 L 163.363281 109.699219 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 163.363281 109.699219 L 157.941406 127.960938 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 157.941406 127.960938 L 139.980469 134.308594 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 139.980469 134.308594 L 122.019531 140.65625 "/>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 152.0625 122.855469 L 163.820312 122.855469 L 163.820312 133.070312 L 152.0625 133.070312 Z M 152.0625 122.855469 "/>
    <g style="fill:rgb(0%,0%,100%);fill-opacity:1;">
      <use xlink:href="#glyph0-1" x="154.675781" y="131.609375"/>
    </g>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 122.019531 140.65625 L 111.171875 177.179688 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(10 0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 90.632812 119.054688 L 106.328125 129.855469 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 106.328125 129.855469 L 122.019531 140.65625 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 111.171875 177.179688 L 73.085938 178.148438 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 111.171875 177.179688 L 122.757812 192.300781 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(10 0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 122.757812 192.300781 L 134.34375 207.421875 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 73.085938 178.148438 L 60.390625 142.226562 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 73.085938 178.148438 L 62.285156 193.839844 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(10 0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 62.285156 193.839844 L 51.484375 209.53125 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.390625 142.226562 L 75.511719 130.640625 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(10 0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 75.511719 130.640625 L 90.632812 119.054688 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.390625 142.226562 L 23.867188 131.378906 "/>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 83.882812 113.757812 L 97.382812 113.757812 L 97.382812 124.34375 L 83.882812 124.34375 Z M 83.882812 113.757812 "/>
    <g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
      <use xlink:href="#glyph0-4" x="86.882812" y="122.835938"/>
    </g>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0% ,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 23.867188 131.378906 L 19.433594 112.851562 "/>
    <path style="fill:none;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(10 0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 19.433594 112.851562 L 15 94.328125 "/>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 0.980469 89.03125 L 29.019531 89.03125 L 29.019531 99.617188 L 0.980469 99.617188 Z M 0.980469 89.03125 "/>
    <g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
      <use xlink:href="#glyph0-2" x="7.210938" y="98.109375"/>
      <use xlink:href="#glyph0-4" x="15.710846" y="98.109375"/>
    </g>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 37.464844 204.238281 L 65.503906 204.238281 L 65.503906 214.824219 L 37.464844 214.824219 Z M 37.464844 204.238281 "/>
    <g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
      <use xlink:href="#glyph0-2" x="43.695312" y="213.3125"/>
      <use xlink:href="#glyph0-4" x="52.195221" y="213.3125"/>
    </g>
    <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 120.316406 202.125 L 148.371094 202.125 L 148.371094 212.710938 L 120.316406 212.710938 Z M 120.316406 202.125 "/>
    <g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
      <use xlink:href="#glyph0-4" x="126.550781" y="211.203125"/>
      <use xlink:href="#glyph0-2" x="135.184586" y="211.203125"/>
    </g>
    </g>
    </svg>
    w3c validation report:
    The uploaded document "adenosine.svg" was successfully checked as SVG 1.1+IRI, XHTML5+ARIA plus MathML 2.0 (experimental). This means that the resource in question identified itself as "SVG 1.1+IRI, XHTML5+ARIA plus MathML 2.0 (experimental)" and that we successfully performed a formal validation using an SGML, HTML5 and/or XML Parser(s) (depending on the markup language used).

    If svg is not a reliable format for this purpose I need to use eps or ps or pdf as the format for the content.
    SVG is "reliable", you just need to make it Illustrator SVG, which much to the chagrin of most users is a completely different thing than web-compliant SVG. Hence people use Inkscape as an intermediate workflow in such cases. If you simply save the file from AI, you can easily see what changes it makes and how it likes the formatting and entities so if you have control over the source code of your app, I don't see what would be the difficulty an adjusting it??? I mean, EPS and PDF won't negate that fact, either - to render correctly in AI, it needs to follow its somewhat odd way of handling some format specs. You could produce a PDF that is 100% perfect as per the spec, but it could still look like crap in AI, so I'm realyl not sure what you are trying to prove here...
    Mylenium

  • CS4 Spry field validation - CS3 files?

    I designed a form in CS3.  I am now working in CS4 so I was getting a Spry error message - about outdated code.  I reentered all the validation fields but now the error messages show in the form when it is launched.  I realized my Spry folder of files is the original ones from CS3.  How do I get the new files I need?  I have run this through the validator and fixed everything I know how to fix - even though that isn't all of it!
    files are http://streitenterprises.fatcow.com/contact/index.html

    Thanks, I actually found that article earlier and it also reads: 
    "This extension updates Dreamweaver CS3 to use the Spry 1.6.1 assets for its current features. The extension also updates code hinting and code coloring to reflect the latest updates in Spry 1.6.1. The Spry Updater includes a command that provides the ability to update the Spry assets in your site(s). This extension only updates existing Spry files in Dreamweaver CS3 and those used in your sites. It does not add any additional functionality (widgets, etc) to the product."
    I updated to version 1.6.1 long ago.  The updater only applies to built-in CS3 widgets - it doesn't ADD new widgets that have come out since CS3 (unless I'm completely missing something here).  What I'm looking for is to add widgets that I don't have in CS3, kinda like adding extensions.  Am thinking one must purchase CS4 to get the four additional widgets it provides?
    "CS4 also adds four new Spry wizards to 13 available in CS3. These are the Spry Validation Password, Spry Validation Confirm, Spry Validation Radio Control Group, and Spry Tooltip."
    I'm want those without having to upgrade to CS4!

  • Acro 9 Pro/CS3 new install - "action valid only for product that is currently installed"

    Hi,
    I successfully installed CS3 on XP/SP3 followed by the Acrobat 9 Pro upgrade to 8 that was included. The install seemed fine, and I activated Acrobat 9. However, when I click the start menu icon created by the installation, the got the message "action valid only for product that is currently installed". In addition, the standard IE integration is not present. Starting a repair from the Acro Help menu doesn't seem to do anything, and the product does not appear in Control Panel Add & Remove programs.
    I can start Acr 9 by navigating to the .exe in Program Files, but really need to fix the install.
    Has anyone seen this and fixed it?
    Also, if I (hopefully not) have to manually uninstall and reinstall, does anyone know
    - how to manually uninstall Acro 9
    - if uninstall destroys the activation I've already completed?
    Thanks much,
    Gordon

    CS3 comes with AA8, not AA9. I don't know where you got AA9, unless it was a trial. As far as I know, there was no packaged upgrade to AA9 with CS3. Others can confirm that I guess. You probably need to uninstall AA9 and reinstall AA8. Then update AA8 to the current version, AA8.1.4. Bill

  • [JS CS3] ScriptUI button wants to be clicked twice

    Hi I created a sample scriptUI dlg with three buttons:
    res =
    ]"dialog { \
    ]s: StaticText { text:'Chosissez une période:' }\
    ]]period: DropDownList { alignment:'center' }, \
    ]]s: StaticText { text:'Chosissez un fichier:' }\
    ]]files: DropDownList { alignment:'center' }, \
    ]]buttons: Group { orientation: 'row', alignment: 'center', \
    ]]] revealBtn: Button { text:'Ouvrir le dossier'}, \
    ]]] okBtn: Button { text:'Ouvrir le fichier'}, \
    ]]] cancelBtn: Button { text:'Annuler', properties:{name:'cancel'} } \
    win = new Window (res);
    win.buttons.okBtn.onClick = function ()
    ]win.close(1);
    win.buttons.revealBtn.onClick = function ()
    ]win.close(45);
    if(win.show()==1)
    ]clickButton("file","Le fichier ne se trouve plus ici :");
    else if(win.show()==45)
    ]clickButton("folder","Le dossier n'a pas été trouvé.");
    b The cancel button works fine and actually all the buttons too. Except that for the two open buttons, I need to click twice to make them run.
    Any idea ?
    TIA Loic

    Hi Peter,
    Thanks for the tip. I should have see it. Nevertheless I thought it was the way to go.
    I thought the script should have ignored one of the conditions. I will try to do differently so.
    Thanks a lot
    Loic

Maybe you are looking for

  • [SOLVED] System goes to sleep immediately after boot

    I just upgraded this afternoon and now my system goes to sleep (suspend-to-RAM) as soon as it has finished booting. When I then press the power button, it wakes up, briefly shows the login screen and then goes back to sleep afterwards. This happens i

  • Need to move my old btinternet email to my new bti...

    Hi, Newbie here! I have a btinternet email address that I use that actually belongs to my (ex) partners bt account.  Now we have split, I have my own btinternet account and would like to move my old email address from my partner's account to mine.  H

  • Satellite Pro A200 - need Win7 drivers & FN buttons functionality

    Hi, i have little problem with my Satellite Pro A200-29N. I installed on him win7 and now i can't find drivers (only finded ValueAddedPackage). The second are FN buttons they doesn't works :( befor i have WinVista

  • Change the database charecterset in 9.2.0.7

    Hi, we have 9.2.0.7 database running on HP-UX Itanium 64bit. we have current WE8MSWIN1252 as the charecter set. we use this db for banking application. This Database contains english and Arabic data also. so we are in the process of upgrade of bankin

  • Why my minimized JFrame dosen't blink...

    Hi, i m trying to built a small local messenger where i am opening a new window by clicking on the user name as like normal messenger... no my problem is that if the chat window that appears after clicking on username is mimimized and some it receive